本帖最后由 yongruru 于 2018-8-21 13:35 编辑
根据网络容量大小本文提出两种网络方案。第一种针对小型网络10个节点以内,使用MESH网络,主机轮询从机通信。第二种针对10个节点以上网络,采用LoRaWAN网络。下面逐个对两种方案的结构拓扑、优点和限制、设计细节、功能演示等几个方面深入研究。
一、基于lora无线通信构建的MESH网络,实现局域物联网。
结构拓扑
设计概述 系统分为主机和从机,主机由主控、显示和lora通信模块组成,从机由主控、通信模块和多种传感器组成。工作流程为,从机采集传感器数据存储,主机轮训从机,当被询问到时,根据命令上传传感器数据或者控制IO口输出。主机收到从机数据后处理显示。
优点和限制 优点:1通信逻辑简单,使用现成模块更加简单。2成本低,sx1276相较网关价格有数量级差距。 限制:1网络容量低,随着网络容量增加,轮训的时间变长,实时性变差2增加新节点需要修改主机程序。
电路设计 MCU最小系统,我用的芯片是Microchip的ATSAMC21 电池充电电路,充电电压4.2v,给锂离子电池充电。芯片 EAT6003 电源管理,一个给MCU供电,另一个给传感器供电,由MCU控制是否供电,控制功耗。 传感器电路,两路I2C、两路UART、两路ADC。分别是空气质量CCS811、气压BMP180、GPS模块(备用,可应用于农场都能场景)、lora通信模块、TEMT光敏电阻、NTC热敏电阻。
硬件搭建 8.18补充 一个主机,依次询问两个从机,间隔为2s。 软件设计 8.18补充 主程序流程图,关键函数 /**
项目:21IC
角色:中心设备
功能:询问从机,控制IO
*/
#include <asf.h>
#include "my_driver/my_driver.h"
int main (void)
{
system_init(); //时钟
delay_init(); //延时
my_io_init(); //io初始化
sercom_lora_init(); //lora串口
sercom_test_init(); //测试串口
system_interrupt_enable_global(); //开中断
while(1)
{
ask_slave(); //询问从机2s中一次
}
}
void ask_slave(void)
{
//发送给终端03
static uint8_t i;
for (i=0;i<16;i++)
{
usart_write_wait(&usart_lora,test_cmd_ASK_03[i]);
}
write_2s=2000;
while(write_2s)
{
delay_ms(1);
write_2s--;
recieve_lora();
}
//需要添加从机再添加上述代码
//发送给终端05
for (i=0;i<16;i++)
{
usart_write_wait(&usart_lora,test_cmd_ASK_05[i]);
}
write_2s=2000;
while(write_2s)
{
delay_ms(1);
write_2s--;
recieve_lora();
}
}
static void recieve_lora(void)
{
if (cmd_flag)
{
cmd_flag=0;
static uint8_t i;
for (i=1;i<cmd_count-2;i++)
{
usart_write_wait(&usart_test,cmd_message[i]);
}
}
}
从程序流程图,关键函数 #include <asf.h>
#include "my_driver/my_driver.h"
int main (void)
{
system_init(); //时钟
delay_init(); //延时函数
my_io_init(); //LED
tc_100ms_init(); //100ms
sercom_test_init(); //调试串口
sercom_lora_init(); //lora通信的串口
sercom_i2c_init(); //I2C初始化
system_interrupt_enable_global(); //开中断
adc_ntc_init();
adc_light_init();
bmp180_init();
ccs811_init(); //空气质量传感器初始化
while(1)
{
task_senser(); //读各种传感器的值
answer_host(); //收到主机询问,回复传感器值
}
}
void task_senser(void)
{
if (task_count>10)
{
task_count=0;
read_ALG();
read_light();
read_ntc();
read_UT_UP();
port_pin_toggle_output_level(LED_1);
}
}
void answer_host(void)
{
//判断串口是否有数据
if (cmd_flag)
{
cmd_flag=0;
//解释命令
if(hand_center("#ASK[ DISCUZ_CODE_5 ]quot;))
{
pack_message(); //按模块格式封装数据
send_message(); //发送封装数据
port_pin_toggle_output_level(LED_3);
}
}
}
功能演示 8月18日补充
主机测试串口输出03和05两个设备上传的不同数据。
8月19日更新,为主机加入了屏幕显示,将串口打印的代码,改成在屏幕显示即可。
可以显示co2的值和累计曲线。
二、基于loraWAN无线网络,实现局域物联网
结构拓扑
设计概述 节点采集传感器信息,上报给网关。网关发送给应用服务器,应用服务器做出显示。本方案中,网关和应用服务器都部署在linux电脑上,实物上是一个,对外输出HDMI接口做显示。
优点和限制 优点:1网络容量大。2添加节点简单。3节点功耗更低 限制:1网关成本高。2LoraWAM网络复杂,需要多方面知识
传感器部分和方案一相同,只是在无线通信的时候换成带LoRaWAN的协议栈的模块。服务器通过网关收到节点数据后,再写个web程序展示出来。 具体设计见3楼。
说明:今天刚看见这个活动,还有一周的时间。所以不打算购买器件和制作电路板,有什么器件用什么,没有器件而不能实现的功能也不在纠结,争取能将两个方案制作出来,这才是最重要的。其中MCU采集传感器部分是相同的,通信部分和显示部分会有区别。两个方案的通信部分我计划做完。显示会做方案一的,方案二只在终端显示节点原始数据,不做进一步处理了。希望能够按计划完成^_^
说明2:两种方案使用的模块通信距离都可以达到1公里以上(直线距离)。可以说是远距离低功耗的无线通信方案,有一定的应用价值。
|