物联网无线RS485 转 Lora DTU通信设备(含源代码)
该设备是一款基于《ShineBlink 低代码核心模组》开发的《RS485 转 Lora 》DTU通信设备,可实现RS485 和 Lora 无线通信的传输转换功能。
·
简介:
该设备是一款基于《ShineBlink 低代码核心模组》开发的《RS485 转 Lora 》DTU通信设备,可实现RS485 和 Lora 无线通信的传输转换功能。
功能:
- 支持 RS485和 Lora 透传
- 支持星型组网(两公里范围)
- 支持 Modbus RTU 解析
- 支持 Hex 转 Json传输
应用领域:
-
智慧农业
-
智慧养殖
-
智慧消防
-
工业物联网
-
智慧城市
-
无线抄表
-
智慧气象/水文
开源资料地址:
FlexLua DTU: 包含一系列开源DTU通信设备,实现了物联网领域里常见的RS485/4G/WiFi/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"
--485总线通信速率
Rs485BaudRate = "BAUDRATE_19200"
----------------------配置信息结束----------------------
--定义10毫秒定时器的回调函数,函数名字必须是LIB_10msTimerCallback
function LIB_10msTimerCallback()
LIB_GpioToggle("D11") --喂硬件看门狗
--绿色LED灯处理程序
if LED_G_OnTimeMsCnt >= 10 then
LED_G_OnTimeMsCnt = LED_G_OnTimeMsCnt - 10
LIB_GpioWrite("D1",0) --亮
else
LIB_GpioWrite("D1",1) --灭
end
--红LED灯处理程序
if LED_R_OnTimeMsCnt >= 10 then
LED_R_OnTimeMsCnt = LED_R_OnTimeMsCnt - 10
LIB_GpioWrite("D0",0) --亮
else
LIB_GpioWrite("D0",1) --灭
end
end
--配置D0,D1,D3为普通GPIO输出,控制LED_R,LED_G,LED_B
LIB_GpioOutputConfig("D0","STANDARD")
LIB_GpioOutputConfig("D1","STANDARD")
LIB_GpioOutputConfig("D3","STANDARD")
LIB_GpioWrite("D0",1)
LIB_GpioWrite("D1",1)
LIB_GpioWrite("D3",1)
--配置D11为普通输出,控制看门狗
LIB_GpioOutputConfig("D11","STANDARD")
--配置Uart1串口波特率为
LIB_Uart1Config(Rs485BaudRate)
--配置485发送和接收控制引脚
LIB_GpioOutputConfig("D8","STANDARD")
LIB_GpioWrite("D8",1) --默认使能485模块进入接收状态
--设置Lora模块占用TX0、RX0、Aux接D5引脚,Md0接D6引脚
--Lora通信参数:地址=100,通信信道=433M,无线速率=9.6kbps,发射功率=20dBm
LIB_LoraConfig("UART0","D5","D6",addr,channel,baudrate,tx_pwr)
--使能系统10毫秒定时器开始工作
LIB_10msTimerConfig("ENABLE")
LED_G_OnTimeMsCnt = 0
LED_R_OnTimeMsCnt = 0
--开始大循环
while(GC(1) == true)
do
--查询是否收到485数据
flag,tab = LIB_Uart1Recv()
if flag == 1 then
--红灯闪0.1秒
LED_R_OnTimeMsCnt = 100
--将收到的数据第一个字节作为target_addr,剩下的数据原封不动Lora发送出去
target_addr = tab[1]
tab1 = {}
for i=2, #tab do
tab1[i-1] = tab[i]
end
LIB_LoraSend(target_addr, tab1)
end
--查询是否收到Lora数据
recv_flag,recv_addr,recv_data = LIB_LoraRecv()
if recv_flag == 1 then
--绿灯闪0.1秒
LED_G_OnTimeMsCnt = 100
LIB_GpioWrite("D8",0) --485进入发送模式
--将收到的数据原封不动下发给485端口
LIB_Uart1BlockSend(recv_data)
LIB_GpioWrite("D8",1) --485进入接收模式
end
end
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献4条内容
所有评论(0)