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

Android与物联网设备通信-概念入门相关推荐

  1. Android与物联网设备通信-自定义报文与字节序

    前几节我们把网络通信中的基础都过了一遍,今天真正开始秀操作了.本节主要讲解如何在应用层上去定义报文的结构体.良好的报文设计会让今后的业务扩展变得轻松.顺带会讲解一下字节序. 可以发现最近的章节都把两个 ...

  2. Android与物联网设备通信 - 字节报文组装与解析

    工作调动.暂时停更了一段时间.续上一篇我们学习了如何去自定义一组报文,今天我们接着解析和组装报文. 前面我们讲过在物联网通信中实际上不论我们使用什么方式作为通信介质,其本质就是字节.所以我再一次对本章 ...

  3. 基于 P2P 技术的 Android 局域网内设备通信实践

    Android 局域网内的多设备通信方式有多种,其中常见的方式有: 基于 TCP/UDP 的 Socket 通信 基于 Bluetooth 的近场通信 基于 Wifi 的 Wi-Fi Direct 连 ...

  4. Android APP物联网设备无网模式设计

    1APP缓存 APP缓存是为了支持APP和设备在没有网络的情况下任然可以使用,APP在启动时如果有网络会从平台缓存当前用户的所有数据,包括家庭,房间,设备,设备控制信息,场景信息等 2双mqtt模式 ...

  5. 物联网设备模糊:DIANE:识别应用程序中的模糊触发器,为物联网设备生成受限制的输入

      本文记录阅读DIANE论文的内容总结和一些阅读过程中不理解地方的补充,我是搬运工. 简介 发表会议 IEEE S&P 2021 作者 Nilo Redini∗, Andrea Contin ...

  6. [置顶]树莓派Android Things物联网开发:入门及资料汇总

    [转载请注明出处: http://blog.csdn.net/leytton/article/details/77848430] <树莓派Android Things物联网开发>系列文章专 ...

  7. 合宙Air780e+luatos接入华为云物联网平台完成设备通信与控制

    一.简介 1.项目介绍 之前发布的文章有esp8266的wifi模块和BC20的NB模块与华为云物联网通信为主,本期文章采用了合宙的4G LTE Cat.1模块,编程语言用的是lua,整体来说代码比较 ...

  8. 合宙Air780e+luatos+阿里云物联网平台完成设备通信与控制(属性上报+4G远程点灯)

    一.简介 1.项目介绍 之前发布的文章有采用合宙的4G LTE Cat.1模块,编程语言用的是lua,整体来说代码比较简洁,实现对华为云物联网平台的设备通信与控制,即采用一个变量作为模拟属性定时上报, ...

  9. 物联网平台搭建的全过程介绍(三)阿里云物联网设备接入订阅发布之Android studio例程

    物联网平台搭建系列内容前两节介绍的都是功能性的描述,今天以一个小例子,介绍具体的设备接入.订阅.发布的操作,例子的名字为:学生成绩录入平台,例子的界面如下图所示. 功能描述:当在阿里云物联网平台内下发 ...

  10. Android应用利用libusb设备通信权限问题

    应用层执行"chmod -R 777 /dev/bus/usb/" 来解决 Android 应用访问libusb没有权限的问题. 在应用层代码里执行这句就可以. 参考链接1:And ...

最新文章

  1. 虚拟机访问svn服务器超时_SVN卡顿原因及简单修复方法
  2. Python其他数据结构collection模块-namtuple defaultdict deque Queue Counter OrderDict arrary
  3. 【云计算的1024种玩法】云端打造家庭文件备份中心
  4. iOS 在tableview的侧滑事件里执行tableView.selectRow无效的解决办法
  5. beetl 页面标签_Beetl 2.9.0 发布,修改 HTML 标签的渲染机制
  6. ctype函数_PHP ctype_cntrl()函数与示例
  7. 设计模式之单例模式(一)
  8. mdb 查询过于复杂_【律联云知产课堂】南京商标查询主要从哪些方面判断一个商标是否适合注册?...
  9. 使用工具包自动生成向EBS系统注册表和字段的代码
  10. Nginx配置——禁止指定user_agent
  11. 计算机教育考试多少分及格,全国职称计算机考试多少分及格?
  12. 交通路标识别(毕业设计)
  13. win10商店打不开_win10商店打不开怎么办?
  14. 计算机考研408哪个视频好,计算机408考研视频哪个好
  15. JAVA基础七 类和对象
  16. IPv4/IPv6地址范围与网络地址/子网掩码的转换,点分十进制与数字掩码的转换
  17. 史密斯(smith)圆图讲解
  18. Windows 下 android自动打包 volley项目
  19. python批量发送工资条邮件
  20. SQL注入与万能密码登录

热门文章

  1. ubuntu 16.04 + zabbix 3.4 + postgresql shell
  2. amazeui学习笔记--js插件(UI增强4)--下拉组件Dropdown
  3. 数字反转(NOIP2011 普及组第一题)
  4. Linux 下配置多机实时同步
  5. Visual Studio中删除所有空行
  6. CentOS hgfs中没有共享文件夹
  7. (二)MySQL调优之-EXPLAIN关键字
  8. Git只获取部分目录的内容
  9. A1086. Huffuman树
  10. CAS简介和无锁队列的实现