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

一、任务要求

        基于温湿度传感节点代码,开发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);//串口1初始化
    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

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李今天摸鱼了嘛?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值