Lora光照传感器节点数据采集
时间:2022-10-31 09:30:01
一、任务要求
开发温湿度传感节点代码Lora光敏节点应用程序需要收集数据,并在收到网关读取传感器指令后响应网关。
(1)修改设备地址,定义传感变量。
///定义网络编号和设备地址 #define MY_NET_ID 0xD0C2 //网络ID #define MY_ADDR 0x02 //设备地址 /*全局变量*/ uint16_t LightLux = 200; //光照传感器采集的光照,单位:lux
(2)在字符串格式化输出时响应发送代码LightLux加入传感器标识名。
uint8_t RspBuf[BUFFER_SIZE]= {0}; memset(RspBuf, '\0', BUFFER_SIZE); RspBuf[0]=START_HEAD; RspBuf[1]=CMD_READ; RspBuf[2]=(uint8_t)(MY_NET_ID>>8); RspBuf[3]=(uint8_t)MY_NET_ID; RspBuf[4]=MY_ADDR; RspBuf[5]=ACK_OK; sprintf((char *)(RspBuf 7),"LightLux(lux):%d", LightLux);//数据域,sprintf两个%表示输出%。ADC收集后将值传递LightLux发送。 RspBuf[6]=strlen((const char *)(RspBuf 7)) 1;//数据域长度 RspBuf[6 RspBuf[6]]=CheckSum((uint8_t *)RspBuf, 6 RspBuf[6]); Radio.Send( RspBuf, 7 RspBuf[6] GpioToggle( &Led1 );//发送数据切换亮灯指示
(3) 初始化ADC:void AdcInit( Adc_t *obj, PinNames adcInput )定义在adc.c用户可直接调用,board.c中定义了Adc_t Adc; board.h定义了#define ADC_0 PA_0。
void PlatformInit(void) { // 开发板平台初始化 BoardInitMcu(); BoardInitPeriph(); // 开发板设备初始化 OLED_Init()//液晶初始化 USART1_Init(115200) OLED_Clear(); OLED_InitView();//OLED初始信息显示在屏幕上 printf("新大陆教育 LoRa \r\n"); //Lora模块初始化 NS_RadioInit( (uint32_t) RF_PING_PONG_FREQUENCY, (int8_t) TX_OUTPUT_POWER, (uint32_t) TX_TIMEOUT_VALUE, (uint32_t) RX_TIMEOUT_VALUE ); //请在下面添加用户初始化代码 printf("LoRa Light\r\n"); AdcInit( &Adc, ADC_0);//ADC初始化通道0 Tim3McuInit(1)//定时器初始化,设置定时中断1ms中断一次 //IWDG_PrmInit(2048);//独立看门狗初始化,加班设置为2048ms }
(4)ADC数据采集转换报告
void LoRa_GetSensorDataProcess(void) { const uint16_t time = 1000; if(User0Timer_MS > time) { User0Timer_MS = 0; uint16_t AdcNum,voltage; AdcNum = AdcReadChannel( &Adc, ADC_CHANNEL_0 );//ADC精度12位,参考电压3.3V //在adc.c中定义读取ADC0通道值 voltage = AdcNum*3300/(4096-1.0);//传感器电压值,单位:mV LightLux = (5/2.0)*(voltage/10.0); char StrBuf[64]={0}; memset(StrBuf, '\0', 64); sprintf(StrBuf, " %d lux",LightLux); OLED_ShowString(0,4,(uint8_t *)StrBuf); } }
(5)本实验在温湿度传感节点实验中得到改进,详情请参考以下连接!https://blog.csdn.net/qq_41742056/article/details/125515371?spm=1001.2014.3001.5501