概述:
该设备是一款基于《ShineBlink 低代码核心模组》开发的《RS485 转 WiFi 》DTU通信设备,可实现RS485 和 WiFi 无线通信的传输转换功能。
功能:
- 支持 TCP/UDP 透传
- 支持 MQTT Json 传输
- 支持 Modbus RTU
- 支持 Hex 转 Ascii
- 支持接入各种通用云
- 支持ShineBlink免开发云+小程序
应用领域:
-
智慧农业
-
智慧养殖
-
智慧消防
-
工业物联网
-
智慧城市
-
无线抄表
-
智慧气象/水文
开源资料地址:
FlexLua DTU: 包含一系列开源DTU通信设备,实现了物联网领域里常见的RS485/4G/WiFi/Lora通信之间的透传以及通信数据格式的转换。
源代码
----------------------配置信息开始----------------------
--路由器/热点配置
ap_ssid = "mywifi" --路由器账号
ap_passwd = "abc123" --路由器密码
--MQTT连接参数
ServerAddr = "mqtt.ctwing.cn" --MQTT服务器ip地址或域名
ServerPort = 1883 --MQTT服务器端口号
ClientID = "15589964DTU01" --产品ID"15589964" + 设备编号"DTU01"
UserName = "ShineBlink" --建议填写为用户自己的天翼物联网平台(AIoT)用户名
Password = "lMmugH2yURmY2uJqkNby-zQHGJ67ngjMAYR6kkGQmko" --采用的一型一密,特征串
--MQTT topic相关参数
mqtt_sub_topic = "device_control"--订阅用,用于接收服务器下发的数据
mqtt_pub_topic = "$device_send" --发布用,用于向服务器发送数据
--RS485总线参数
Rs485BaudRate = "BAUDRATE_19200" --通信速率
----------------------配置信息结束----------------------
--定义10毫秒定时器的回调函数,函数名字必须是LIB_10msTimerCallback
function LIB_10msTimerCallback()
timer_ms = timer_ms + 10
LIB_GpioToggle("D11") --喂硬件看门狗
end
--RGB三色灯控制函数
function RGB(R,G,B)
LIB_GpioWrite("D0",R)
LIB_GpioWrite("D1",G)
LIB_GpioWrite("D3",B)
end
--配置D0,D1,D3为普通GPIO输出,控制LED_R,LED_G,LED_B
LIB_GpioOutputConfig("D0","STANDARD")
LIB_GpioOutputConfig("D1","STANDARD")
LIB_GpioOutputConfig("D3","STANDARD")
RGB(1,1,1) --一上电Led三色灯默认都不亮
--配置D11为普通输出,控制看门狗
LIB_GpioOutputConfig("D11","STANDARD")
--配置Uart1串口波特率为
LIB_Uart1Config(Rs485BaudRate)
--配置485发送和接收控制引脚
LIB_GpioOutputConfig("D8","STANDARD")
LIB_GpioWrite("D8",1) --默认使能485模块进入接收状态
--初始化C2芯片内部的WIFI以MQTT Client方式工作,并配置其详细工作参数,具体参数介绍可参考API文档
LIB_MQTTC2Config(ap_ssid,ap_passwd,ServerAddr,ServerPort,0,ClientID,UserName,Password,60,mqtt_sub_topic,"QOS0")
--使能系统10毫秒定时器开始工作
timer_ms = 0
LIB_10msTimerConfig("ENABLE")
--开始大循环
while(GC(1) == true)
do
--查询是否收到485数据
flag,tab = LIB_Uart1Recv()
if flag == 1 then
--将收到的RS485 Hex字节流数据转换成Ascii形式装入Json字符串中上发给服务器
--例如:将收到的0x01 0x05 0xB3 转换成 {"Data":"0105B3"}
json_str = string.format("{\"Data\":\"%s\"}", LIB_HexTabToHexStr(tab))
LIB_MqttC2SendPub("QOS0", mqtt_pub_topic, json_str)
end
--查询是否收到服务器下发的数据
flag,topic,msg = LIB_MqttC2RecvSub()
if flag == 1 then
print(string.format("Get datas on topic %s: %s", topic, msg))
--查看服务器是否下发包含"Data"的Json字符串信息
--例如:{"Data":"01023B5f"},即0x01 0x02 0x3B 0x5F
if string.find(msg, "Data") ~= nil then
json_hex_str = LIB_JsonParse(msg, "$.Data") --解析出例如"01023B5f"
--去掉首尾的""
json_hex_str = string.sub(json_hex_str, 2, string.len(json_hex_str)-1)
--将收到的数据解转换成Hex字节流下发给485端口
LIB_GpioWrite("D8",0) --485进入发送模式
LIB_Uart1BlockSend(LIB_HexStrToHexTab(json_hex_str))
LIB_GpioWrite("D8",1) --485进入接收模式
end
end
--每隔0.5秒根据WiFi模状态更新LED灯颜色
if timer_ms >= 500 then
timer_ms = 0
r1,r2,r3,ApCon=LIB_GetC2KeyDbgInfo()
if ApCon == 0 then --WiFi未连上路由器
RGB(0,0,0) --白
elseif ApCon == 1 then --WiFi已连上路由器
RGB(1,1,0) --蓝
else
RGB(1,1,1) --全灭
end
end
end