我准备了一个专题Android与物联网设备通信,分为十来个小节完成。泛指Android连接其它硬件设备建立通信。之前的博客比较零零散散,这算是一次小小的挑战。尽量在工作回家后和周末来完成。

面对陌生的事物,举步维艰只是表象。时间会教你的。 --大鸡排

章节

  • Android与物联网设备通信-概念入门
  • Android与物联网设备通信-数据传递的本质
  • Android与物联网设备通信-网络模型分层
  • Android与物联网设备通信-UDP协议原理
  • Android与物联网设备通信-TCP协议原理
  • Android与物联网设备通信-基于TCP/IP自定义报文
  • Android与物联网设备通信-什么是字节序
  • Android与物联网设备通信- 字节报文组装与解析
  • Android与物联网设备通信-利用UDP广播来做设备查找
  • Android与物联网设备通信-实现远程控制Android客户端
  • Android与物联网设备通信-Android做小型服务器
  • Android与物联网设备通信-调试技巧
  • Android与物联网设备通信-并行串行与队列
  • Android与物联网设备通信-数据安全
  • Android与物联网设备通信-心跳
  • Android与物联网设备通信-网络IO模型

目录

  • 基本概念
  • 指令的本质

基本概念

透过现象去看本质,Android终端与物联网设备开发就是:

在某种可到通信的媒介下,使用一种可控的协议,使Android终端与硬件设备端交换数据。

关键字:通信媒介、传输协议、交换数据。

  • 物理层(真实媒介):蓝牙、红外、声波、WiFi、网口、串口等

  • 传输层协议:TCP UDP

  • 应用层协议:ModBus、MQTT、私有协议等

  • 交换数据(透传):业务类数据交互(在协议体内)

有点蒙圈不?先别管那些协议是什么通信媒介如何传输的,我们先放一边。慢慢来。现在你只需要记住有这么个东西。

指令的本质

现在假设我们有一台android设备和一块独立的硬件。我们倾向于把做某件事、任务、命令当做一个包来从一端(Server)发送给另一端(Client)。

比如手机控制某个设备关闭屏幕:

Android设备发送命令:{关闭屏幕}客户端收到命令:{关闭屏幕}复制代码

指令有些像是这样的:

功能码:0x01 //关闭屏幕0x02 //重启设备0x03 //打开热感应红外0x04 //关闭热感应红外复制代码

上面这段0x1则表示关闭屏幕,如果服务端发送一条功能码为0x01的指令给设备,设备就会执行关闭屏幕动作。从接受指令到动作执行。

我们需要弄明白的是,为什么要这样设计,因为更多的时候是我们需要自己定义。

  • 1.报文头和尾在不稳定的传输中可以用来标识一段信息结束和开始。
  • 2.长度字段则用来标识长度字段往后的内容整体长度。
  • 3.校验可以用来验证数据的完整性。
  • 4.功能码和数据用来完成工作定义业务。

上面这次通信设备会完成以下几个步骤:

  • 1.把数据读干净,并校验数据的完整性。
  • 2.按照定义好的格式去切割读取字段。
  • 3.根具协议体内的功能完成相应的动作。
  • 4.按照协议回复服务端表示执行完毕。

这里只提到了功能码,真实的业务场景会比这个复杂一些。会带上更多的数据体。我们会再后面的章节展开讲,这里只做初步的认识。

一般来说我们和硬件进行交互要尽量保持通信的内容简短,包的内容越小越好。这样的话就可以减少和避免产生切割包、丢包重发的情况。因为媒介的环境是不可控的,比如声波、红外会收到干扰,造成数据丢失或外界干扰紊乱。

这样一来,我们对于硬件设备这种特殊的通信采用字节流的方式就会使包变得很小,比如ModBus的协议,简单来说就是发送的包命令,按照事先确定好的。切割成不同的段来作为识别。我们把这种东西叫做报文。通常会包含报文头、内容长度、内容、报文尾(校验)。


好了,今天先讲这么多消化一下。我也是因为近两年的工作需要才真正接触到Android和物联网设备通信的。把自己学到的一些经验分享出来,网上少有看到较好的介绍。一路摸索的过程中踩了不少坑。我尽量保持采用通俗易懂又循序渐进的方式来完成后续的文章。

扯一个跟主题有关的东西,大多数Java或Android程序员因为没有接触过太低层的通信。有些概念一知半解,听说过但也没能实际用过。如果有读者恰巧看到我这篇文章,又正好是浅尝或者工作需要。建议买书从基础的网络通信原理看起。然后再投入到工作中使用。网上的资料零零散散成体系的不多,通信层面上的错误和坑如果没有一定的经验,一般难以排查到问题。切记

更多相关文章

  1. Android进程间通信(一):AIDL使用详解
  2. Andriod AOA协议通信总结
  3. 获取Android设备基本信息
  4. Android获取OAID设备标识
  5. android 获取设备型号
  6. Android中查看网卡设备信息
  7. 【Android】Android 代码判断当前设备是否为模拟器
  8. 使用Javascript判断浏览器终端设备(PC、IOS(iphone)、Android)
  9. Android之使用ContentResolver对通信录中的数据进行简单操作

随机推荐

  1. 轻轻松松看电影,这几行python代码帮你搞定
  2. 【从入门到放弃】android布局优化深入解
  3. Android(安卓)Socket与HTTPS校验
  4. 微信稳居Android(安卓)App排行榜4月份国
  5. java个推实战,Android和Ios
  6. Android(安卓)为什么主线程的looper 一直
  7. MacAndroid源码下载 Android10详解
  8. 一起Talk Android吧(第二百六十五回:Androi
  9. Android中Activity, View,Window,DecorVi
  10. Android(安卓)Socket与HTTPS校验