在开始之前,首先需要搞明白以下几个概念,RS485, Modbus协议和DTU。

RS485,基础概念自行度娘,这里如果简单理解的话就是一种串行通信标准。非硬件工程师其实记住RS485有4条线,A,B,VIM和GND。 可简单理解为A,B作为数据传输,VIM和GND作为电源的正负。在设备接入上一般是A口对A口, B口对B口。

Modbus协议, 一种通信协议,而且是现在很多工业的电气设备上都会用到的。稍后我们会在例子中讲到。

DTU, 数据传输单元,通过DTU,可以将RS485设备的数据传输到MQTT或者其他地方。

简单理解上面的概念后,我们开始进行数据的接入。

1. 首先进行硬件之间的对接,将RS485的A口接入DTU的A口, B口接入B口。在这里要值得注意得是,因为RS485设备是属于被动设备,需要由上位机发起询问后才会返回传感器上的数据。具体的数据格式需要根据自己手上的设备来确定。

以老司机手里的这款温湿度传感器为例,在产品说明书的章节里面,描述了这款传感器的问询参数:

地址码 功能码 起始地址 数据长度 校验码低位 校验码高位
0x01 0x03 0x00,0x00 0x00,0x02 0xC4 0x0B

这说明了,如果我们需要让传感器返回传感器的数据,我们需要对传感器下发如下的命令:

010300000002C40B

为了便于大家理解, 我们这样来看这串命令

01【我们要查询地址为01的设备,默认的地址为01】

03【使用功能03】

0000【从这里开始查询】

0002【数据长度】

C40B【验证码】

如果指令下发正常,将会返回下面的数据:

地址码 功能码 字节数 数据值(湿度、温度) 校验码低位 校验码高位
0x01 0x03 0x04 0x02 0x3F 0x01 0x06 0x4A 0x15

我们还是把数据拆分起来看一下,如果返回正常,我们将会得到下面的数据。

010304023F01064A15

其中023F0106就是我们期望得到的数据,因为返回的值是16进制的,我们根据产品手册的描述,得知023F和0106分别表示在十六进制下的温度和湿度,我们再进行转换后就可以得到实际10进制下的温度和湿度了。

2. 在我们理解了如何下发数据到设备,以及读取设备返回的值后。我们开始在阿里云物联网平台进行操作。

2.1 首先创建产品,这里要注意的是,因为我们的设备是一个4G的DTU,所以联网方式选择蜂窝,数据格式选择透传(因为我们从DTU拿到的数据并不是JSON格式的)

当我们产品创建好了后,我们可以看到我们的物模型的透传伤上行和下行的TOPIC。

2.2  【重点来了】因为我们透传过来的数据并不是能直接被云平台可以解析的,所以阿里云物联网平台提供了【消息解析】这么一个功能。

为了方便理解,我们可以看一下一次设备上报将会经过哪些步骤。

通过图,我们可以看到,设备通过DTU把设备上传后,首先云平台通过MQTT的TOPIC接手到消息后,会调用RawDataToProtocol讲数据从 原始数据解析道协议数据,接着云端进行一个响应up_raw.

我们从DTU上行收到的数据如下:

最终通过转换之后得到的数据如下:

{"Params":"01030402e40080ba1c","ResultData":{"method":"thing.event.property.post","fHead":1,"id":"50594532","addr":"1","params":{"Humidity":74,"temperature":12.8},"version":"1.0","fun":"3"},"RequestId":"null","Content":"null","Reason":"success","clientId":"null"}

在这里我们可以看到我们已经拿到了设备上行的数据,即{"Humidity":74,"temperature":12.8}

这里之所以能进行转换,就是我们刚提到的消息解析所进行的。消息解析只是JS,PYTHON,PHP进行编写。

老司机使用的是PYHON,我们来看一下代码


ALINK_PROP_REPORT_METHOD = 'thing.event.property.post'  # 物联网平台Topic,设备上传属性数据到云端。def raw_data_to_protocol(bytes):uint8Array = []for byteValue in bytes:uint8Array.append(byteValue & 0xff)fHead = uint8Array[0]jsonMap = {}jsonMap['fHead'] = fHeadjsonMap['method'] = ALINK_PROP_REPORT_METHODjsonMap['version'] = '1.0'jsonMap['id'] = str(bytes_to_int(uint8Array[1:5]))jsonMap['addr'] = str(bytes_to_int(uint8Array[0:1]))jsonMap['fun'] = str(bytes_to_int(uint8Array[1:2]))params = {}params['Humidity'] = float(bytes_to_int(uint8Array[3:5]))/10params['temperature'] = float(bytes_to_int(uint8Array[5:7]))/10jsonMap['params'] = paramsreturn jsonMap# byte转成int。
def bytes_to_int(bytes):data = ['%02X' % i for i in bytes]return int(''.join(data), 16)

在上面的代码上,我们可以看到消息解析 讲收到的消息进行了几次转换,得到了相对应的数据。

我们这里着重描述一下如何获取到温度和湿度

params['Humidity'] = float(bytes_to_int(uint8Array[3:5]))/10
params['temperature'] = float(bytes_to_int(uint8Array[5:7]))/10

我们回顾一下,上述代码其实是对010304023F01064A15进行了解析。而根据传感器的约定,数据的第四,第五位表示的是湿度,第六,第七表示的是温度。

01 03 04 02 3F 01 06 4A 15

所以uint8Array[3:5] 我们拿到的是 02 3F,并将bytes转换成int后,再除以10,则得到了我们的湿度。

uint8Array[5:7] => 01 06 进行转换,再除以10,得到温度。

以上就是通过消息解析,将透传的数据在阿里云平台上进行转换的方式了。

值得注意的是,由于RS485设备属于被动设备,有的DTU可以自动轮讯,有的DTU是需要上位机下发指令后才能对RS485设备发送指令。

RS485设备通过DTU上传数据到阿里云物联网平台相关推荐

  1. 树莓派CM4 Sensing(包含485接口)+python+继电器+水质仪+阿里云物联网平台ito实现实时检测水质并上传数据到阿里云ito和远程控制灯光

    一.硬件设备 1.树莓派CM4 Sensing(包含485接口) 2.带485接口的继电器 继电器的mdobus指令 3.水质仪 水质仪线路需要改造一下 下图中1是水质仪自带的线,2是给水质仪提供电源 ...

  2. 传感器上传数据到阿里云Iot,然后从阿里云Iot传输数据到我的服务器和数据库

    整个系统架构如下: MQTT 和RocketMQ的区别: 1.传感器采用GPRS传输数据,采用微消息队列MQTT,微消息队列 MQTT 主要承担移动端连接接入.连接管理.数据转发等工作,相当于一个无限 ...

  3. 掌控板上传数据到阿里云平台

    前言 掌控板数据上云本来是一个很容易的事情,但在参考了多个博客之后,仍然无法上传成功,诡异的是MQTT一直无法连接,开始的时候我以为是我自己的WiFi的问题,后来切换了多个热点,最后来到学校用宿舍的W ...

  4. 单片机数据上传到阿里云物联网平台后,如何在手机端和网页端获取获取数据?

    最近遇到了一个需求:单片机上传数据到阿里云物联网平台,手机端或者网页端能够从物联网平台获取数据并显示到出来,再加一个手机端/网页端通过物联网平台控制单片机. 最终采用了阿里云物联网平台提供的方法,使用 ...

  5. ESP32基础应用之ESP32与阿里云物联网平台实现数据互传(MQTT协议)

    文章目录 1 实验目的 2 在阿里云物联网平台添加实验设备 3 ESP32连接阿里云物联网平台 3.1 准备ESP32工程 3.2 准备ESP32所需的MQTT相关参数 3.4 ESP32工程主要代码 ...

  6. 中移M5310-A通过AT指令MQTT连接阿里云物联网平台并进行数据互传

    一.平台端操作 1.设备创建 进入阿里云物联网平台,选择物联网平台.然后开通公共实例,成功后依次创建产品.创建设备.设备创建成功后点击最右侧的查看->MQTT连接参数可以看到该设备接入该产品所需 ...

  7. 阿里云物联网平台设备之间通讯、数据转发

    阿里云物联网平台设备之间通讯.数据转发 阿里云物联网平台设备之间通讯.数据转发 准备工作 创建云产品流转规则 调试 阿里云物联网平台设备之间通讯.数据转发 本文演示使用阿里云物联网平台两设备间的通讯. ...

  8. 阿里云物联网平台 > 设备接入 > 使用开放协议自主接入 > CoAP协议接入 >

    CoAP连接通信 更新时间:2020-08-27 17:20:05 编辑我的收藏 本页目录 基础流程 使用对称加密自主接入 使用DTLS自主接入 物联网平台支持CoAP协议连接通信.CoAP协议适用在 ...

  9. HaaS学习笔记 | 阿里云物联网平台的产品和设备创建明细教程

    [1]题目要求 [本教程视频]:阿里云物联网平台产品与设备的创建 [2]登录阿里云物联网平台 登录阿里云IOT主页:https://iot.aliyun.com 在该页面登录帐号.如果没有帐号,可以免 ...

最新文章

  1. windows 2012 nps配置
  2. D435 pyrealsense 如何实时获取摄像头的曝光值?get_frame_metadata(rs.frame_metadata_value.actual_exposure)成功了(更新UWP)
  3. vue 侦听器侦听对象属性_Spring中的异步和事务性事件侦听器
  4. Python切分文本(将文本文档切分为词列表)
  5. Visual C++编程中的文件操作
  6. c# 使用timer定时器操作,上次定时到了以后,下次还未执行完怎么处理
  7. 最小二乘法 c 语言程序,最小二乘法采用C语言.docx
  8. JVM篇-JVM内存结构与存储机制
  9. Chrome不保留历史记录,常规模式下不保留历史记录
  10. 用html做祝福语朋友,朋友友情祝福语
  11. 组装一台计算机的配置,要不要自己动手组装一台电脑?一文告诉你答案!
  12. vue.js3D立方体旋转播放特效
  13. 通过hive sql实现报表中的MTD,YTM,YTD
  14. 安卓设备的Socket网络通讯例程 (A2) -UI界面适配
  15. Linux查看文件内容的方法
  16. 线性代数系列(三)--向量空间
  17. 气传导耳机和骨传导耳机哪个好?气传导耳机要优于骨传导
  18. java进程和ksoftirqd进程的CPU突然涨高的原因
  19. 如何从 SQL Server 中的 SELECT 更新?
  20. “提升业务决策效率:探索FICO Blaze决策引擎的应用“

热门文章

  1. Golang — 命令行工具cobra
  2. python学习2019/4/25
  3. keras多层感知机+titanic数据集
  4. 《Java基础入门第2版》--黑马程序员 课后答案及其详解 第3章 面向对象(上)
  5. 实训任务1:Linux基本操作
  6. 星范医美与中原丽人首次重组 黄普利任郑州中原星范医学整形院长
  7. linux怎么查看i2c设备,Linux 下I2c设备分析
  8. 笔记markdown
  9. python tkinter button 透明图片_Tkinter-按钮图像透明背景
  10. 最全的西安小吃了,别胡流口水啊!