【DFRobot FireBeetle ESP32试用体验】之四:读取PM传感器数据

  • wo4fisher
  • LV5工程师
  • |      2017-08-03 23:30:04
  • 浏览量 736
  • 回复:0
本帖最后由 wo4fisher 于 2017-8-4 07:41 编辑 继上一篇帖子 【DFRobot FireBeetle ESP32微控制器试用体验】之三:uart驱动,之后,本篇介绍使用ESP32读取激光pm2.5/pm10传感器模块数据,并做数据转换。 ps:可怜的小三,被小编XX了。, 之前淘了一个激光pm2.5/pm10传感器模块,数据输出有uart模式和pwm波模式,两种模式同时输出。uart模式输出数据格式如下:串口通讯协议:96008N1;通讯周期:1+0.5 秒;报文格式:0 报文头 AA ,1 指令号 C0,2 数据 1 PM2.5低字节 ,3 数据 2 PM2.5高字节 ,4 数据 3 PM10低字节 ,5 数据 4 PM10高字节 ,6 数据 5 0(保留) ,7 数据 6 0(保留) ,8 校验和 校验和 ,9 报文尾 AB ,校验和:数据1到数据 6的字节加和。 pm2.5和pm10数据计算如下(输出数据为16进制,在进行下边的转换之前先单字节16进制转换为10进制): 主要代码如下:
  

  uint8_t* data = (uint8_t*) malloc(BUF_SIZE);

    uint16_t  pm25_i=0,pm10_i=0;

    char  pm_str;

    float pm25_f=0.0,pm10_f=0.0;



    while(1) {

        //Read data from UART

        int len = uart_read_bytes(uart_num, data, BUF_SIZE, 20 / portTICK_RATE_MS);

       if(len>=10)

           {

                 if (data == 0xAA && data== 0xAB)

                     pm25_i= (uint16_t)(((data>>4)*16)+data%16)+(uint16_t)((((data>>4)*16)+data%16)*256);

                     pm10_i=(uint16_t)(((data>>4)*16)+data%16)+(uint16_t)((((data>>4)*16)+data%16)*256);

                     pm25_f=pm25_i/10.0;

                     pm10_f=pm10_i/10.0;

                 sprintf(pm_str,"pm2.5 is %.1f ug/m3,pm10 is %.1f ug/m3.\n",pm25_f,pm10_f);

                 uart_write_bytes(uart_num, pm_str, strlen(pm_str));

          }

        //Write data back to UART

      //  uart_write_bytes(uart_num, (const char*) data, len);



        vTaskDelay(500 / portTICK_PERIOD_MS);

    }
编译,下载,程序输出如下: 官方测试软件输出曲线:
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:0
x
收藏成功!点击 我的收藏 查看收藏的全部帖子