本案例针对传统甲醛检测的问题进行优化,通过远程在线监测甲醛指标的方式,解决了已有方案中“需现场人工查看”、“检测限于单次”等问题。
本文主要用于流程说明,详细源码请参考 github/SensorOnTencentCloud
(预计耗时 - 1人/时:单人约1小时可完成搭建实践验证。)
1.效果展示
云端展示
终端展示
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图示
b. 接线示意图
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接口
raspi-config
测试执行
i2cdetect -y 1
看到 3C 即识别硬件成功
注:UART默认开启,无需配置
4.1.3 本地监测与展示
a. 本地测试
执行脚本
nptdate cn.ntp.org.cn
/sotc/getdata.py &
sleep 3
/sotc/flusholed.py &
此时OLED应有显示数据。
注1:必须及时对时,避免时间偏差,影响数据可用性
注2:电化学传感器有预热时间,预热时间内数据不稳定
b. 添加启动项
编辑 /etc/rc.local
nptdate cn.ntp.org.cn
/sotc/getdata.py &
sleep 3
/sotc/flusholed.py &
c. 添加计划任务
编辑 /etc/crontab
*/1 * * * * root /sotc/reload.sh
此部分用于进程异常中止后的拉起。
注:基于时间成本与应用环境考虑,未使用守护进程或服务形态
4.2 云端搭建
4.2.1 云数据库
访问 云数据库 控制台 建立库表
表结构
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
MODIFYid
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. 组件配置信息
- 最新同步时间 - 通用文本
select concat('最新同步时间 ',stime) as value from sensordata order by id desc limit 1
- 国标系数比 - 水位图
select round((udata)/0.08100, 2) as value from sensordata order by id desc limit 1
- 实时读数 - 基本条形图
select round(udata, 3) as x, '' as y from sensordata order by id desc limit 1
- 10分钟数据 - 基本折线图
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天数据 - 基本折线图
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. 执行脚本
/sotc/sync_apigw.py
此时云数据库应新增数据,云图应有展示。
注1:如积累数据量过大,API网关可能会有超时,但数据应该能正常录入。
注2:未进行分批上传的原因,也是时间成本与工作环境考量,可自行更改。
b. 添加计划任务
编辑 /etc/crontab
/1 * * * * root /sotc/sync_apigw.py
此部分用于每分钟同步数据。
4.4 其它
本案例也将于 本周四(20190801) 在 腾讯技术工程直播间 进行直播分享。
欢迎提前预约直播。