数据上传我这里使用了问询的方式,这样的好处一是可以用来统计节点的存活状态,二是可以避免冲突,主节点通过向从节点发送问询帧,从节点收到问询帧后开始向主节点发送数据,同时我们也可以加入不同的帧类型,比如控制帧、问询帧、心跳帧等等,拓展性会好很多。
大概的流程如下,如果收状态机触发,则清除状态机后开始判断帧内容,如果为问询帧则将数据发送,发送完后清空缓存为下一次做准备。
/*解析来自主节点的数据*//*2、解析数据,由主节点触发*/if (LORA_RX_FLAG == 0x01){/*清除状态机*/LORA_RX_FLAG = 0x00;/*判断收到的数据类型*//*1、问询帧*/if (usart2RxBuff[3] == 0x01){debug_print("收到主节点问询帧 ...\r\n");/*格式化原始数据*/send_length = create_frame(rawdata_buff, sizeof(rawdata_buff), send_buffer);/*数据发送*/loraSendData(send_buffer, send_length);debug_print("%s", send_buffer);debug_print("应答问询帧\r\n");/*清空缓存*/memset(send_buffer, 0, send_length);}}
这个这是一个简单的流程,我们使用PC端的串口调试助手通过USB转串口到一个lora模块,然后发送模拟问询帧,看是否能收到子节点发送的传感器数据,测试结果如下:
目前设计的很简单还是透传的过程,也不涉及对lora模块的具体配置