简介:
该设备是一款基于《ShineBlink 低代码核心模组》开发的《Lora 转 4G》DTU通信设备,可实现Lora 和 4G 无线通信的传输转换功能。
功能:
- 支持Lora星型组网/点对点
- 支持 4G MQTT 传输
- 支持 Json
- 支持接入各种通用云
应用领域:
-
智慧农业
-
智慧养殖
-
智慧消防
-
工业物联网
-
智慧城市
-
无线抄表
-
智慧气象/水文
开源资料地址:
FlexLua DTU: 包含一系列开源DTU通信设备,实现了物联网领域里常见的RS485/4G/WiFi/Lora通信之间的透传以及通信数据格式的转换。
----------------------配置信息开始----------------------
--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" --发布用,用于向服务器发送数据
--Lora中心点配置
--Lora中心点(center)本机地址(范围:0-65535),其他Lora节点如果需要发送消息给本机必须知道该地址
addr = 0x00
--Lora通信信道(范围:410-441MHz),相互通信的Lora节点必须在同一信道
channel = 433
--Lora无线速率(范围:0.3, 1.2, 4.8, 9.6, 19.2kpbs),速率越低通信质量越高
baudrate = "9.6kpbs"
--Lora发射功率(范围:11, 14, 17, 20dB),该值越大通信质量越高,但功耗会增加
tx_pwr = "20dB"
----------------------配置信息结束----------------------
--定义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
--LIB_SystemLogEnable() --查看详细日志(log.txt)时打开
--配置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")
--设置4G模块占用TX0、RX0、D5、D6引脚,MQTT模式,KeepAlive周期180秒,不开启GPS功能
LIB_Cat1MqttEC800Config("UART0","D5","HIGH","D6","HIGH",ServerAddr,ServerPort,ClientID,UserName,Password,180,mqtt_sub_topic,"QOS0","NO_GPS")
--设置Lora模块占用TX1、RX1、Aux接D9引脚,Md0接D10引脚
--Lora通信参数:地址=100,通信信道=433M,无线速率=9.6kbps,发射功率=20dBm
LIB_LoraConfig("UART1","D9","D10",addr,channel,baudrate,tx_pwr)
--使能系统10毫秒定时器开始工作
timer_ms = 0
LIB_10msTimerConfig("ENABLE")
--开始大循环
while(GC(1) == true)
do
--查询是否收到Lora数据
recv_flag,recv_addr,recv_data = LIB_LoraRecv()
if recv_flag == 1 then
--在收到的Lora Json字符串前面增加Addr对象
--例如:将收到的Lora Json字符串{"Temperature":25.6, "Humidity":72}
--转换成新的Json字符串 {"Addr":1,"Temperature":25.6, "Humidity":72}
--上面的"Addr":1是recv_addr的值举例,代表某个Lora从机的地址
json_str = LIB_TabToStr(recv_data)
json_str = string.sub(json_str, 2, string.len(json_str)-1)--去掉首尾的"{}"
json_str = "{"..string.format("\"Addr\":%d,", recv_addr)..json_str.."}"
print(json_str)
--将新增Addr后的Json字符串发送给云端
LIB_Cat1MqttEC800SendPub("QOS0", mqtt_pub_topic, json_str)
end
--每隔0.5秒根据4G模状态更新LED灯颜色
if timer_ms >= 500 then
timer_ms = 0
State,IMSI,ICCID,CSQ = LIB_Cat1StatusQuery()
if State == "PowerOn" then --4G模块已上电但没发现sim卡
RGB(0,0,0) --白
elseif State == "SimOK" then --4G模块发现sim卡
RGB(0,1,1) --红
elseif State == "Attached" then --4G模块已连上附近的基站
RGB(1,1,0) --蓝
elseif State == "Connected" then --4G模块已和服务器连结
RGB(1,0,1) --绿
else --4G模块还未开始工作
RGB(1,1,1) --全灭
end
end
end