一个接RS485模块的Ubeeto物联网开发板作为主机和多个接RS485模块的Ubeeto开发板从机进行通信,形成一对多的星型网络,整个网络的通信为主机发起从机响应的机制。
主机和某个从机的具体通信流程如下:
主机发送5个字节数据(1,2,3,4,5)给某个从机,然后从机收到(1,2,3,4,5)后向主机返回(6,7,8,9,10) 5个字节的数据。
上面的过程中,主机收到(6,7,8,9,10) 后LED1灯会闪烁一次,从主机收到(1,2,3,4,5) 也后LED1灯会闪烁一次。
名称 | 推荐购买链接(或者您可以自己制作) | 模块/芯片硬件资料下载 |
---|---|---|
RS485模块 | 购买链接 | 下载地址(提取码:jdk5) |
声明:这里推荐的购买链接仅供参考,您完全可以去其他商家或渠道购买,只要功能相似即可,如果需要更低的成本建议自己开发硬件模块或定制。
该模块为最基本的485电路,在工业环境中您可能还需要考虑为485电路增加光电隔离电路、过压保护电路等,下图为模块的原理图:
本例程只演示一个主机对一个从机的通信,实际应用中如果需要接多个从机,主机可以通过轮询各个从机的方式来控制整个星型网络的通信。
--[[ RS485主机程序 ]]-- LIB_GpioOutputConfig("D4","OPENDRAIN") --Max485 RE DE 控制 LIB_GpioOutputConfig("D8","OPENDRAIN") --LED1 --使能MAX485发送 function SendEn() LIB_GpioWrite("D4",1) end --使能MAX485接收 function RecvEn() LIB_GpioWrite("D4",0) end --配置Uart0串口波特率为19200 LIB_Uart0Config("BAUDRATE_19200") --使能10毫秒定时器开始工作 LIB_10msTimerConfig("ENABLE") cnt_10ms = 0 --定义10毫秒定时器的中断函数 function LIB_10msTimerCallback() cnt_10ms = cnt_10ms + 1 end --开始大循环 while(GC(1) == true) do --每1秒发送5字节数据给从机 if cnt_10ms >= 100 then --1000ms cnt_10ms = 0 send_data = {1,2,3,4,5} SendEn() LIB_Uart0BlockSend(send_data) RecvEn() end --查询是否收到从机发来的5字节数据,并验证 recv_flag,recv_data = LIB_Uart0Recv() if recv_flag == 1 and #recv_data == 5 then if recv_data[1] == 6 and recv_data[2] == 7 and recv_data[3] == 8 and recv_data[4] == 9 and recv_data[5] == 10 then LIB_GpioToggle("D8") --切换LED状态 end end end
--[[ RS485从机程序 ]]-- LIB_GpioOutputConfig("D4","OPENDRAIN") --Max485 RE DE 控制 LIB_GpioOutputConfig("D8","OPENDRAIN") --LED1 --使能MAX485发送 function SendEn() LIB_GpioWrite("D4",1) end --使能MAX485接收 function RecvEn() LIB_GpioWrite("D4",0) end --配置Uart0串口波特率为19200 LIB_Uart0Config("BAUDRATE_19200") --开始大循环 while(GC(1) == true) do --查询是否收来自主机发来的5字节数据,并验证 recv_flag,recv_data = LIB_Uart0Recv() if recv_flag == 1 and #recv_data == 5 then if recv_data[1] == 1 and recv_data[2] == 2 and recv_data[3] == 3 and recv_data[4] == 4 and recv_data[5] == 5 then LIB_GpioToggle("D8") --切换LED状态 --响应主机 send_data = {6,7,8,9,10} SendEn() LIB_Uart0BlockSend(send_data) RecvEn() end end end
如果感兴趣,上面代码中出现的LIB开头的库函数可以在API文档中通过Ctrl+F查询。
可以看到当主机和从机通过485总线连接后,主机和从机上的LED1灯同时开始闪烁,每闪烁一次就表示主机和从机完成了一次数据交互。
简单、快捷、高效、强大的物联网开发板
© 2022. All Rights Reserved. 粤ICP备2021058065号