锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

Lora光照传感器节点数据采集

时间:2022-10-31 09:30:01 光感传感器zp一12g12v光敏传感器

一、任务要求

开发温湿度传感节点代码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

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章