树莓派通过TTL3.3转485 Modbus采集水表
所需道具
- 树莓派,我用的是树莓派zero wh;
- 具有光电直读功能的有线水表,我用的是咸鱼淘的埃美柯 LXSY-20E1;
- TTL3.3 转 485模块,带隔离的贵些;
- 5V转12V升压模块。
原理
树莓派有UART(GPIO14 Tx 和 GPIO15 Rx)串口通讯功能,电器特性是3.3V TTL,直读远传水表支持M-Bus/485通讯接口,我买的光电直读水表485要求12V供电(根据仪表厂家说明书)。TTL和485虽然都是串口通讯,但电器特性不一样,不能直接接!我已经烧掉一个树莓派0了,切记。
接线
- 树莓派GRIO14 Tx针脚接TTL转485模块的Tx,GPIO15 Rx接Rx;
- TTL转485模块的A+接水表485+(黄线或白线),B-接水表485-(蓝线或绿线);
- 树莓派3.3V和GND针脚接TTL转485模块,给模块供电,万用表测模块电压;
- 树莓派5V和GND针脚分别接升压模块IN+和IN-(GND),给升压模块供电,万用表测升压模块OUT+、OUT-电压;
- 升压模块供电OUT+、OUT分别接水表的红线、黑线。
python代码
根据水表Modbus规约,读数的格式为 01 03 00 00 00 02 C4 0B,01 为表地址,根据水表厂家说明书,或者从0开始到255轮询;03为Modbus读寄存器命令;00 00为数据起始地址;00 02为读2个字,即4个字节;C4 0B为CRC16校验码。另外,读取到的数据要根据水表的说明书乘以倍率,我的要乘以0.01。
python代码如下(没有优化,欢迎大家改进分享)。
import sys, time, math, serial ,struct
import RPi.GPIO as GPIOdef crc16(x):a = 0xFFFFb = 0xA001for byte in x:a ^= bytefor i in range(8):last = a % 2a >>= 1if last == 1:a ^= breturn (0x00FF & a)*256 + (0xFF00 & a)/256def modbusEncode(address, words=1):sendbuf = [address,0x03,0x00,0x00,0x00,words]crc = crc16(sendbuf)sendbuf.append((0xFF00 & crc)>>8)sendbuf.append(0x00FF & crc)print(sendbuf)return sendbufdef readFlux(usart, address):sendbuf = modbusEncode(address,2)usart.write(sendbuf)recvbuf = bytearray(usart.read(9))if len(recvbuf)==9:b3 = int(recvbuf[3])b2 = int(recvbuf[4])b1 = int(recvbuf[5])b0 = int(recvbuf[6])result = (b3<<24) |(b2<<16) |(b1<<8) | b0return result*0.01return 0if __name__ == "__main__":port="/dev/ttyAMA0"usart=serial.Serial(port,9600,timeout=5)usart.flushInput()while(True):print(readFlux(usart,0))#0为表地址,要根据水表地址修改.time.sleep(1)GPIO.cleanup()
树莓派通过TTL3.3转485 Modbus采集水表相关推荐
- 四、WebScada-OSHMI的Modbus采集
所有的配置文件,都在C:\oshmi\conf路径下 一.hmi.ini的配置 RUN节 PROTOCOL_DRIVER="modbus.exe",这样modbus程序就可以随we ...
- 树莓派CM4 Sensing(包含485接口)+python+继电器+水质仪+阿里云物联网平台ito实现实时检测水质并上传数据到阿里云ito和远程控制灯光
一.硬件设备 1.树莓派CM4 Sensing(包含485接口) 2.带485接口的继电器 继电器的mdobus指令 3.水质仪 水质仪线路需要改造一下 下图中1是水质仪自带的线,2是给水质仪提供电源 ...
- Step7-Mricro/win S7-200 485轮询 西门子485 modbus RTU 200 ModbusRTU通信S7-200与最大32个从站RS 485主站程序
Step7-Mricro/win S7-200 485轮询 西门子485 modbus RTU 200 ModbusRTU通信S7-200与最大32个从站RS 485主站程序,程序块自动轮询,无需编写 ...
- 正泰 DDSU666 Modbus 采集型电表接入 ThingsCloud
这个示例,我们介绍如何将正泰 DDSU666 单相导轨式电表接入 ThingsCloud,并实现以下数据的采集上报: 电压 电流 瞬时总有功功率 瞬时总无功功率 瞬时总视在功率 总功功率因数 有功总电 ...
- 树莓派实时(30fps)手势识别,从数据集采集开始,全部流程开源
目录结构 1.背景介绍 2.数据采集 3.网络设计 4.网络训练 5.网络部署 6.总结 1.背景介绍 最近采购了一块新的树莓派,迫不及待的想要在树莓派上实现一个实时的手势识别.从算法的角度讲,并不是 ...
- 我的第二个imx6ULL应用《QT+485传感器采集》
IMX6ULL+QT+485采集 演示视频: [野火linux]linux嵌入式问询485传感器 接下来记录我的第二个linux+QT的应用,其实原理很简单,打开串口,配置波特率,然后对接485传感器 ...
- 通过IoT-Fast平台使用Modbus协议采集电表数据并快速完成组态场景搭建
导读:IoT-Fast是一款全流程低代码物联网平台,提供了丰富的设备采集控制协议(Modbus RTU 串口.Modbus TCP 网口.通用 OpcUa 通讯协议.西门子 S7 通讯协议.三菱 Fx ...
- modbus rtu 485多节点设备调试经验
现象描述: 气象站添加485传感器采集数据,单个传感器数据采集测试均正常,当总线上的传感器节点数量超过4个,部分传感器无法响应数据 排查思路: 1.从机设备的地址是否有冲突: 通过RS485转USB集 ...
- 基于树莓派采集网关1
使用.net core 基于树莓派采集网关1-基础准备 罗里吧嗦: 本人之前一直从事的电控工作 就是搞PLC 触摸屏 变频器这些,后台由于换工作接触到了工业物联网,就是现在很火热的现场设备采集,后来自 ...
最新文章
- apache日志设置方法:按时间、按大小记录
- python与excel的关系-使用python对excle和json互相转换的示例
- vim 使用 surround 批量添加 引号
- 【转载】字段符号在ABAP OOP中的应用
- 欠条和借条傻傻分不清?小心借出的钱要不回!
- maven junit测试_使用Maven Failsafe和JUnit @Category将集成测试与单元测试分开
- interface接口_接口 interface
- jdbc读取mysql时分秒yyyy-mm-dd hh:_[转]JDBC中日期时间的处理技巧
- 程序员面试问题资源经验
- jqgrid 编辑状态获取该单元格的元素的id 和操作该元素
- android中进行https连接的方式的详解
- 在tornado中使用异步mysql操作
- uni_app UView 2.0 Upload 上传 header 如何配置
- 书摘---创业36条军规6:管理的九个问题
- Package php5 have no installation candidate。
- html实现文字在表格上方左侧,html,表格,左对齐.doc
- canvas多重阴影发光效果
- C#进阶之路(四):拉姆达
- 语速对科大讯飞,百度,思必驰,云知声的语音引擎识别结果影响对比
- 成功GET一款高大上又不显俗的Linux时间锁屏软件-GLUQLO
热门文章
- html设置margin无效,CSS中margin不起作用的原因及解决方法
- Unittest_skipe
- AD画图软件各层的含义(嵌入式硬件篇)
- 牛客SQL29:某宝店铺连续2天及以上购物的用户及其对应的天数(连续问题)
- bugku ctf 简单加密 (e6Z9i~]8R~U~QHE{RnY{QXg~QnQ{^XVlRXlp^XI5Q6Q6SKY8jUAA)
- 机器学习手撕代码(5)svm
- python 生成pdf收据_python生成器如何实现
- 13.5.4 CROSS JOIN语句
- 淘宝“雪藏“中差评,是对还是错?
- SNMP协议控制AP7921设备电源端口