1. 硬件平台
物联网系统设计现如今已经有着众多的技术方案,各有各的特色/优点和使用场景。
假如以成本来考虑,可能有以下一些方案:
51单片机,AVR单片机,430单片机,芯片价格较为便宜,假如不是很依靠操作系统,仅为了解决一部分简单/特定的需求,这种方式可以考虑。但是涉及到IO控制/驱动/代码写入等等问题,并不能算是一种快速的解决方案。
Arduino或者Arduino的扩展平台。虽然大部分也是使用的是AVR微处理芯片,但是作为开源硬件,已经很好的提供较为完善的整套开发流程,如IO标签,IDE,对于一些常见场景,都能找到较为完善的解决方案,同时也有着活跃的交流社区。不过出于性能和内存考虑,要使用类C的Processing语言编程。
一些诸如BeagleBone/树莓派的开发板,它们有着相对更强大的处理能力和足够大的RAM,同时运行Linux,它们可以使用更多高级的编程语言,如Python/JavaScript,在基于Web服务器诸如nginx/Node.js等平台,因为已经有现成的库,对于直接控制IO引脚也是十分方便。
……
2. 协议选型
1) HTTP
采用HTTP方案,向HTTP服务器发送HTTP请求,能从服务器接收到响应,假如对实时响应要求高,那么采用这种方案并不科学。建立一次HTTP请求需要在下位机和服务器之间建立好几个来回的交互(三次握手),对于Arduino来说,当前的以太网在建立http连接时,会阻塞其他操作,这意味着在这段时间内,处理器不能做其他操作(尽管用硬件中断可以相应解决这个问题,但这使问题复杂化并且加入了一些不必要的限制)。鉴于此,对于一些对实时性要求不高的系统,比如长时监控,可以考虑这种解决方案。
2)长轮询。
这意味服务器必须周期性地向客户端发送keep-alive消息,防止物联网下级装置认为服务器超时无响应,并且,最大的缺点还是,单向通信。
3)WebSockets
在HTML5标准提出后,很有效地解决了一部分HTTP协议的缺点。优势就是可以双向通信,在Arduino中有一个(部分)实现的WebSockets库.https://github.com/krohling/ArduinoWebsocketClient
但是由于技术方案较新,实现上有待商榷。
4)MQTT
消息队列遥测传输,是一种轻量级的消息传输协议,专门针对网络带宽受限或者代码的内存占有量有限的应用场景设计而成。
不同于HTTP采用客户端/服务器模型,MQTT使用的是发布/订阅机制,实现了经由消息代理的消息交换。发送者与接收者通信依靠的是相应的消息主题。在及时性和双向通信上有着很不错的表现。同时,它消除了存在于HTTP中客户端和服务器的紧密耦合。
同时MQTT可以运用与许多非常受限的平台和网络环境,诸如zigbee等传感器网络。
5)XMPP
是另一种消息传输的解决方案。可扩展通讯和表示协议。是因特网上一种较为通用的协议,采用XML作为消息格式。由于消息可能相对冗长,可能不太适用于内存受限的微处理器。
6)CoAP
设计受限应用协议。旨在解决适用于HTTP的同类问题。类似与MQTT-S,可以用于没有TCP的网络。