前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自制一个 LoRa PM2.5 监测器

自制一个 LoRa PM2.5 监测器

作者头像
twowinter
发布2020-04-17 12:08:09
8534
发布2020-04-17 12:08:09
举报
文章被收录于专栏:twowintertwowinter

文章目录

- [前言](https://cloud.tencent.com/developer/audit/support-plan/8886434#_2)
- [1 Demo 介绍](https://cloud.tencent.com/developer/audit/support-plan/8886434#1_Demo__14)
    - [总体方案](https://cloud.tencent.com/developer/audit/support-plan/8886434#_16)
    - [PM2.5 监测器](https://cloud.tencent.com/developer/audit/support-plan/8886434#PM25__22)
    - [家里阳台的空气质量](https://cloud.tencent.com/developer/audit/support-plan/8886434#_34)
- [2 硬件设计与实现](https://cloud.tencent.com/developer/audit/support-plan/8886434#2__51)
    - [主控](https://cloud.tencent.com/developer/audit/support-plan/8886434#_53)
    - [PM2.5 传感器](https://cloud.tencent.com/developer/audit/support-plan/8886434#PM25__57)
    - [传感器连接](https://cloud.tencent.com/developer/audit/support-plan/8886434#_63)
- [3 软件设计与实现](https://cloud.tencent.com/developer/audit/support-plan/8886434#3__81)
    - [传感器数据解析处理](https://cloud.tencent.com/developer/audit/support-plan/8886434#_88)
    - [LoRaWAN 参数配置](https://cloud.tencent.com/developer/audit/support-plan/8886434#LoRaWAN__118)
- [4 腾讯云物联网开发平台操作](https://cloud.tencent.com/developer/audit/support-plan/8886434#4__126)
    - [产品定义及设备创建](https://cloud.tencent.com/developer/audit/support-plan/8886434#_130)
    - [设备调试](https://cloud.tencent.com/developer/audit/support-plan/8886434#_167)
- [END](https://cloud.tencent.com/developer/audit/support-plan/8886434#END_175)

前言

年前整理医院发票,发现小孩一整年看病花了快3000块,幸好买的保险能报销大部分。病历基本都是支气管炎、上呼吸道感染、咽炎,还有一次发展成了肺炎去拍了胸片。小孩这拍胸片的频次都快赶上我小时候过节去拍照片的频次了。

之前我和老婆都觉得是正常换季着凉以及幼儿园交叉感染,可年前参加一次交流会认识到了深圳大气污染的问题,这才联想到来深圳后生病的概率比在厦门生活要大多了。于是动手做了一个 PM2.5 监测器,来了解身边空气质量。

这篇文章分享下小能手如何使用 P-NUCLEO-LRWAN3 LoRa 开发套件自制的 PM2.5 监测器。

有兴趣的朋友不妨也来DIY一个,特别是家里有小孩或者慢性呼吸疾病的家人,更应该关注空气质量。当了解到自己生活空间的空气质量后,我们就可以决策是否需要在家里安置空气净化器,甚至是否需要换房子,寒暑假是否要把孩子送回环境更好的老家农村等等。

腾讯云 IoT Explorer 是腾讯云主推的一站式物联网开发平台,IoT 小能手从设备侧开发、平台功能操作、应用侧开发三个部分来进行学习分享,另外还分享了一些动手实践作品及收录官方发布的产业合作案例,帮助读者更好地理解整个开发链路。详情可点此查看

1 Demo 介绍

总体方案

Nucleo LoRa Sensor 开发板通过串口外挂一个 PM2.5 传感器,通过 LoRaWAN 网关上报至腾讯云物联网开发平台,做数据存储和进一步的展示分析。

PM2.5传感器+Nucleo LoRa Sensor --> Nucleo LoRa Gateway --> 腾讯云物联网开发平台

PM2.5 监测器

这是春节放假前在办公室做好时的样子。

那时候大家都还不用戴口罩,我们和它都可以愉快地呼吸。现在就剩下它大口地呼吸,孤单地数着直径小于2.5um的粒子。

这是在腾讯云物联网开发平台上看到的数据,办公室 PM2.5 大约在 40 上下,属于比较正常的范围。晚上夜深的时候,PM2.5 能达到30左右,空气质量达到优的水平。

家里阳台的空气质量

监测器拿回家后,放在了阳台上,看看小区的空气质量。

通过2个月的观察发现了一点规律:

  • 我住处附近的空气质量和办公室差不多,阳台上在40多,属于良的等级;
  • 春节期间空气质量比开工后要好;
  • 下雨时空气质量会更好;

另外,数据上会周期出现一些爆点,飙到快 500,分析了下要么家里在炒菜,要么就是老爹在偷偷抽烟。

在写这篇文章的时候,老婆听了我的结论,心里不是很好受,已经在看净化器了。看到她打开了京东,我的心里也开始不好受了。

言归正传,接下来说说具体的软硬件设计。

2 硬件设计与实现

主控

由于手头刚好有 Nucleo LoRa Sensor 开发板,前面也完成了节点的接入网关的接入,所以我们就拿它来 DIY。

PM2.5 传感器

朋友们推荐了攀藤G7传感器 PMS7003,据说市场份额不错,并且串口接口也方便调试和代码处理。

传感器连接

在传感器连接接口设计上,考虑此前已有两个串口被使用,需要新增一个串口来与传感器通信。

Nucleo接口

硬件外设

UART1(PA9/PA10)

LoRa Modem

UART2(PA2/PA3)

打印

UART5(PC12/PD2)

PMS7003

由于 Nucleo 只需要接收数据就行,我们直接接到 RX 引脚上,也就是 PD2。

实物接线如下图。

3 软件设计与实现

软件上只需要处理串口驱动和传感器协议处理,具体工程是由 SupoArthur 两位大神帮忙搞定的,仓库见:

https://github.com/twowinter/TencentOS-tiny/tree/pm2d5

下面的 传感器数据解析处理 小节是对代码的解析,如果你也是采用相同的传感器,那这部分不用修改,只需进行 LoRaWAN 参数的配置。

传感器数据解析处理

这是传感器的串口参数及协议:

协议示例数据:

[17:10:48.321]收←◆42 4D 00 1C 00 3F 00 42 00 58 00 32 00 32 00 32 05 8C 00 E0 00 18 00 14 00 10 00 0E 00 00 03 D5 
[17:10:49.324]收←◆42 4D 00 1C 00 3E 00 42 00 58 00 31 00 32 00 32 05 64 00 E0 00 18 00 14 00 10 00 0E 00 00 03 AB 
[17:10:50.328]收←◆42 4D 00 1C 00 3A 00 42 00 58 00 30 00 32 00 32 05 14 00 E0 00 1C 00 14 00 10 00 0E 00 00 03 5A 
[17:10:51.329]收←◆42 4D 00 1C 00 39 00 42 00 56 00 30 00 32 00 32 05 14 00 D0 00 18 00 10 00 0B 00 0A 00 00 03 36 

具体处理逻辑是这样:

串口接收 --> 数据缓存解析校验 --> 取出其中26字节载荷发到邮箱 --> 邮箱接收并通过LoRa模组发送

硬件这边尽量对传感器数据简化处理,云平台有设备解析引擎,只需将传感器的原始数据取出上报,云端再将其转成JSON。

有兴趣的朋友直接看两位大神的代码,代码流程如下。

HAL_UART_RxCpltCallback

tos_shell_input_byte

shell_readline

tos_mail_q_post

tos_mail_q_pend

tos_lora_module_send

LoRaWAN 参数配置

另外记得处理下设备参数。

tos_lora_module_join_otaa

4 腾讯云物联网开发平台操作

端侧处理完毕后,接下来在云平台上创建产品和设备。

产品定义及设备创建

产品定义涉及数据模版,参考 PMS7003 传输协议直接定义了 12 个颗粒物属性以及版本号和错误代码。

相应的设备数据解析脚本如下,比较简单,无脑赋值:

function RawToProtocol(fPort, bytes) {
    var data = {
        "method": "report",
        "clientToken" : new Date(),
        "params" : {}
    };
    var i = 0;
    
    data.params.PM1_CF1 = (bytes[i++] << 8) | bytes[i++];
    data.params.PM2d5_CF1 = (bytes[i++] << 8) | bytes[i++];
    data.params.PM10_CF1 = (bytes[i++] << 8) | bytes[i++];
    
    data.params.PM1 = (bytes[i++] << 8) | bytes[i++];
    data.params.PM2d5 = (bytes[i++] << 8) | bytes[i++];
    data.params.PM10 = (bytes[i++] << 8) | bytes[i++];
    
    data.params.particles_0d3 = (bytes[i++] << 8) | bytes[i++];
    data.params.particles_0d5 = (bytes[i++] << 8) | bytes[i++];
    data.params.particles_1 = (bytes[i++] << 8) | bytes[i++];
    data.params.particles_2d5 = (bytes[i++] << 8) | bytes[i++];
    data.params.particles_5 = (bytes[i++] << 8) | bytes[i++];
    data.params.particles_10 = (bytes[i++] << 8) | bytes[i++];
    
    data.params.version = bytes[i++];
    data.params.Error = bytes[i++]
    
    return data;
}

设备调试

创建相应的设备后,复位我们做好的 PM2.5 监测器,即可在云端看到设备属性的上报。

至此,整个 PM2.5监测器的总体调试就完毕了。

END

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 前言
  • 1 Demo 介绍
    • 总体方案
      • PM2.5 监测器
        • 家里阳台的空气质量
        • 2 硬件设计与实现
          • 主控
            • PM2.5 传感器
              • 传感器连接
              • 3 软件设计与实现
                • 传感器数据解析处理
                  • LoRaWAN 参数配置
                  • 4 腾讯云物联网开发平台操作
                    • 产品定义及设备创建
                      • 设备调试
                      • END
                      相关产品与服务
                      物联网开发平台
                      腾讯云物联网开发平台(IoT Explorer)是面向智慧生活与产业物联应用的一站式物联网PaaS平台,为各行业用户提供一站式设备智能化服务。平台提供海量设备连接与消息通信能力,基于腾讯连连小程序应用开发能力、音视频能力及AI增值服务,聚合腾讯生态内容能力。提升传统行业设备智能化的效率,降低用户的开发运维成本。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档