esp8266 读取 modbus 类型数据在 Grafana 展示
esp8266 做为 master,通过 usb 转 ttl 接口线,以 RTU 通信方式,获取 slave 模拟软件的寄存器数据。然后经过 clientSDK 或者 PromClient 将数据写入后端。
1 modbus 环境准备
1.1 esp8266 启动 modbus 链接串口
本次 modbus 采用 RTU 通信,底层硬件依赖串口进行通信。esp8266 的默认硬件串口,使用 RX0,TX0,用于日志调试。当再开启软串口 SoftwareSerial 时,RX2 和 TX 2 分别对应 D7,D8。
如下代码:
在 setup 阶段,RX2 和 TX2 和 RX0/TX0 会有干扰。
一个现象就是,烧录程序的时候,TX2 外接的指示灯会闪,且最后会烧录失败,最终报错“ESP32/8266 timed out waiting for packet header”。
规避方法就是:在 loop 预留足够的延时,再启动 SoftwareSerial 。因为烧录程序已经不再占用默认串口,所以启动 SoftwareSerial 不再受干扰。
1.2 借助 arduino 制作一个 usb 转 ttl 工具
因为作者刚开始没有可用的 usb 转 ttl 工具,身边只有 1 个 arduino uno 板子。可以参考(https://www.electronics-lab.com/three-ways-make-arduino-works-usbttl-converter/),快速 DIY 一个 usb 转 ttl 的工具。视频中展示的是购买的 usb 转 ttl 工具。
1.3 安装 modbusslave 模拟软件
下载破解的测试软件,作为 modbus 的模拟设备。设置为 03 模式,工作模式,如下图所示:
2 读取 modbus 数据
2.1 准备 master 设备
esp8266 作为 modbus 的 master 设备启动后,
1)使用 SoftwareSerial 先绑定 slave 设备串口
2)再读取 slave 设备寄存器的值,
2.2 准备 slave 设备
电脑模拟软件 Modbus Slave 模拟 slave 设备的数据接入
3 将数据发送到 cortex/mimir
3.1 方式 1 使用 http/https client 发送数据
配置文件 config.h 配置 token 等信息,
3.2 方式 2 使用 mqtt 发送数据
参考https://github.com/grafanafans/club/tree/master/iot-demos/clientSDK 章节配置 mqtt 接入参数
3.3 方式 3 使用 grafana 提供的 Promclient 工具
grafana 源码在这里 https://github.com/grafana/prometheus-arduino
注意,此工具适合 esp32 等内存丰富的开发板,在 esp8266 及以下开发板运行会崩溃,并报如下错误:
4 效果图
相关 demo 在 https://github.com/grafanafans/club/tree/master/iot-demos/esp8266-modbus-demo
视频及更多文章请关注我们公众号【Grafana 爱好者】
版权声明: 本文为 InfoQ 作者【jupiter】的原创文章。
原文链接:【http://xie.infoq.cn/article/da072fd92b91411d1e2a7ef3f】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论