2024-9-30 12:05
299 次阅读|
0 个评论
01 概述 LoRa技术具有远距离、低功耗、多节点、低成本和抗干扰的特点。 另一方面,LoRa低速率支持较小的数据传输。 服务器、终端(内置LoRa模块)、网关(或基站)、云四部分组成了LoRa网络。如图 Lora技术可用于很多场合,例如隧道通信、电网监视、电表、水表、智能农业、智能水利、智能交通、智能社区、环境监视、工业自动化测试、水产养殖等电表的数据收集等。 02 轮询模式 轮询的优点在于其简单性和能够同时检查多个设备的能力。 它不需要复杂的中断设置和管理,因此更容易实现和维护。轮询的主要缺点是它可能无法及时处理快速变化的事件或数据,因为它只在轮询周期到达时才检查设备状态。 因此,必须注意,如果数据与信号有相关的截止时间(deadlines),那么轮询时间加上响应时间必须始终小于这些截止时间。如果数据到达的速度快于轮询时间,那么数据将会丢失。这在许多应用中可能不是问题,但在某些情况下可能是致命的。 相比之下,中断处理可以立即响应设备状态的变化,因为它是由设备本身触发的。但是,中断处理需要更复杂的设置和管理,包括中断向量的配置、中断服务例程的编写和中断优先级的设置等。此外,如果多个设备同时触发中断,还需要处理中断嵌套和优先级的问题。 因此,在选择使用轮询还是中断处理时,需要根据具体的应用场景和需求进行权衡。 轮询模式:将网关设置为该模式后,连接到网络的节点模块将处于被动状态。此时,网关将根据Web设置发出前导(前导期间与唤醒期间相同),唤醒网络上的所有节点。将数据传输到节点发送数据后,当网关收到来自模块的数据响应时,会立即发送下一个数据。否则,在接收时间到期之前不发送下一个数据。 功能说明: 1.在使用此模式之前,客户必须设置与插座相关的参数。配置完成后,网关进入监视状态,节点连接到网络。网关响应网络信息,保存节点信息。如果网络节点的数目超过0或者数据库能够访问该网络,则该网关将基于设置的唤醒时间、轮询时间和周期来轮询唤醒数据并由用户设置。 2.当节点接收到数据时,节点采取适当的操作并响应相关数据来完成数据交换,然后节点进入睡眠状态,并且网关等待下一个周期中出现第二个唤醒数据。此模式最多可设置16个唤醒数据。一旦完成了对所有节点(存储在数据库中的网络节点)的唤醒数据的轮询,第二个轮询数据将被替换,并重复上述步骤直到下一个轮询周期。完成后,在轮询周期结束之前,将重新开始轮询,从数据库中保存的第一个数据开始启动。 轮询数据设置:由已发布的条目数和轮询数据组成,在被动唤醒模式下启用。 发布的条目数:确定下一轮询数据的数量。例如,如果发布的条目数为4,则仅轮询数据1~4的数据,最多对应16个命令数据,数据格式为“十六进制”,因此请严格以数据格式填写。 轮询数据:用户必须轮询发出的数据或命令。“十六进制”输入,最多64字节。请务必以十六进制格式输入。 03 使用场景 轮询模式适合设备一直在线的情况下,就像是教室里老师挨个点名,学生挨个回答一样,这样子每个人都会在点名的时候进行回答,不会冲突。 04 轮询组件的使用 1 Gitee链接地址 Demo位于amaziot_bloom_os_sdk\products\am-lora-gateway\lora_gateway Gitee源码地址:https://gitee.com/ning./hongdou Github源码地址:https://github.com/ayumid/hongdou 编译指令:.\build.bat -l .\amaziot_bloom_os_sdk\products\am-lora-gateway\lora_gateway 2 组件功能介绍 主机按照设置的间隔轮询从机,从机收到主机轮询消息后再上报。 3 代码讲解 1 dtu_lora_call_task_init 功能:该函数用于,初始化轮询任务。 参数:无 返回值:无 示例: C dtu_lora_call_task_init(); 2 dtu_lora_call_task 功能:该函数用于,轮询主任务。 参数:无 返回值:无 示例: C status = OSATaskCreate(&dtu_lora_call_msgq_task_ref, dtu_lora_call_task_stack, DTU_LORA_CALL_TASK_STACK_SIZE, 151, "dtu_lora_call_task", dtu_lora_call_task, NULL); 3 dtu_lora_call_interval_timer_stop 功能:该函数用于,定时器停止。 参数:无 返回值:无 示例: C dtu_lora_call_task_init(); 4 dtu_lora_call_interval_timer_start 功能:该函数用于,开始轮询定时器。 参数:无 返回值:无 示例: C dtu_lora_call_interval_timer_start(); 5 dtu_lora_call_interval_timer_init 功能:该函数用于,轮询定时器初始化。 参数:无 返回值:无 示例: C dtu_lora_call_task_init(); 6 dtu_lora_call_interval_timer_callback 功能:该函数用于,轮询定时器回调函数。 参数:无 返回值:无 示例: C lora.interval * 200 , dtu_lora_call_interval_timer_callback, 0); 7 dtu_lora_call_task_send_msgq 功能:该函数用于,定时器超时给主任务发送消息,驱动主任务通过lora模块发送消息。 参数:无 返回值:无 示例: C dtu_lora_call_task_send_msgq(&uart_send); 4 Demo实战 参考开源项目Lora网关 注:本文部分内容来源于网络,如有侵权,请及时联系我们。 本文章源自奇迹物联开源的物联网应用知识库Cellular IoT Wiki,更多技术干货欢迎关注收藏Wiki: Cellular IoT Wiki 知识库(https://rckrv97mzx.feishu.cn/wiki/wikcnBvAC9WOkEYG5CLqGwm6PHf)