浅谈基于Apollo2 mcu的智慧农业系统
组网通信与云服务器
设备间组网与添加节点
针对于使用场景的不同,大范围农田可以选择使用SX1260/ SX1278 LORA进行组网。小范围类似大棚,可以选用ZigBee或者蓝牙mesh。ZigBee和蓝牙mesh都有自组网功能,数据交换和节点添加相对简单。
如果选用的LORA模块,笔者个人建议使用应答模式的星型网组网(图6)。每个节点的地址使用Apollo2 mcu 自带的chip ID作为参照。数据交替通过主节点对单个节点发出心跳指令,子节点唤醒后获取各类数据并上传,然后等待应答,如果应答超时,既丢包,重复发送如果仍无法收到,将会发给备用主节点报错。
同理,如果主节点发送心跳指令没有数据应答,会进行等待、重发,长时间无应答会将该地址节点踢出循环列表同时给服务器发出报错。
图6
LORA通信暂不支持自组网功能。该功能相对简单,主节点广播发出添加节点模式,子节点待命等待主节点单个检索地址。每个检索完毕的地址,都会退出添加节点模式。当主节点检索完所有已知节点后,会二次发出新节点广播。二次收到的新节点就主动循环给主节点发送自己的地址。直到主节点发送应答才结束。
设备与服务器通信
TCP(Transmission Control Protocol) 传输控制协议。TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握确认建立一个连接。TCP标志位有6种 标示:
SYN(synchronous建立连接)
ACK(acknowledgement 确认)
PSH(push传送)
FIN(finish结束)
RST(reset重置)
URG(urgent紧急)
Sequence number(顺序号码)
Acknowledge number(确认号码)。
流程如图7所示:
第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。握手完成后,两台主机开始传输数据了。
图7
主节点,通过转接口模块接入互联网,同时模块设置好TCP/IP 协议进行传输。对于服务端的TCP/IP 协议,笔者使用的是SocketAsyncEventArgs类进行编写。SocketAsyncEventArgs是.net提供的关于异步socket类。也就是高性能复用IO。对比与传统socket,使用该类编写的Server性能和吞吐量都有很大的提升。初始化代码如下:
启动,socket监听代码:
图9
在使用socket通信时,如果长时间没有数据交互。服务器是会直接断连。笔者这里使用双应答模式。服务器向智能硬件发送心跳包,智能硬件应答并上传数据。如果中间因为网络或者各方面原因失去连接。智能硬件会根据定时器设置主动向服务器发送确认连接信号,如果无应答,既断连。智能硬件将会重新启动TCP协议。多次连接失败将会发出链接异常警报,提醒人工进行排查。
文章来源:润欣科技Fortune公众号
图片新闻
最新活动更多
-
11月28日立即报名>>> 2024工程师系列—工业电子技术在线会议
-
11月29日立即预约>> 【上海线下】设计,易如反掌—Creo 11发布巡展
-
11月30日立即试用>> 【有奖试用】爱德克IDEC-九大王牌安全产品
-
即日-12.5立即观看>> 松下新能源中国布局:锂一次电池新品介绍
-
12月19日立即报名>> 【线下会议】OFweek 2024(第九届)物联网产业大会
-
即日-12.26火热报名中>> OFweek2024中国智造CIO在线峰会
发表评论
请输入评论内容...
请输入评论/评论长度6~500个字
暂无评论
暂无评论