物联网无线RS485 转 4G DTU通信设备(含源代码)

pic1

简介:

该设备是一款基于《ShineBlink 低代码核心模组》开发的《RS485 转 4G 》DTU通信设备,可实现RS485 和 4G 无线通信的传输转换功能。

功能:
  • 支持 TCP/UDP 透传
  • 支持 MQTT Json 传输
  • 支持 Modbus RTU
  • 支持 Hex 转 Ascii
  • 支持接入各种通用云
  • 支持ShineBlink免开发云+小程序
应用领域:
  • 智慧农业

  • 智慧养殖

  • 智慧消防

  • 工业物联网

  • 智慧城市

  • 无线抄表

  • 智慧气象/水文

开源资料地址:

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" --发布用,用于向服务器发送数据
--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模块进入接收状态
--设置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")
--使能系统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_Cat1MqttEC800SendPub("QOS0", mqtt_pub_topic, json_str)
	end
	
	--查询是否收到服务器下发的数据
	flag,topic,msg  = LIB_Cat1MqttEC800RecvSub()
	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秒根据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

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值