Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

2023-01-14 13:37:26 17点赞 20收藏 16评论

之前买了一块基于瑞芯RK3588的Rock 5b国产开发板,配置非常强大,我已经在上面跑了NAS->OpenMediaVault,软路由->OpenWRT,智能家居->Home Assistant等多个应用或者Docker容器,具体实现方法参看以下文章,主要步骤都罗列出来了。运行情况还是非常稳定的,一个月以来就死机了一次,看CPU利用率不到3%,内存(16GB)使用率不到20%,显然还大有潜力可挖。

于是我又翻出了尘封多年的树莓派各个传感器,基本上Rock 5b和树莓派的传感器还是兼容的,都是基于GPIO嘛,但是设置方法有一些差别。几年前我发过一篇文章,是讲树莓派和PowerBI集成温湿度监控平台的。

评论中有值友说除了用PowerBI的Streaming服务,也可以用InfluxDB+Grafana来实现,那么这次我就试验一下这一方案的可行性如何。

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

什么是Grafana

首先介绍一下Grafana,Grafana是一个监控仪表系统,是由Grafana Labs公司开源的的一个系统监测工具。它可以大大帮助简化监控的复杂度,只需要提供需要监控的数据,就可以帮你生成各种可视化仪表。同时它还有报警功能,可以在系统出现问题时通知你。

开源意味着这一工具完全免费,你也可以自己优化它的功能。同时,它支持多个数据源,如Prometheus,Graphite,OpenTSDB,InfluxDB,MySQL/PostgreSQL,Microsoft SQL Server等等。

构建你的第一个Grafana仪表盘

这里用Docker在Rock 5b上安装Grafana,首先确保5b已经启用了Docker环境,具体方法在前面的文章里有介绍。安装Grafana使用了一个范例,大家可以在后面括号的链接中找到相关代码的下载地址(教程来自这里)。

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

架构还是很清晰的,在这里我们启动了三个服务:

  • Prometheus普罗米修斯时序数据库,用来存储和查询你的监控数据

  • Promethues-exporter一个模拟数据源,用来监控你本机的状态,比如有几个 CPU,CPU 的负载之类

  • Grafana本尊


使用以下命令启动Docker。

docker-compose up

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

如果一切正常,三个docker容器将被启动,包括prometheus, service和grafana;其中prometheus是普罗米修斯时序数据库,service是普罗米修斯自带的数据生成器(监控本机 CPU 内存等信息),grafana就是Grafana 服务本身。然后,浏览器访问本地的3000端口,即可打开grafana网站。

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

初始的用户名是admin,密码也是 admin。输入之后,会要求改密码。

和PowerBI一样,第一步是配置数据源Add Data Source。Grafana 本身并不负责数据层,它只提供了通用的接口,让底层的数据库可以把数据给它。而我们起的另一个服务,叫 Prometheus则是负责存储和查询数据的。也就是说,Grafana 每次要展现一个仪表盘的时候,会向 Prometheus 发送一个查询请求。Prometheus-exporter 这个服务,会查询你的本地电脑的信息,比如内存还有多少、CPU 负载之类,然后将数据导出至普罗米修斯数据库。

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

可以看到Prometheus已经有了。

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

这里使用prometheus的域名9090端口来访问,这是之前的docker配置文件设置好的。

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

保存之后如果看到Data source is working的提示,就说明Grafana已经跟普罗米修斯成功建立了连接。

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

数据搞定了,下一步就是配置仪表盘了,选择Dashboards -> Import。

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

这个网站下载仪表盘模板Json文件,在Grafana中上传。

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

选择刚才配置好的Prometheus数据源。

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

就可以生成非常酷炫的人生第一个Grafana仪表盘了,实时监控开发板的资源使用情况。因为我没有配置SWAP,所以有些数据是没有的。

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

安装InfluxDB 2.0

和prometheus一样,InfluxDB是一个专为时序数据设计的数据库,功能更加强大。docker安装方法如下(教程来自这里):注意InfluxDB已经升级到2.0版本,和之前的版本相比区别比较大,网上的不少教程都已经过期了。

首先启动docker

systemctl start docker

抓取influxdb的docker镜像

docker pull influxdb:2.0.7

写入influxDB配置文件并运行。

docker run --name influxdb -d
-p 8086:8086
--volume `pwd`/influxdb2:/var/lib/influxdb2
--volume `pwd`/config.yml:/etc/influxdb2/config.yml
influxdb:2.0.7

定义相关的账号密码。

docker exec influxdb influx setup
--bucket BUCKET_NAME
--org ORG_NAME
--password PASSWORD
--username USERNAME
--force

这里BUCKET_NAME可以认为是数据库的名字,而ORG_NAME是组织的名字,根据自己情况定义。

如果一切正常,就可以浏览器访问本地的8086端口打开InfluxDB。

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

如果打算使用InfluxDB 2.0的基本功能而不编写任何软件来写入或查询数据库中的数据,那么到这里就已经完成了。 但是,我这里要将传感器获取的数值传递到InfluxDB中的应用程序,并且要以编程方式获取访问令牌(Token)。

可以使用 influx CLI 使用以下命令检索令牌:

docker exec influxdb influx auth list

返回结果是如下格式:

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

但我关心的只有Token,用这个命令获取数组中的Token,并把它记录下来:

docker exec influxdb influx auth list | awk '/admin/ {print $4 " "}'

把这些内容整合起来就可以写一个完整的InfluxDB的安装脚本文件,执行后就可以生成完整的InfluxDB环境。

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

将BME280温湿度传感器连接至Rock 5b

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

可使用的温湿度传感器其实有不少,比如DT11,DT22,DS18B20等等,淘宝上的价格从几元到几十元不等。我这里是精度较高的BME280,这是一款集成温度、湿度、气压,三位一体的环境传感器。具有高精度,多功能,小尺寸等特点。DFRobot Gravity I2C BME280环境传感器采用Gravity-I2C接口设计,同时预留预留SPI接口,可以方便快捷的搭建产品原型,应用于环境监测,楼层高度检测,物联网控制等各种应用场景。Gravity I2C BME280环境传感器使用BOSCH最新MEMS微机电传感器,具备良好的稳定性。气压测量在整个温区非常稳定的,偏置温度系数±1.5 pa/k,当温度变化时,1摄氏度的温度变化导致的误差仅在12.6厘米。这种稳定性,连同其多功能的特点,使得BME280可以适用于各种应用场景。

5b的连线和树莓派一样,因为引脚定义是一致的。

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

连好引脚是这个样子的。

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

传感器裸露在外面有点难看,于是我用微积木给它做了个塑料壳。

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

晚上不开灯甚至能用来做小夜灯。

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

这里要用到GPIO口的I2C,这里简单介绍一下I2C。

I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件.在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向:如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送;如果主机要接收从器件的数据,则主机器件寻址从器件.然后主机接收从器件发送的数据,最后由主机终止接收过程。在这种情况下,主机主要是负责产生定时时钟和终止数据传送。

开启5b的I2C的方法是修改config.txt启动文件,这和树莓派不同。

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

dtoverlay=rk3588-i2c0-m1
dtoverlay=rk3588-i2c1-m0
dtoverlay=rk3588-i2c3-m1
dtoverlay=rk3588-i2c7-m3
dtoverlay=rk3588-i2c8-m4

修改后续执行update_extlinux.sh命令生效。

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

一开始还是按照老方法查看

sudo apt-get install i2c-tools

sudo i2cdetect -y 1

奇怪的是返回结果是UU不是77。

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

网上查了很多资料才得知,代码里查询的是1通道的设备,但是同样的接线方式5b接线的是7通道,所以无论如何都无法运行。(来自文章)改成7果然就可以了。

sudo i2cdetect -y 7

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

使用的还是之前树莓派链接BME280的示例文件。

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

用文本编辑器打开,将默认地址改成0x77(原来是0x76)

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

尝试运行发现报错。

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

这里注意后面也要改成7通道,如smbus.SMBus(7),并用Python3来运行。

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

这下运行就成功了。

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

但是目前我只实现了在本地展示传感器实时数据,下面要做的是将数据上传至InfluxDB数据库。(参考了这篇文章

访问InfluxDB的网站,可以查看到符合自己环境的influxdb客户端的安装配置脚本。通过pip install influxdb-client安装客户端。

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

张大妈这里输入过多代码会导致文章无法保存,所以这里只展示同步至InfluxDB的关键脚本截图。

在代码开头添加上图中导入InfluxDBClient等模块。

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

下面是客户端连接脚本。注意要修改用户名,密码和Token以符合你们的环境。

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

我希望客户端可以每隔五分钟将传感器的数值上传到InfluxDB上,可以通过修改crontab文件实现,命令如下:

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

自定义Grafana仪表盘

至此如果一切正常,传感器已经再源源不断地将数据传至数据库了。此时我们要做的是在Grafana服务器上连接InfluxDB数据库。

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

Add data source里选择InfluxDB的数据源。

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

配置时输入本地对应的Bucket,Organization,Token,和之前的脚本一样。

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

然后在下方写入Query脚本,使用的是FLUX语言,可以查看官方的介绍文档

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

传感器总共检测三个值,温度、湿度和大气压,脚本里定义为temperature, humidity,pressure,可以编写简单的Query脚本如下:

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

语言很容易理解,读取的Bucket是“home”,时间范围是最近6小时,读取的参数为pressure。

执行后即可看到对应的的点状图,你也可以在右侧面板里对于展示效果做进一步调整。

同理,可以添加针对temperature, humidity的图表,放在同一个仪表盘上。默认视图下,右上角可以设置不同的时间筛选条件,设为自动刷新等等。

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台

通过Garfana仪表盘我就能分析办公场所的环境特点了,办公室里湿度较低较干燥,而下午的温度呈升高趋势,难怪这么多同事喜欢用加湿器,看来我也得多用些保湿化妆品滋养我娇嫩的肌肤。

总结

这次总结了一下如何用Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台的实现方法,不得不说作为一款开源产品Grafana的功能还是相当强大的,还有更多玩法有待我的发掘。

喜欢我的文章请点赞、收藏、评论,谢谢大家的支持!

Rock 5b开发板 + BME280传感器 + InfluxDB/Grafana打造动态温湿度监控平台


展开 收起
16评论

  • 精彩
  • 最新
  • 先收藏起来了

    校验提示文案

    提交
  • 我虽然看不懂,但还是觉得很厉害

    校验提示文案

    提交
  • 比nodered+EMQX(mqtt)好看一丢丢 [阴笑]

    校验提示文案

    提交
  • 大佬的文章我甚至连题目都看不太懂,支持了~

    校验提示文案

    提交
  • 这个太高级了

    校验提示文案

    提交
  • 智能家居新玩法

    校验提示文案

    提交
  • 真好玩啊,可惜现在我老了,,,玩不动了。。

    校验提示文案

    提交
  • 自己DIY,很厉害的样子啊

    校验提示文案

    提交
  • 这个方法不错,学习到了,有些地方不是很懂,后面实操的时候可能还得来询问的大佬,还望讲解

    校验提示文案

    提交
  • 不明觉厉~

    校验提示文案

    提交
  • 感觉好专业

    校验提示文案

    提交
  • 今日份知识get

    校验提示文案

    提交
  • 好专业!看不懂 [晕死]

    校验提示文案

    提交
  • 谢谢值友分享

    校验提示文案

    提交
  • 不明觉厉,支持光看看

    校验提示文案

    提交
  • 要是能把编解码器和npu都能完美用上就好了,用来跑ha、媒体服务器和frigate感觉就太棒了

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
20
扫一下,分享更方便,购买更轻松