pic1

简介:

该设备是一款基于《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

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐