专栏首页腾讯云实践案例手搓一个分布式大气监测系统(三)使用 Nucleo LoRa 开发套件打造 PM2.5 监测终端
原创

手搓一个分布式大气监测系统(三)使用 Nucleo LoRa 开发套件打造 PM2.5 监测终端

前言

鹅民大气监测项目前期已搭建了5个种子监测点,接下去将吸引更多的志愿者来搭建终端,接入系统,一起搭建监测网络。从二期开始,大气监测项目组的同事优选了几款开发套件完成了验证测试,志愿者可根据挑选的开发套件来完成相应的监测终端。

这篇文章分享下如何使用 Nucleo LoRa 开发套件打造 PM2.5 监测终端。

1 方案介绍

总体方案

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

示意图大致为:

PM2.5传感器+Nucleo LoRa Sensor --> Nucleo LoRa Gateway --> 腾讯云物联网开发平台 --> 大气监测系统

实物展示

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

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

接下来说说具体的软硬件实现。

2 准备工作

PM2.5 传感器

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

Nucleo LoRa 节点开发环境搭建

根据 基于 TencentOS tiny 的 LoRaWAN 开发入门指南 的介绍完成开发环境搭建,包括 MDK 软件的安装及配置、ST-Link 驱动安装、串口软件的安装。

Nucleo LoRa 网关操作

网关无需开发,如果已经配置过接入域名和频点,只需按照如下接线方式连接即可。

持续运行的接线说明

如果此前网关已经做了接入网址和频点的配置,那么只要按本小节接线即可。

  1. 先使用 5V 适配器通过 USB 线连接到网关开发板的网关模组(上方的墨绿色板子) Micro USB 接口,给整个网关供电。
  2. 网关开发板通过网线连接到上一级路由器的 LAN 口,从而可以实现 DHCP 的方式连接以太网。

3 硬件实现

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

Nucleo接口

硬件外设

UART1(PA9/PA10)

LoRa Modem

UART2(PA2/PA3)

打印

UART5(PC12/PD2)

PMS7003

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

实物接线如下图。

4 软件实现

示例代码

PM2.5监测器的示例代码已经实现,主要处理串口驱动和传感器协议处理。具体工程仓库见:

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。

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

graph TB
HAL_UART_RxCpltCallback --> tos_shell_input_byte
tos_shell_input_byte --> shell_readline
shell_readline --> tos_mail_q_post
tos_mail_q_post --> tos_mail_q_pend
tos_mail_q_pend --> tos_lora_module_send

LoRaWAN 参数配置

如果上面的源码分析没完全搞懂也没关系,这不影响我们的接入操作。只需要记得处理一行设备参数相关的代码即可。

1.进入<TencentOS-tiny\board\NUCLEO_STM32L073RZ\KEIL\lorawan>目录,打开 TencentOS_tiny.uvprojx 工程。

2.修改\examples\LoRaWAN\lora_demo.c.。

tos_lora_module_join_otaa("8cf957200000f806", "8cf957200000f8061b39aaaaad204a72");

填入节点相应的 DevEUI 和 AppKEY。鹅民大气监测项目目前将会为参与活动的同事分配专用的密钥 DevEUI 和 AppKey。

3.修改完毕后,重新编译并下载程序。复位我们做好的 PM2.5 监测终端,即可在云端看到监测终端的上报。

END

至此,基于 Nucleo LoRa 开发套件搭建的 PM2.5监测终端的接入就完成了。只需找到一个合适的位置长期安放终端即可。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • The Things Network LoRaWAN Stack V3 学习笔记 3.1.2.3_1 从 ChMask 问题引申出一个 golang 循环语句易错问题

    在测试 LinkADR 功能时,发现了 STACK 中一个 ChMask 的问题,经过好几天的摸索,终于搞定了问题。根源是 range 语句中的内存分配问题,本...

    twowinter
  • 自制一个 LoRa PM2.5 监测器

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

    twowinter
  • 小程序快速入门教程 1.1 小程序开发入门

    结合刚创建的 DEMO,大致了解下小程序的文件结构和页面组成,详细的内容可以查看 小程序代码构成。

    twowinter
  • SQL*Plus break与compute的简单用法

       在SQL*Plus提示符下输出求和报表,我们可以借助break与compute两个命令来实现。这个两个命令简单易用,可满足日常需求,其实质也相当于在编写S...

    Leshami
  • Linux下误删除后的恢复操作(ext3/ext4)

    Linux是作为一个多用户、多任务的操作系统,文件一旦被删除是难以恢复的。尽管删除命令只是在文件节点中作删除标记,并不真正清除文件内容,但是其他用户和一些有写盘...

    洗尽了浮华
  • [042]f2fs存储结构初探

    将f2fs_device和loop设备绑定,生成一个虚拟块设备,如果提示设备忙,13换成其他数字

    王小二
  • 为什么别人能用好 MySQL?万字详解其复杂原理

    MySQL InnoDB 引擎现在广为使用,它提供了事务,行锁,日志等一系列特性,本文分析下 InnoDB 的内部实现机制,MySQL 版本为 5.7.24,操...

    乔戈里
  • AkShare-宏观经济-中国LPR数据

    LPR数据对大家都有非常重大的影响,尤其是有房贷的各位小伙伴,特提供 LPR 数据接口,欢迎大家使用。

    AkShare
  • 分析一个跨平台DDOS僵尸网络

    从最近“恶意软件必须死”的帖子了解到一些关于DNS放大攻击相关的LINUX恶意软件样本。我对linux恶意软件的研究非常感兴趣,而且这个很特别,因为他有一个DD...

    FB客服
  • [Matlab]使用Simulink进行UDP通讯2

    原文链接:http://blog.csdn.net/humanking7/article/details/50710108

    祥知道

扫码关注云+社区

领取腾讯云代金券