OneNET麒麟座应用开发之二:串口读取PM25传感器数据
作为环境数据监测站首先要获取大气中可吸入颗粒物的数据。为了检测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);
}
}
配置完成后我们还需要按照协议对数据进行解析,解析完全就是将协议翻译成编程语言,非常简单,在此就不说了。最后再来一张结果显示:

欢迎关注:

OneNET麒麟座应用开发之二:串口读取PM25传感器数据的更多相关文章
- OneNET麒麟座应用开发之十:空气质量数据监测站项目总结
大气质量数据监测站用于测试空气质量监测及数据采集,实现野外或者室内空气质量的检测. 1.项目概述 本项目是一个定制项目,要求采集大气的压力.温度.湿度.PM25.位置等数据并上传到指定的后台服务器.但 ...
- OneNET麒麟座应用开发之九:与SD卡通讯并保存数据
由于需要记录的数据量比较大,而且有些时候,有的用户不方便实时上传数据,所以要求使用SD卡存储数据然后人工收取上传.为此我们选择了一种通用的SD卡读写器. 1.读卡器简介 该读卡器整合 SD 卡规范和 ...
- iOS开发之Socket通信实战--Request请求数据包编码模块
实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...
- (56)Linux驱动开发之二
内核基础 1.li ...
- Java开发之I/O读取文件实例详解
在java开发或者android开发中,读取文件是不可避免的,以下对java开发中读取文件做了归纳和详解: 1.按字节读取文件内容2.按字符读取文件内容3.按行读取文件内容 4.随机读取文件内容 pa ...
- STM32L476应用开发之二:模拟量数据采集
采集模拟量数据在一台一起中是必不可少的功能.在本次实验中我们要采集的模拟量值主要包括氧气传感器的输出以及压力变送器的输出. 1硬件设计 我们需要采集数据对精度有一定的要求,而STM32L476自带AD ...
- 嵌入式驱动开发之spi---spi串口通信调试
一. 概念 SPI是 Serial Peripheral Interface(串型外部接口)的缩写.SPI接口有4根PIN脚,分别是: * SPICLK : 用于传输数据的同 ...
- yii2-basic后台管理功能开发之二:创建CRUD增删改查
昨天实现了后台模板的嵌套,今天我们可以试着创建CRUD模型啦 刚开始的应该都是“套用”,不再打算细说,只把关键的地方指出来. CRUD即数据库增删改查操作.可以理解为yii2为我们做了一个组件,来实现 ...
- iOS开发之二:UIWindow与UIView
1.UIWindow UIWindow 继承自UIView,它是整个应用的容器,一般来说一个应用就只有一个UIWindow. 如果不使用storyboard 时,需要我们自己创建UIWindow.实例 ...
随机推荐
- apache 基本vhost配置 【目的及过程】
转: apache 基本vhost配置 2012年04月18日 09:39:28 chamtianjiao 阅读数:74075 经常使用Apache虚拟主机进行开发和测试,但每次需要配置虚拟主 ...
- Windows 系统安装多个版本JDK, 修改环境变量不生效
1. 前提: 1) 配置环境变量: JAVA_HOME 2) 配置PATH: 添加%JAVA_HOME%\bin 2. 解决: 1) 确保最新的, 你希望使用的JDK, 配置在PATH的字符串的前面, ...
- Hive记录-配置支持事务管理hive-site.xml
<property> <name>hive.support.concurrency</name> <value>true</value> & ...
- 获取本机IP地址的小脚本
获取本机私网地址(1个) #!/bin/bash # Author : standby # Date : -- # Description : Get private ip address of lo ...
- 汉化DotNetBar中控件的系统文本
作者:ComponentCN 出处:www.componentcn.com 2011年11月02日 阅读: DotNetBar很多子控件的系统文本.提示信息等都是可以本地化的,可以转化为多种语言,控件 ...
- 【BZOJ4827】【HNOI2017】礼物
强省HN弱省HA……(读作强省湖南弱省蛤 原题: 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一 个送给她.每个手环上各有 n 个装饰物,并且每个 ...
- 20155333 2016-2017-2 《Java程序设计》第六周学习总结
20155333 2016-2017-2 <Java程序设计>第六周学习总结 教材学习内容总结 流(Stream)是对「输入输出」的抽象,注意「输入输出」是相对程序而言的 InputStr ...
- js 布局转换问题
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Python字符串解析方法汇总
Python字符串方法解析 1.capitalize 将首字母大写,其余的变成小写 print('text'.capitalize()) print('tExt'.capitalize()) 结果: ...
- 阿里云服务器 ECS Linux 禁止IP 通过 SSH 登录
这几天买的服务器老是受到黑客攻击被破解登录密码,今天修改了登录规则发现只有固定ip可以访问,其他ip即使有密码也无法登录我的服务器,但是能通过ip访问我的网站,哈哈. 限制 IP SSH 登录解决步骤 ...