很多同学的树莓派,买之前计划了很多使用场景,然而买回来以后折腾了几次,就默默放在那吃灰了。

所以,这篇文章就是来尝试给你的树莓派找点活干的。当然,也可能成为一些同学入手 pi 的原因。吃灰——永远在循环...

-w300

准备

硬件

树莓派(就不配图了)
DHT11 温湿度传感器(可根据自己需要更换)和杜邦线
-w300

云端配置

云端可以使用任一一家成熟支持 MQTT 标准协议的物联网云平台,如百度天工、阿里IoT、移动OneNET 等。我平时用百度天工(毕竟完善还便宜)比较多,这里就以天工的物联网平台为例了。

注册百度云天工账号并认证 天工-物联网平台,在左侧「产品服务」-「物联网服务」中,选择「物接入」,开通即可。

随后,进入项目列表,创建一个设备型项目。点项目名称可进入到项目详情页面,点击「新建物模型」。

填写「名称」、「添加属性」。这里的属性就是我们需要采集的上报的信息,所以这里我加了两个属性:

+  temperature 温度 number类型
+  humidity 湿度 number类型

创建完物模型,接下来创建物影子。名称自定义即可,这个在后面会用到。对应的物模型选择刚才创建的模型,点击创建即可完成。创建完成后,获取连接信息备用(需要注意的是,连接信息中,key 是仅在生成后显示一次的,请下载保存好)。

树莓派NodeRED 准备工作

树莓派的系统安装这里就不展开了,假定你手上的树莓派是一个完成了系统初始化的版本。
NodeRED 在树莓派中有预置,不过版本太旧了。所以树莓派初始化完成之后第一件事,就是升级 NodeRED。

在「终端」中执行以下命令

bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)

按照提示,选择 y 继续安装(需要注意,安装时会同时自动更新 NodeJS)

等待几分钟就安装成功了。随后执行 node-red-start 来启动 NodeRED,启动完成后用浏览器打开http://{your_pi_ip-address}:1880 即可看到 NodeRED 的界面,其中 {your_pi_ip-address} 替换成你树莓派的 IP,在树莓派本机上打开的话也可以直接用 localhost 或者 127.0.0.1 替换。打开后看到如下界面。

如果需要之后树莓派开机启动,可以执行 sudo systemctl enable nodered.service添加 NodeRED 到启动项。

动手

传感器连接

我手上的 DHT11 传感器有三个接口,其中

  • vcc 或 + 接到树莓派的供电
  • gnd 或 - 接到接地
  • data 接 GPIO 4(可任一数据口,但需注意修改对应配置里面 Pin 号)
    -w600

构建 NodeRED 流程(Flow)

硬件接好了,回到屏幕上。

第一步:安装 DHT 读取节点

NodeRED 中读取 DHT11 传感数据的节点默认是没有安装的,按以下步骤安装对应节点(Node)node-red-contrib-dht-sensor

第二步:导入 Flow

在 NodeRED 中,菜单中选择「导入」。将以下内容贴进去即可生成对应 Flow 。

[{"id":"82b6262e.bf49e8","type":"tab","label":"pi-H/T","disabled":false,"info":""},{"id":"2560d913.ffaba6","type":"rpi-dht22","z":"82b6262e.bf49e8","name":"","topic":"rpi-dht11","dht":"11","pintype":"0","pin":4,"x":340,"y":240,"wires":[["5a42c596.cc8fec"]]},{"id":"85fe1005.4d91b","type":"inject","z":"82b6262e.bf49e8","name":"","topic":"","payload":"","payloadType":"date","repeat":"60","crontab":"","once":false,"onceDelay":0.1,"x":160,"y":240,"wires":[["2560d913.ffaba6"]]},{"id":"59a8a484.1ef38c","type":"debug","z":"82b6262e.bf49e8","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":730,"y":300,"wires":[]},{"id":"5a42c596.cc8fec","type":"change","z":"82b6262e.bf49e8","name":"","rules":[{"t":"move","p":"payload","pt":"msg","to":"payload.reported.temperature","tot":"msg"},{"t":"move","p":"humidity","pt":"msg","to":"payload.reported.humidity","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":520,"y":240,"wires":[["59a8a484.1ef38c","e86b6792.1a73c8"]]},{"id":"e86b6792.1a73c8","type":"mqtt out","z":"82b6262e.bf49e8","name":"Send to Cloud","topic":"$baidu/iot/shadow/raspberrypi/update","qos":"0","retain":"false","broker":"451f3b59.7bb104","x":740,"y":240,"wires":[]},{"id":"451f3b59.7bb104","type":"mqtt-broker","z":"","name":"raspberrypi","broker":"a8fcf75.mqtt.iot.gz.baidubce.com","port":"1883","clientid":"raspberrypi","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]

当然,你也可以手动拖拽Node来连接并配置。需要注意的是,上面的配置中,需要选择接线时所选的对应 GPIO Pin 针脚号。

第三步:配置MQTT

双击命名为 Send to Cloud 的 MQTT Out 节点,打开如下配置界面。

添加 MQTT Broker 的时候就用的上前面下载留存的「连接信息」了。对应从里面 copy 填写就可以了。

第四步:测试连接结果

点击右上角的部署,就可以看到 MQTT 节点状态变成了已连接。也可以开启 debug 在控制台查看到输出。

对应云端,也可以进入创建好的物影子,在详情页面看到对应上报的数据(「当前值」列)以及对应时间。

第五步:配置云端可视化仪表盘

如果需要历史曲线,可以配置在上报时保存对应数据,将数据存储在 TSDB。
然后就可以用强大的物可视来完成仪表盘的创建了。此步奏和之前教程一致,可翻出来看看,像做 PPT 一样做出来一个大屏。