IoT开发实战

徐凯
前言 为何写作本书 几年前我作为一名嵌入式工程师参与了一个关于低功耗车载终端的研发项目,该低功耗车载终端中包含一个GPS模块和一个GPRS(2G)模块,工程师们希望通过最少的能量消耗把终端的GPS坐标上传至Web服务器中。虽然需求直截了当,但是在开发的过程中却出现了各种各样的分歧。例如传输协议采用UDP还是TCP,有的工程师认为UDP没有连接过程,传输时间更短,有的工程师认为TCP更加可靠而UDP也许会出现“丢包”现象。经过多次争论最终选择了UDP传输加自定义重传的方式。所谓自定义重传,就是车载终端把相同的数据包按照一定的时间间隔连续传输三次,每个数据包都包含一个递增的子序号,服务器通过子序号来剔除重复内容。通过增加这种容错机制似乎解决了UDP的“缺陷”,但是由于终端设备采用单向传输方式,并不要求服务器返回响应,所以终端根本不知道它上传的数据是否被正确处理。 在项目开发的过程中,工程师们在终端设备与Web平台的衔接方式的选择上也出现了不少分歧。在定制应用层协议时嵌入式工程师更喜欢二进制协议,但对于Web开发工程师来说JSON和XML才是他们所擅长的内容。因此,Web开发工程师单独做了一个UDP套接字服务,使终端设备可以把二进制内容转化为JSON格式的数据包,再把这个JSON数据包“POST”到一个HTTP服务器。此时对于Web开发工程师来说,设备其实是在提交表单。 经过工程师们的不断努力,这个低功耗车载终端如期完成。但是项目完成之后我不禁思考:这个项目是不是可以做得更好一点,是不是可以打破嵌入式工程师和Web开发工程师的技术鸿沟,是不是有更好的应用协议可以满足项目需求,是不是低功耗终端也可以提交表单?查阅了众多资料之后,我找到了CoAP。 回想硕士毕业之后我“执着”地成为一名专注于物联网的软件工程师,而我本科和硕士的专业都与机械工程相关。与其他计算机或电子专业不同,机械工…