一些关于智能硬件的随想
最近在给自己的开源项目Lithosphere IoT Platform补文档。
Lithosphere IoT平台里,包括了名为sand-demo演示范例。在项目文档z中,hello系列教程里的,也包括了几个软硬件一体的范例。
既然是IoT平台的范例,肯定少不了要出现智能硬件。基本上来说,在范例中出现的硬件平台,主要是Respberry Pi和Arduino。
为何选择Arduino,理由很简单,因为Arduino容易上手。考虑到我的职业经历主要以软件开发为主,缺少硬件开发经验,所以选择Arduino不奇怪。
在IoT领域,我个人觉得最麻烦的一个问题是,在架构上,IoT应用涉及到多协议和多端的协作整合。
说到多端协作整合,IoT应用中,除了服务器端,智能硬件终端之外,一般还会涉及到IoT协议通讯网关和边缘计算设备。在这些领域,MCU板的能力不够用了,一般会涉及到MPU硬件板和嵌入式开发。
说到嵌入式开发,我的职业背景,虽然主要是个软件开发者,但我是一个Linux的fans。
这样说吧,我曾经非常极端的把自己的桌面电脑的Windows删除掉,换成了Linux。是的,我曾经在有10年时间里,用Linux来做一切事情,我用Linux走开发,用Linux上网浏览,和朋友聊天,看盗版碟。除了不能玩游戏(是的,我不爱玩游戏)和不能使用网上银行之外,我用Linux系统做所有的事。
作为一个Linux fans,我当然会自己编译内核,定制Linux。作为一个经验丰富的Java开发者,在服务器端,那不用说了,我使用Linux服务器的经验,那肯定是很多的。
回到智能硬件MPU上,当我选择智能硬件来演示自己的开源IoT平台时,我当然会有一番考察和思考。在做IoT平台之前,我在两家公司做过IoT应用。
第一家公司,我们使用了专用的Linux硬件板,硬件板厂家定制了Linux内核,将操作系统烧录到硬件板中,并对硬件板做了很多兼容性测试,并给客户提供技术支持。
第二家公司,其实也类似,我们采购了专用的Linux硬件板。区别在于,这次厂家是华为,华为除了定制的Linux之外,还给硬件板上预装了一些IoT的程序。是的,华为直接提供了一个集成多种IoT通讯协议的智能网关硬件。
问题是什么呢?对于第一家公司的解决方案来说,问题在于,它不是一个标准化的解决方案。
硬件方面来说,硬件板方案并不担保都采用标准化的技术方案。对于操作系统和软件来说,厂家根据自己的硬件解决方案,定制一个linux,自己编译了Linux内核,以及安装了硬件的相关驱动。
问题在于,在这个并不标准的硬件和操作系统之上,当你碰到问题时,一个是你可以依赖自己的Linux经验,另一个,你可以依赖厂家的技术支持。
对于第二家公司的解决方案来说,情况似乎要好一些,因为这个公司是华为。是的硬件和软件上来说,华为提供的解决方案,会更加标准化一些。而且华为的技术支持能力,也肯定比第一家公司强太多。
那问题在哪儿呢?
第一个问题,大厂家会习惯性的绑定自己的技术方案。华为的IoT网关硬件,直接集成了几种IoT通讯协议支持。但是华为不开源这些IoT协议的集成程序,也不担保这些程序接口的标准化和通用性。简单来说,在华为的IoT网关上,你使用华为专用的API和SDK进行开发,你绑定在了华为的平台上。
第二个问题,简单来说,就一个字,贵。华为的IoT网关,价格就6K RMB一个吧。
当然,这能够理解,华为2022年,净利润是356亿RMB。华为是需要挣钱的,给华为员工发工资,给国家交税。
正是因为以往的IoT项目的经历,所以,当我自己来开发开源IoT平台时,当我选择使用树莓派硬件平台时,我感觉是惊喜的。
开源硬件!原来硬件也可以开源?来吧,作为开源的超级fans,我一定得整一下开源硬件。
一番折腾后,我把sand-demo跑了起来。
说说自己的感受吧。
我必须得说,树莓派,对于背景是软件开发者的我,是非常友好的。这是因为,树莓派采用PC标准化的硬件,以及使用通用操作系统。
怎么说呢,树莓派除了GPIO硬件接口之外,完全可以把它看作一个标准PC电脑。无论是USB通用接口,还是标准无线WiFi和蓝牙,简直和标准PC没有区别。
更赞的是,树莓派使用通用的Linux操作系统。当然,树莓派提供了自己的Raspberry Pi OS操作系统。但是这个操作系统基于标准的Debian。
简单来说,我可以使用通用的Linux工具,以及很方便的安装各种通用的软件包。
我可以简单的用
sudo apt-get install default-jdk
就装好openjdk 11。
也可以用
sudo apt-get install ffmepg
来安装FFmpeg。
多聊几句。关于IoT操作系统的选择,我以前考虑过Andriod Things。因为Android可以用Java做开发,当google宣布Andriod Things项目时,我当然是兴奋的,很好,在硬件板上使用Java做开发,这是多么愉快的事啊。
当然,我并不惧怕C/C++开发。在Lithosphere IoT里,有不少C/C++代码。Mud库,是完全采用C开发的。
但是,我无法不去考虑发效率的问题。以及,全世界有这么多Java开发者,如果能够在IoT应用中,使用Java做开发该多好啊!
Android能够这么流行,我想,google当时采用Java作为应用层的主要开发语言,这应该一个重要的因素。
当google决定放弃Android Things项目时,我是很失望的。
当我准备好了,计划使用C/C++作为主要开发语言,来开发我的开源项目的IoT网关和终端时,出乎我意料的事情出现了。
这是一块Raspberry Pi Zero W板子:
它的配置是1G CPU,512M内存,可以运行通用的Raspbery Pi OS
它可以跑Java程序吗?
当然可以,为什么不?它可是有1G的CPU,512M的内存,运行标准的Linux操作系统。
还有,我在淘宝上买下它的价格是153元RMB。
在决定把职业生涯的最后阶段,全部投资到IoT这个领域时,当时我是这样考虑的。
常规的应用开发,WEB开发,不值得再投入了。因为这个领域技术太成熟了,搞相关开发的人太多了。当然,可以切入到垂直领域,在某个业务领域,把产品做到牛逼,这是一个解决方案。可惜,我没有看到相关的机会,所以,这个方向上,我已经找不到路了。
移动应用开发,这个方向上,更多的是竞争是在产品创意方面,而不是技术上。这个方向上,也是做得太多,太烂了,也是缺少发展的空间了。而且,随着互联网,移动互联网的泡沫破灭,现在这个领域的投资很少,没必要再进到这个红海里去扑腾了。
IoT这个领域,好就好在,还有较大的应用开发的空间。相较前面说到的两个领域,IoT领域由于技术上的还不够成熟,应用开发还没有被做烂。
这里说的技术还不够成熟,两方面。一方面是指智能硬件的计算能力,智能硬件在硬件计算能力上还没有突破的话,就很难用来做复杂应用。
另一方面,在于IoT领域的通讯技术的成熟度。由于IoT智能设备一般必须采用无线通讯、又需要考虑极端的节能,所以,需要对付这些约束所带来的技术挑战。
如果相关领域技术还不够成熟,那么,大规模的应用自然就做不起来。
当我拿着这块Raspberry Pi Zero W时,我陷入了沉思。智能硬件的计算能力这个问题,是否已经得到了突破。或者说,是否已经到了突破的边界,接下来问题就会被克服掉。
是的,现在可以认为,智能硬件的计算能力,已经得到了突破。
至于另外一个问题,通讯技术的成熟。很好,这不就是Lithosphere IoT平台尝试去解决的问题吗?这不正是时代还留给我们的机会吗?
我确信,未来,我们身边,会充满无数智能硬件小设备。
朋友!欢迎你进入IoT的世界!
是的,可以有些结论了!
随着技术的发展,智能硬件在技术上已经逐渐成熟。IoT领域,将会出现更多,更复杂的应用。
那么,这应该会导致一个趋势,就是硬件开发变得更软件化。何为硬件开发软件化?在硬件开发领域,或者说IoT开发领域,因为硬件变得更智能化,计算能力的增强,应用将变得更加复杂,而这需要在硬件上,做更复杂的软件编程。更多的纯软件开发人员,将会进入智能硬件(或者说是IoT)的开发领域。
更多的软件开发人员,进入智能硬件开发领域。那么,这其中一个推动剂,我想,应该会是智能硬件的架构标准化,以及嵌入式操作系统的通用化。
是的,我想,智能硬件,应该复制PC时代,X86标准化的进程。
当然,智能硬件架构,会有自己的特点,ARM架构,GPIO接口,......
将来,未必是Raspbery Pi,未必是Raspberry Pi OS和Ubuntu Core。但应该是标准化的硬件架构,以及通用的操作系统。
这样的趋势,对于纯软件开发人员,进入智能硬件开发领域,这绝对是一个利好!
至于当前、现在,我想,可以先把赌注先押在Raspberry Pi,Arduino,STM32上。