所需道具

  1. 树莓派,我用的是树莓派zero wh;
  2. 具有光电直读功能的有线水表,我用的是咸鱼淘的埃美柯 LXSY-20E1;
  3. TTL3.3 转 485模块,带隔离的贵些;
  4. 5V转12V升压模块。

原理

树莓派有UART(GPIO14 Tx 和 GPIO15 Rx)串口通讯功能,电器特性是3.3V TTL,直读远传水表支持M-Bus/485通讯接口,我买的光电直读水表485要求12V供电(根据仪表厂家说明书)。TTL和485虽然都是串口通讯,但电器特性不一样,不能直接接!我已经烧掉一个树莓派0了,切记。

接线

  1. 树莓派GRIO14 Tx针脚接TTL转485模块的Tx,GPIO15 Rx接Rx;
  2. TTL转485模块的A+接水表485+(黄线或白线),B-接水表485-(蓝线或绿线);
  3. 树莓派3.3V和GND针脚接TTL转485模块,给模块供电,万用表测模块电压;
  4. 树莓派5V和GND针脚分别接升压模块IN+和IN-(GND),给升压模块供电,万用表测升压模块OUT+、OUT-电压;
  5. 升压模块供电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采集水表相关推荐

  1. 四、WebScada-OSHMI的Modbus采集

    所有的配置文件,都在C:\oshmi\conf路径下 一.hmi.ini的配置 RUN节 PROTOCOL_DRIVER="modbus.exe",这样modbus程序就可以随we ...

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

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

  3. 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主站程序,程序块自动轮询,无需编写 ...

  4. 正泰 DDSU666 Modbus 采集型电表接入 ThingsCloud

    这个示例,我们介绍如何将正泰 DDSU666 单相导轨式电表接入 ThingsCloud,并实现以下数据的采集上报: 电压 电流 瞬时总有功功率 瞬时总无功功率 瞬时总视在功率 总功功率因数 有功总电 ...

  5. 树莓派实时(30fps)手势识别,从数据集采集开始,全部流程开源

    目录结构 1.背景介绍 2.数据采集 3.网络设计 4.网络训练 5.网络部署 6.总结 1.背景介绍 最近采购了一块新的树莓派,迫不及待的想要在树莓派上实现一个实时的手势识别.从算法的角度讲,并不是 ...

  6. 我的第二个imx6ULL应用《QT+485传感器采集》

    IMX6ULL+QT+485采集 演示视频: [野火linux]linux嵌入式问询485传感器 接下来记录我的第二个linux+QT的应用,其实原理很简单,打开串口,配置波特率,然后对接485传感器 ...

  7. 通过IoT-Fast平台使用Modbus协议采集电表数据并快速完成组态场景搭建

    导读:IoT-Fast是一款全流程低代码物联网平台,提供了丰富的设备采集控制协议(Modbus RTU 串口.Modbus TCP 网口.通用 OpcUa 通讯协议.西门子 S7 通讯协议.三菱 Fx ...

  8. modbus rtu 485多节点设备调试经验

    现象描述: 气象站添加485传感器采集数据,单个传感器数据采集测试均正常,当总线上的传感器节点数量超过4个,部分传感器无法响应数据 排查思路: 1.从机设备的地址是否有冲突: 通过RS485转USB集 ...

  9. 基于树莓派采集网关1

    使用.net core 基于树莓派采集网关1-基础准备 罗里吧嗦: 本人之前一直从事的电控工作 就是搞PLC 触摸屏 变频器这些,后台由于换工作接触到了工业物联网,就是现在很火热的现场设备采集,后来自 ...

最新文章

  1. apache日志设置方法:按时间、按大小记录
  2. python与excel的关系-使用python对excle和json互相转换的示例
  3. vim 使用 surround 批量添加 引号
  4. 【转载】字段符号在ABAP OOP中的应用
  5. 欠条和借条傻傻分不清?小心借出的钱要不回!
  6. maven junit测试_使用Maven Failsafe和JUnit @Category将集成测试与单元测试分开
  7. interface接口_接口 interface
  8. jdbc读取mysql时分秒yyyy-mm-dd hh:_[转]JDBC中日期时间的处理技巧
  9. 程序员面试问题资源经验
  10. jqgrid 编辑状态获取该单元格的元素的id 和操作该元素
  11. android中进行https连接的方式的详解
  12. 在tornado中使用异步mysql操作
  13. uni_app UView 2.0 Upload 上传 header 如何配置
  14. 书摘---创业36条军规6:管理的九个问题
  15. Package php5 have no installation candidate。
  16. html实现文字在表格上方左侧,html,表格,左对齐.doc
  17. canvas多重阴影发光效果
  18. C#进阶之路(四):拉姆达
  19. 语速对科大讯飞,百度,思必驰,云知声的语音引擎识别结果影响对比
  20. 成功GET一款高大上又不显俗的Linux时间锁屏软件-GLUQLO

热门文章

  1. html设置margin无效,CSS中margin不起作用的原因及解决方法
  2. Unittest_skipe
  3. AD画图软件各层的含义(嵌入式硬件篇)
  4. 牛客SQL29:某宝店铺连续2天及以上购物的用户及其对应的天数(连续问题)
  5. bugku ctf 简单加密 (e6Z9i~]8R~U~QHE{RnY{QXg~QnQ{^XVlRXlp^XI5Q6Q6SKY8jUAA)
  6. 机器学习手撕代码(5)svm
  7. python 生成pdf收据_python生成器如何实现
  8. 13.5.4 CROSS JOIN语句
  9. 淘宝“雪藏“中差评,是对还是错?
  10. SNMP协议控制AP7921设备电源端口