现代的物联网系统核心就在边缘计算。而边缘是一个十分宽泛的定义,涵盖了从感知层以上到数据发送到云端之前的所有环节。感知层把数据送到网关后,最终由网关通过 TCP 协议传输到云端。
云端有各种实现方式,各家云厂商也有自己的接口协议,但是 MQTT 作为事实的物联网传输协议,基本上各家厂商无论规模都需要在云端部署自己的 MQTT 服务器和时序数据库。
中小规模的物联网开发企业,怎样高效低成本的设计和论证物联网系统的可行性呢?如果是买开发板来开发就错了!实际上现代的物联网系统必须是跨平台的,因此,最好的开发环境其实就是 x86 虚拟机。一个中小规模的科技创业企业,最合适的环境其实就是在企业内部署3台以上配置比较高的台式机作为开发和测试,通过 Promox VE 甚至能实现类似 VMware 的 Vmotion 功能。
前面谈到跨平台,一般而言需要在嵌入式设备上做开发,Java 因为比较重是不合适作为后端开发语言的。C++当然是不错的选项,但是在一些模块的易构上没有 Go 语言方便。 Go 语言不但在跨平台的编译上十分简单,而且编译后的软件包由于无需依赖其他类库,简直就是和嵌入式开发是天作之合。
我司自主设计的基于 Go 语言的智能网关物联网数据采集模块,提供 Modbus,SNMP 等协议栈的感知层数据采集,用户可自定义 Modbus/SNMP 模板,通过 MQTT 协议发送数据到各家云厂商的平台。
物联网数据安全十分重要,我们的 MQTT 服务器采用 TLS 加密并通过一个设备一套密钥的措施采用加密认证,保证数据安全。
在 X86 虚拟机上测试通过以后,我们可以很方便的编译出 ARM 版本的后端部署到 ARM 开发板上测试。
ARM 开发板在需要使用 microSD 卡或者板载 NAND Flash 启动测试的情形下,频繁读写这些存储不仅烧写速度慢,最重要的是影响存储寿命,我们可以在开发环境下通过设置 uBoot 从 NFS 启动根文件系统。
随着人工智能算法的普及,边缘智能越来越受到用户的重视,Google 的 TensorFlow Lite 能成功的部署到树莓派这样的低成本 ARM 板子上做视频识别,这对于工厂做一些简单的产品缺陷管理不失为低成本的物联网应用。
总结:为了高效开发,我们最好使用 x86 虚拟机平台,开发语言用 Go 语言,在安全上要考虑 MQTT 的认证和加密。