前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >腾讯云实践案例:基于树莓派实现甲醛在线监测

腾讯云实践案例:基于树莓派实现甲醛在线监测

原创
作者头像
高树磊
修改2019-07-30 10:52:48
2.9K16
修改2019-07-30 10:52:48
举报

本案例针对传统甲醛检测的问题进行优化,通过远程在线监测甲醛指标的方式,解决了已有方案中“需现场人工查看”、“检测限于单次”等问题。

本文主要用于流程说明,详细源码请参考 github/SensorOnTencentCloud

(预计耗时 - 1人/时:单人约1小时可完成搭建实践验证。)

1.效果展示

云端展示

腾讯云图 云端展示
腾讯云图 云端展示

终端展示

RapeberryPi 终端展示
RapeberryPi 终端展示

2.物料准备

终端部分

  • Rpi(Rapspberry Pi 3B+)
  • Rpi操作系统( raspbian 使用 lite 版)
  • 传感器(UART 甲醛传感器)
  • OLED(I2C OLED屏)

软件部分

3.架构说明

逻辑架构图
逻辑架构图
技术方案架构图
技术方案架构图

4.搭建过程

此环节分为三个部分:

  • 终端搭建
  • 云端搭建
  • 终端上报云端联调

注1: 终端搭建完成后,即可进行本地监测

注2: 云端部分是通用接口,可按接口格式,上报并展示其它监测数据

4.1 终端搭建

4.1.1 Rpi系统安装与环境准备
  • 安装Rpi操作系统 安装指引
  • 完成基础配置,使可接入互联网 配置指引
  • clone 代码至 Rpi (路径可自定,此处示例为 /sotc 下同)
  • 执行 init.sh 安装依赖库
4.1.2 硬件接线与配置

a. RPI GPIO图示

RaspberryPi GPIO 示意图
RaspberryPi GPIO 示意图

b. 接线示意图

GPIO 硬件接线 示意图
GPIO 硬件接线 示意图

c. 接线说明

传感器

Rpi

Pin4(5V)

Pin2(5V)

Pin3(GND)

Pin6(GND)

Pin6(UART-TxD)

Pin10(UART-RxD)

注:本次使用传感器,硬件接口是1.25mm端子,Rpi是2.5mm端子,使用了 7P1.25转2.5杜邦线,进行连接

OLED

Rpi

VCC

Pin1(3.3V)

SDA

Pin3(SDA)

SCL

Pin5(SCL)

GND

Pin9(GND)

d. 开启I2C接口

按下图示意打开I2C接口

代码语言:txt
复制
raspi-config
接口管理
接口管理
I2C管理
I2C管理
确认开启
确认开启

测试执行

代码语言:txt
复制
i2cdetect -y 1
查看设备
查看设备

看到 3C 即识别硬件成功

注:UART默认开启,无需配置

4.1.3 本地监测与展示

a. 本地测试

执行脚本

代码语言:txt
复制
nptdate cn.ntp.org.cn
/sotc/getdata.py &
sleep 3
/sotc/flusholed.py &

此时OLED应有显示数据。

注1:必须及时对时,避免时间偏差,影响数据可用性

注2:电化学传感器有预热时间,预热时间内数据不稳定

b. 添加启动项

编辑 /etc/rc.local

代码语言:txt
复制
nptdate cn.ntp.org.cn
/sotc/getdata.py &
sleep 3
/sotc/flusholed.py &

c. 添加计划任务

编辑 /etc/crontab

代码语言:txt
复制
*/1 * * * * root /sotc/reload.sh

此部分用于进程异常中止后的拉起。

注:基于时间成本与应用环境考虑,未使用守护进程或服务形态

4.2 云端搭建

4.2.1 云数据库

访问 云数据库 控制台 建立库表

表结构

代码语言:txt
复制
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";

CREATE TABLE `sensordata` (
  `id` int(11) NOT NULL,
  `stime` timestamp NULL DEFAULT NULL,
  `utype` int(11) NOT NULL DEFAULT '0',
  `udata` float NOT NULL,
  `sdata` varchar(256) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `sensordata`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `sensordata`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
COMMIT;

字段

说明

id

自增主键

stime

监测时间

udata

监测数据

utype

监测类型(用于后续扩展)

sdata

监测数据(用于后续扩展)

4.2.2 无服务器云函数

访问 云函数 控制台 建立函数服务

  • 新建服务
  • 配置代码 (录入 github/scf.py 代码)
  • 配置触发方式 (选择API网关触发)
  • 等待调用

注:由于后续使用API网关触发,可后续联调

4.2.3 云API网关

访问 API网关 控制台 配置网关服务,如由上节云函数部分配置触发,则API网关服务已经建立,仅需调整配置,以及下载使用API网关SDK。

具体操作可参考 client_package/readme.md

4.2.4 腾讯云图

访问 云图 控制台 配置展示部分

a. 使用说明

新建大屏 -> 拖选组件 -> 点击数据栏 -> 选择数据库 -> 填写SQL -> 开启自动更新 -> 预览 -> 发布

b. 操作示例图

腾讯云图 简要操作方式
腾讯云图 简要操作方式

c. 组件配置信息

  • 最新同步时间 - 通用文本
代码语言:txt
复制
select concat('最新同步时间 ',stime) as value from sensordata order by id desc limit 1
  • 国标系数比 - 水位图
代码语言:txt
复制
select round((udata)/0.08*100, 2) as value from sensordata order by id desc limit 1
  • 实时读数 - 基本条形图
代码语言:txt
复制
select round(udata, 3) as x, '' as y from sensordata order by id desc limit 1
  • 10分钟数据 - 基本折线图
代码语言:txt
复制
select * from (select id, round(udata, 3) as y, date_format(stime, '%H:%i:%S') as x, utype as s from sensordata order by id desc limit 360) as t1 order by id asc
  • 7天数据 - 基本折线图
代码语言:txt
复制
select distinct (dt), round(AVG(udata),3) as y, dt as x, '0' as s from (select id, date_format(stime, '%Y-%m-%d %H') as dt, udata from sensordata order by id desc limit 604800) as t1 group by dt order by dt ASC

4.3 终端上报云端联调

a. 执行脚本

代码语言:txt
复制
/sotc/sync_apigw.py

此时云数据库应新增数据,云图应有展示。

注1:如积累数据量过大,API网关可能会有超时,但数据应该能正常录入。

注2:未进行分批上传的原因,也是时间成本与工作环境考量,可自行更改。

b. 添加计划任务

编辑 /etc/crontab

代码语言:txt
复制
*/1 * * * * root /sotc/sync_apigw.py

此部分用于每分钟同步数据。

4.4 其它

本案例也将于 本周四(20190801) 在 腾讯技术工程直播间 进行直播分享。

欢迎提前预约直播。

腾讯技术工程直播间
腾讯技术工程直播间

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.效果展示
  • 2.物料准备
  • 3.架构说明
  • 4.搭建过程
    • 4.1 终端搭建
      • 4.1.1 Rpi系统安装与环境准备
      • 4.1.2 硬件接线与配置
      • 4.1.3 本地监测与展示
    • 4.2 云端搭建
      • 4.2.1 云数据库
      • 4.2.2 无服务器云函数
      • 4.2.3 云API网关
      • 4.2.4 腾讯云图
    • 4.3 终端上报云端联调
      • 4.4 其它
      相关产品与服务
      云数据库 MySQL
      腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档