我准备了一个专题Android与物联网设备通讯,分为十来个小节完成。泛指Android链接其它硬件设备创建通讯。以前的博客比较零零散散,这算是一次小小的挑战。尽可能在工做回家后和周末来完成。html
面对陌生的事物,举步维艰只是表象。时间会教你的。 --大鸡排android
透过现象去看本质,Android终端与物联网设备开发就是:程序员
在某种可到通讯的媒介下,使用一种可控的协议,使Android终端与硬件设备端交换数据。安全
关键字:通讯媒介、传输协议、交换数据。bash
物理层(真实媒介):蓝牙、红外、声波、WiFi、网口、串口等服务器
传输层协议:TCP UDP网络
应用层协议:ModBus、MQTT、私有协议等spa
交换数据(透传):业务类数据交互(在协议体内)设计
有点蒙圈不?先别管那些协议是什么通讯媒介如何传输的,咱们先放一边。慢慢来。如今你只须要记住有这么个东西。调试
如今假设咱们有一台android设备和一块独立的硬件。咱们倾向于把作某件事、任务、命令当作一个包来从一端(Server)发送给另外一端(Client)。
好比手机控制某个设备关闭屏幕:
Android设备发送命令:{关闭屏幕}
客户端收到命令:{关闭屏幕}
复制代码
指令有些像是这样的:
功能码:
0x01 //关闭屏幕
0x02 //重启设备
0x03 //打开热感应红外
0x04 //关闭热感应红外
复制代码
上面这段0x1则表示关闭屏幕,若是服务端发送一条功能码为0x01的指令给设备,设备就会执行关闭屏幕动做。从接受指令到动做执行。
咱们须要弄明白的是,为何要这样设计,由于更多的时候是咱们须要本身定义。
上面此次通讯设备会完成如下几个步骤:
这里只提到了功能码,真实的业务场景会比这个复杂一些。会带上更多的数据体。咱们会再后面的章节展开讲,这里只作初步的认识。
通常来讲咱们和硬件进行交互要尽可能保持通讯的内容简短,包的内容越小越好。这样的话就能够减小和避免产生切割包、丢包重发的状况。由于媒介的环境是不可控的,好比声波、红外会收到干扰,形成数据丢失或外界干扰紊乱。
这样一来,咱们对于硬件设备这种特殊的通讯采用字节流的方式就会使包变得很小,好比ModBus的协议,简单来讲就是发送的包命令,按照事先肯定好的。切割成不一样的段来做为识别。咱们把这种东西叫作报文。一般会包含报文头、内容长度、内容、报文尾(校验)。
好了,今天先讲这么多消化一下。我也是由于近两年的工做须要才真正接触到Android和物联网设备通讯的。把本身学到的一些经验分享出来,网上少有看到较好的介绍。一路摸索的过程当中踩了很多坑。我尽可能保持采用通俗易懂又按部就班的方式来完成后续的文章。
扯一个跟主题有关的东西,大多数Java或Android程序员由于没有接触过过低层的通讯。有些概念只知其一;不知其二,据说过但也没能实际用过。若是有读者恰巧看到我这篇文章,又正好是浅尝或者工做须要。建议买书从基础的网络通讯原理看起。而后再投入到工做中使用。网上的资料零零散散成体系的很少,通讯层面上的错误和坑若是没有必定的经验,通常难以排查到问题。切记