关闭视频

485转Lora、 Lora转4G DTU设备(透传机智云)

发表于:2021年11月03日 10:48更新于:2024年05月03日 19:13

本文实现了两个配套的DTU数传装置,一个是485转Lora DTU,一个是Lora转4G DTU。

 

在一些物联场景中我们会遇到下面这样的问题:

♦ 有多个设备需要上云,是不是每个设备都需要装4G DTU?

♦ 像电缆沟道、下水管道、矿道、这种没有运营商基站信号的地方该如何上云?

 

为了解决上面的问题,我们可以引入Lora通信,因为Lora无线通信具有距离远,抗干扰强,功耗低的特点。下面的框架图先用<485转Lora> DTU作为Lora从节点将传统485接口先转成Lora通信,这样就解决了一些不在运营商基站信号范围内的485设备,然后再用<Lora转4G>DTU作为中心节点将这些Lora从节点的数据上传至机智云。

 

 

硬件端接线图

 

♦ 485转Lora从节点端接线图:

♦ Lora转4G中心节点端接线图:

 

 

实物连接图

 

♦ 485转Lora实物连接图:

♦ Lora5转4G实物连接图:

 

材料清单

 

名称 推荐购买源 资料下载
通用版机智云 App 免费 https://download.gizwits.com/zh-cn/p/98/99
ShineBlink 万能物联网开发板 淘宝搜索“机智云”或“ShineBlink”店铺有售 http://shineblink.com
带机智云GAgent固件的ML302 4G模块 淘宝搜索“机智云”店铺有售 http://gizwits.com
ATK-Lora-01 淘宝搜索”ShineBlink“店铺有售 http://shineblink.com
TD321D485模块 淘宝有售  
黑色底板 该底板只是为了省掉接杜邦线,让外观好看一些,不是必需品,开发者如果没有可以用杜邦线来替代。如果仍想获取该底板,可通过右边提供的PCB工程资料自己打样PCB制作即可。

https://fe9a58.link.yunpan.360.cn

/lk/surl_y6mpLtWWB9W#/-0

 

 

硬件端完整源代码

 

♦ 485 转Lora DTU完整代码(从节点)

 

--使能485模块发送

function M485SendEn()
LIB_GpioWrite("D7",0)
end
--使能485模块接收
function M485RecvEn()
LIB_GpioWrite("D7",1)
end
--使能USB print打印功能
LIB_UsbConfig("CDC")--非必需代码,仅仅调试用
--配置D9端口为普通输出(开发板上的LED2灯和D9端口是固定连接的)
LIB_GpioOutputConfig("D9","STANDARD")--非必需代码,仅仅调试用,用来指示485接收状态
LIB_GpioWrite("D9", 1)
--485模块接收发送控制
LIB_GpioOutputConfig("D7","STANDARD")
--配置Uart1串口波特率为9600
LIB_Uart1Config("BAUDRATE_9600")
M485RecvEn()--485模块平时都保持接收状态
--Lora本机地址(范围:0-65535),其他Lora节点如果需要发送消息给本机必须知道该地址
addr = 101
--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"
--设置Lora模块占用TX0、RX0、Aux接D5引脚,Md0接D6引脚
--Lora通信参数:地址=100,通信信道=433M,无线速率=9.6kbps,发射功率=20dBm
LIB_LoraConfig("UART0","D5","D6",addr,channel,baudrate,tx_pwr)
--开启看门狗增加系统健壮性
--时间可以设置成"0.1S","1S","10S","30S","120S"
LIB_WatchDogConfig("1S")
--包计数器,用来保证需要发送给云的数据的第一个字节和上一个包的第一个字节不同
pkg_cnt = 0
--开始大循环
while(GC(1) == true)
do
--喂狗
LIB_WatchDogFeed()
--查询是否从本机Lora收到数据(来自4G-Lora中心节点),个数不会超过64个
--如果收到就将数据通过485模块发出去
recv_flag,recv_addr,recv_data = LIB_LoraRecv()
if recv_flag == 1 then
M485SendEn()
LIB_GpioToggle("D9")--非必需代码
LIB_Uart1BlockSend(recv_data)
M485RecvEn()
end
--查询是否从485模块接收到数据
--如果收到就通过本机Lora转发给4G-Lora中心节点
flag,m485data = LIB_Uart1Recv()
if flag == 1 then
LIB_GpioToggle("D9")--非必需代码
pkg_cnt = pkg_cnt + 1
if #m485data <= 63 then
--通过本机Lora发送给4G-Lora中心节点的每包数据即使内容相同,第一个字节也不要相同
table.insert(m485data, 1, pkg_cnt&0x000000ff)--在数据包头部插入一个元素
LIB_LoraSend(100, m485data) --100是4G-Lora中心节点的Lora地址
else
print("Data package over size")
end
end
end

 

♦ Lora转4G DTU完整代码(中心节点)

 

--配置D9端口为普通输出(开发板上的LED2灯和D9端口是固定连接的)

LIB_GpioOutputConfig("D9","STANDARD")--非必需代码,仅仅调试用,用来指示4G收发状态
LIB_GpioWrite("D9", 1)
--机智云平台为每个产品类别分配的唯一PK和PS,一定要改成您自己的PK和PS
PK = "6ff8b78de15443a5b08d7cc4baa0d9c0"
PS = "a90595052d1346a385ea359c7afd994c"
--初始化4G模块
LIB_Giz4GConfig(PK,PS,100,120,"UART0","D5","HIGH","D6","HIGH")
--Lora本机中心节点地址(范围:0-65535),其他Lora节点如果需要发送消息给本机必须知道该地址
addr = 100
--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"
--设置Lora模块占用TX0、RX0、Aux接D7引脚,Md0接D3引脚
--Lora通信参数:地址=100,通信信道=433M,无线速率=9.6kbps,发射功率=20dBm
LIB_LoraConfig("UART1","D7","D3",addr,channel,baudrate,tx_pwr)
--开启看门狗增加系统健壮性
--时间可以设置成"0.1S","1S","10S","30S","120S"
LIB_WatchDogConfig("1S")
--开始大循环
while(GC(1) == true)
do
--喂狗
LIB_WatchDogFeed()
--查询是否从机智云收到数据,个数不会超过64个
--如果收到就将数据通过本机中心节点Lora模块转发出去
flag,cloud_data = LIB_RecvFromGizCloud("RawData")
if flag == 1 then --此时获取到一个包含64字节元素的table(数组)
LIB_GpioToggle("D9")--非必需代码
--注意:这里按说不应该是101的,因为从机也有可能是多个,
--比如还有从机102、103等等,这个需要云端再下发的时候做考虑
--如果这样的话开发者需要从cloud_data中解析出从机地址,然后
--替换下面的101,下面用101只是本例中只考虑1个主机对1个从机的情况
LIB_LoraSend(101, cloud_data)--101是从机节点的地址
end
--查询是否从本机Lora模块接收到数据
--如果收到就通过透传通道"RawData"转发给机智云
recv_flag,recv_addr,recv_data = LIB_LoraRecv()
if recv_flag == 1 then
LIB_GpioToggle("D9")--非必需代码
--再在每包数据头部插入一个Lora从机地址,
--这样云端就可以知道是哪个从机发来的了
table.insert(recv_data, 1, recv_addr&0x000000ff)
LIB_SendToGizCloud("RawData",recv_data)
end
end

上面代码中出现的"LIB_"开头的库函数的详细介绍可以在shineblink.com网站上的API文档中查询。

 

 

机智云接入(选用机智云+通用版App)

 

通过《4G设备接入机智云教程》我们可以很快掌握机智云的接入流程,并使用现成的通用版机智云App即可很快的实现手机App远程访问我们的开发板。

本例中我们使用了"RawData"这个数据点作为和机智云进行数据收发透传的通道,记得在机智云平台修改相应的数据点的名称。

 

内容限制

 

♦ DTU向机智云发送的数据内容,每包不能超过60字节;

♦ 机智云向DTU发送的数据内容,每包不能超过60字节;

♦ 每包之间的发送间隔也不要太频繁,建议100ms以上。

 

 

热门DTU推荐

 

机智云自研多款高性能、低功耗工业DTU产品,即插即用实现设备数据采集和管理,兼容NB-IoT、Wi-Fi、2G 、4G、5G、Lora、有线接入等多种通信方式,可对接主流工业协议和业务系统,覆盖多个行业多种应用需求。

点击了解机智云DTU更多详情内容。