作为环境数据监测站首先要获取大气中可吸入颗粒物的数据。为了检测PM25数据,我们采用北京海联信为的HLPM025K3型号传感器,该传感器使用激光法测量PM25和PM10的数据。

  该型传感器的检测对象如下:

  M2.5:测量空气中0.3-2.5微米颗粒物;

  PM10:测量空气中 0.3-10微米颗粒物。

  该传感器采用的通讯协议如下:

  (1)波特率: 9600bit/S;数据位:8位;停止位:1位;校验位:无;

  (2)数据发送间隔时间为0.8~1.2S(秒) ,

  (3)数据格式:7个字节,其中校验位=PM2.5(H)+PM2.5(L)+PM10(H)+PM10(L)。如图:

  (4)数据处理:

  接收到的数据按公式计算后得到PM2.5和PM10的值,例如:

  PM2.5= ( PM2.5(H)×256+PM2.5(L)) ×0.1;

  PM10= ( PM2.5(H)×256+PM2.5(L)) ×0.1

  传感器要与OneNet麒麟座相连,我们必须看看其接口需求:

  如上图所示其需要5V电源和一个串口以及一个GPIO口,我们在麒麟座上发现USART1(PA9:USART1_TX,PA10:USART1_RX)端口已经引到了J5端子排的J5_6和J5_5。同时需要的一个GPIO口我们选用PA8,因为也被引到了J5端子排的J5_7。只有5V电源我们没有发现引出来,但这没有问题,所有的5V电源均引自电源开关SW1的第6脚,我们焊接一根导线来解决这个问题。至于接地(GND)已经引到了端子排J5_9和J6_2,直接使用就可以了。

  接好线后我们使用STM32CubeMX配置好硬件接口,串口的通讯参数,中断,时钟等,并生成基本的配置代码,如下图所示:

  配置代码如下:

static void MX_USART1_UART_Init(void)

{

huart1.Instance = USART1;

huart1.Init.BaudRate = 9600;

huart1.Init.WordLength = UART_WORDLENGTH_8B;

huart1.Init.StopBits = UART_STOPBITS_1;

huart1.Init.Parity = UART_PARITY_NONE;

huart1.Init.Mode = UART_MODE_TX_RX;

huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;

huart1.Init.OverSampling = UART_OVERSAMPLING_16;

if (HAL_UART_Init(&huart1) != HAL_OK)

{

Error_Handler();

}

HAL_UART_Receive_IT(&huart1, (uint8_t *)rxBuffer, 7);

}

  以上最后一行用于开启接收中断并且设置接收缓冲以及接收缓冲接收最大数据量,因为传感器的返回字节为固定的7个字节所以我们就直接设定好了。当然中断产生后,中断服务程序会关掉中断,所以我们在回调函数中要将其重开才能进行下一次接收。

static void MX_GPIO_Init(void)

{

GPIO_InitTypeDef GPIO_InitStruct;

__HAL_RCC_GPIOD_CLK_ENABLE();

__HAL_RCC_GPIOA_CLK_ENABLE();

HAL_GPIO_WritePin(Senser_Set_GPIO_Port, Senser_Set_Pin, GPIO_PIN_SET);

GPIO_InitStruct.Pin = Senser_Set_Pin;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

HAL_GPIO_Init(Senser_Set_GPIO_Port, &GPIO_InitStruct);

}

void HAL_UART_MspInit(UART_HandleTypeDef* huart)

{

GPIO_InitTypeDef GPIO_InitStruct;

if(huart->Instance==USART1)

{

__HAL_RCC_USART1_CLK_ENABLE();

GPIO_InitStruct.Pin = GPIO_PIN_9;

GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

GPIO_InitStruct.Pin = GPIO_PIN_10;

GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

GPIO_InitStruct.Pull = GPIO_NOPULL;

HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);

HAL_NVIC_EnableIRQ(USART1_IRQn);

}

}

  配置完成后我们还需要按照协议对数据进行解析,解析完全就是将协议翻译成编程语言,非常简单,在此就不说了。最后再来一张结果显示:

 欢迎关注:

转载于:https://www.cnblogs.com/foxclever/p/6808417.html

OneNET麒麟座应用开发之二:串口读取PM25传感器数据相关推荐

  1. OneNET麒麟座应用开发之十:空气质量数据监测站项目总结

    大气质量数据监测站用于测试空气质量监测及数据采集,实现野外或者室内空气质量的检测. 1.项目概述 本项目是一个定制项目,要求采集大气的压力.温度.湿度.PM25.位置等数据并上传到指定的后台服务器.但 ...

  2. OneNET麒麟座应用开发之九:与SD卡通讯并保存数据

    由于需要记录的数据量比较大,而且有些时候,有的用户不方便实时上传数据,所以要求使用SD卡存储数据然后人工收取上传.为此我们选择了一种通用的SD卡读写器. 1.读卡器简介 该读卡器整合 SD 卡规范和 ...

  3. 微信小程序开发之scroll-view上拉加载数据实现

    微信小程序开发之scroll-view上拉加载数据实现 一.开发思路 1.使用小程序的scroll-view组件中提供了一个bindscrolltolower属性监听组件的滑动到了底部 https:/ ...

  4. STM32串口读取一帧数据USART_IT_IDLE

    stm32 串口读取数据中断 USART_IT_RXNE:读取到一个数据产生中断 USART_IT_IDLE:读取到一帧数据产生中断 以前串口读取一帧数据的方法:收到数据后重置定时器的值,等到定时器超 ...

  5. vb6编写dll读取dat文件_【STM32Cube_15】使用硬件I2C读取温湿度传感器数据(SHT30)...

    寻求更好的阅读体验,请移步Mculover666的个人博客: [STM32Cube_15]使用硬件I2C读取温湿度传感器数据(SHT30)​www.mculover666.cn 本篇详细的记录了如何使 ...

  6. ROS下Python读取ft_300传感器数据

    ROS下Python读取ft_300传感器数据 硬件条件: ur3 ft_300 ros:melodic #!/usr/bin/env python2 import rospy from geomet ...

  7. ESP32读取甲醛传感器数据

    ESP32读取甲醛传感器数据 本文提供了基于ESP32开发板快速完成甲醛传感器数据读取的方式,可以用于开发甲醛检测仪. 准备 传感器:达特WZ-S甲醛传感器 开发板:安信可ESP32 NodeMCU- ...

  8. vb6 串口同时读取写入数据怎么避免冲突_实例:S7-200 SMART通过Modbus-RTU读取温湿度传感器数据...

    本实例我们介绍下西门子S7-200 SMART PLC如何通过Modbus-RTU协议读取温湿度传感器的数值.实例使用的硬件如下: S7-200 SMART CPU ST20: 温湿度传感器(支持Mo ...

  9. c#代码串口服务器的无线连接,C# 通过串口读取和发送数据

    [实例简介] 串口读取发送数据 [实例截图] [核心代码] using System; using System.Collections.Generic; using System.Component ...

最新文章

  1. Ansible YML语法
  2. HaoZip(好压) 去广告纯净版 4.4
  3. 微软自家的.Net下的JavaScript引擎——ClearScript
  4. WPF 实现ScrollViewer的垂直偏移滚动跳转
  5. HTMLTestRunner 汉化版---来源一个大神的源码(加了失败截图,用例失败重新执行 功能)...
  6. 持续定义Saas模式云数据仓库+实时分析
  7. php scsi平台,三大SCSI Target平台PK:让服务器化身SAN
  8. AxureRP9不同Page使用同一个Master,触发不同事件。
  9. [原]正则表达式模式匹配入门
  10. 《Unity 4 3D开发实战详解》一6.3 粒子系统
  11. php中怎么创建对象,php创建对象有哪几种方法
  12. 2021大学生创业计划书范例
  13. android 签到自定义,Android日历签到,超级简单的实现方式
  14. 交换机 tagged 与 untagged 的关系
  15. 即构推出视频见证系统方案,全面支持泛金融实时双录
  16. iPhone14、iPhone14 Max和iPhone14 Pro的区别
  17. 想要搭建个人博客?我调研了 100 来个 Java 开源博客系统,发现这 5 个最好用!...
  18. 阿里巴巴收购 Yahoo! 中国之后的风险
  19. 仿真时间`timescale 1ns/1ps 的定义 延迟赋值与阻塞赋值非阻塞赋值的一个小问题
  20. 利用HTML5的canvas进行鼠标写字

热门文章

  1. QQ群、讨论组上传文件,由于网络原因上传失败?
  2. Leetcode 1770. Maximum Score from Performing Multiplication Operations [Python]
  3. 网络显示连接正常,就是网页打不开(也适用于ie可以打开,google打不开情况)
  4. selenium自动化测试环境搭建及启动safair浏览器(Mac)
  5. 婴幼儿体重在线计算机,【婴儿体重计算器标准_婴儿体重计算器标准专题】- 天鹅到家...
  6. 汇智动力学员最新就业喜报,最高薪资16K!
  7. PCB制造常用的13种测试方法,你了解几种?
  8. 【机器学习】泛化误差上界
  9. 三色球问题python_Python:验证密码程序与水仙花数、三色球问题
  10. VPP协议栈学习一:snd_wnd