20元+20行JS,体验物联网设备开发—家庭环境监测站DIY
头图是在网上随意找的...并不是成品...成品如下~
少啰嗦,先看东西
〇、 准备清单
开发版
这里我选择的是一款叫做 NodeMCU 的开发版。这个是非常好用方便且便宜的物联网开发板,自带 USB 转串口芯片、WiFi 及多个 GPIO 接口,可连接多个传感器。硬件基于 ESP8266 构建,内置 WiFi 支持。
传感器
传感器方面因为我对精度要求不是很高,所以选择了一款廉价的温湿度传感器——DHT11。这是一款温湿度传感器,可以用来测试环境温湿度。其精度湿度+-5%RH, 温度+-2℃,量程湿度20-90%RH, 温度0~50℃。
云平台准备
云平台选择
我的目的是要将数据报到云端,然后做个展示,当然你也可以自行搭建 MQTT Broker 及数据存储、展示部分。这里我就方便些,选择一个提供物联网平台的云服务了。
在评估了百度天工物联网平台、阿里物联网套件、腾讯 IoT 套件后,决定选择百度天工。主要是两个方面的考虑:
百度天工支持标准的 MQTT 接入
存储的过程无需编码
提供现成的可视化报表制作工具
不过也有一些问题,但是也算瑕不掩瑜吧:提供了物接入和物管理两个接入入口,但实际上物接入是裸协议,物管理会方便很多;日志查询交互有点反人类,默认进去无内容,需要点一下搜索才出来,排查的时候以为没有报日志上来。
云平台操作
1. 注册百度云天工账号并认证 天工-物联网平台 在左侧「产品服务」-「物联网服务」中,选择「物接入」,购买一个月的套餐(根据情况选择消息条数,因为我上报的数据比较多,所以我这里选了200万条)。 随后,在左侧菜单选择「物管理」。进入物管理后,点击「新建物模型」。 填写「名称」、「添加属性」。这里的属性就是我们需要采集的上报的信息,所以这里我加了两个属性:
Temperature 温度 number类型
Humidity 湿度 number类型
2. 创建完物模型,接下来创建物影子。名称自定义即可,这个在后面会用到。来自的物模型选择刚才创建的模型,点击创建即可完成。创建完成后,获取连接信息备用(连接信息中,key 是仅在生成后显示一次的)。
至此,准备工作告一段落。后面存储的部分(时序数据库 TSDB)可在这一步骤开启,也可连通之后再开启。
一、 开发版系统选择
这款开发版可支持多种操作系统,如 NodeMCU(lua)、ESPEasy(WebUI)、MicroPython,以及我们今天要使用的 Mongoose OS(NodeJS)。
不管是以上哪个固件,都可以跑通 MQTT。如在百度天工文档中,NodeMCU 固件下的 lua 版本NodeMCU。
因为 Mongoose OS 刷系统不需要借助第三方工具,有一个 web 的控制台可以便于管理及调试,所以为了方便,我这次就选择了 Mongoose OS 的固件。
二、 接线
将传感器与板子之间使用杜邦线连接起来。DHT11 一般包含3个接头,但根据生产商不同,标注和顺序有所不同,接线时请查看模块上的标注。我手上这颗是按如下顺序标注的:
VCC(+、3.3v等)
DATA(D、S、SIG 等)
GND(-、G 等)
VCC 和 GND 可与板子上对应标注位连接;DATA 接到 GPIO 口即可。因为 D4距离较近,于是 GPIO 口我就选了 D4 。
接线如图:

实物图:
三、 刷系统
安装驱动
淘宝上可买到的 NodeMCU,所集成的 USB 转串口的芯片一般有 CP2102 和 CH340 两种,驱动下载地址分别为:CP2102 CH-340。
安装系统
随后,我们要下载 Mongoose OS。根据你的操作系统,在 MongooseOS 官网 选择对应方式进行安装。
我的是 macOS,所以直接使用以下命令安装。
curl -fsSL https://mongoose-os.com/downloads/mos/install.sh | /bin/bash
~/.mos/bin/mos --help
~/.mos/bin/mos
安装完成后,就会自动打开浏览器。这时候你会看到引导界面。
如果没有启动,可输入 cd .mos/bin/ 或者进入自定义的安装目录,执行 ./mos 来运行管理界面。(Windows 用户直接双击即可)
接下来是烧录固件。将板子用 Micro-USB 的数据线与电脑连接,在引导界面,选择板子对应的接口,点击 Select。
平台会默认选择(ESP8266),App 的部分我选择了 demo-js,后面我会在这个 App 基础上进行改动以将数据采集并上报。
WiFi 的部分填写你希望板子连接到的热点(注意:仅支持2.4G)。随后点击 Done 即可,这时板子上指示灯会以较快频率闪动。
四、 采集并上报数据
烧录完成后,即可在浏览器中看到代码编辑界面。系统启动后会执行init.js ,我们的代码足够少,所以这里我们就全部写到此文件。
代码如下
其中
pin 是按 ESP8266 的编号,我们上面接线的 D4 对应 ESP8266 2 号 GPIO 口,所以这里填的2。
$baidu/iot/shadow/xxxxxxxxxxx/update 中的 xxxxxxxxxxx 替换为你在前面百度天工中创建的物影子名称。
load('api_dht.js');
load('api_mqtt.js');
load('api_timer.js');
// GPIO pin which has a DHT sensor data wire connected
let pin = 2;
// Initialize DHT library
let dht = DHT.create(pin, DHT.DHT11);
// This function reads data from the DHT sensor every 10 second
Timer.set(10000 /* milliseconds */, Timer.REPEAT, function() {
let t = dht.getTemp();
let h = dht.getHumidity();
if (isNaN(h) || isNaN(t)) {
print('Failed to read data from sensor');
return;
}
let data = {"reported":{ temperature:t, humidity:h }};
let myData = JSON.stringify(data);
let ok = MQTT.pub("$baidu/iot/shadow/xxxxxxxxxxx/update", myData, 1);
print('Published:', ok ? 'yes' : 'no', ',message:', myData);
print('Temperature:', t, '*C');
print('Humidity:', h, '%');
}, null);
你一定会好奇,前面的连接信息哪里去了。在 MongooseOS 里,MQTT 的连接信息是写在配置文件的。
点击 MongooseOS 浏览器界面左侧的 DeviceConf ,可看到 MQTT 配置界面。将前面的连接信息填写进来,点击左上角的 Save 即可

再回到 Projects 的代码编写界面,点击那个长得像上传的图标(如图),保存文件并传输到板子上重启。

这时,你就可以看到 Logs 里在打印温湿度信息,并显示上报成功(Yes)。如果为 no,可以配合本地 Log 及天工里「平台通用功能」-「日志」进行错误排查。
传输成功后,在天工「物影子详情」页面上就可以看到刚刚上报的数据了。

至此,就完成了数据采集到上报的全过程。
等一哈...一开始的第二张图不是有个"好看"的图么,难道也和头图一样是假的?
当然不是。接下来的部分不需要写代码了,直接在云平台上配置即可。
五、 数据存储
我展示的图表里,有实时值和折线图。其中折线图是过去一段时间的历史数据。所以,我们需要将数据存下来。在一开始,我想着把数据存到 MySQL 或者 MongoDB,在看了一些物联网平台,尤其是百度这个天工之后,发现「时序数据库 TSDB」是一个更好的选择。
随后发现,在天工里,我们上报到物影子的数据,如果需要简单存储到 TSDB,压根不用写代码。不过如果需要复杂的逻辑处理,好像还是要写代码,或者用一个叫规则引擎的服务。
扯远了,这次我们要存的东西比较简单,所以就用现成的功能了。在「物详情」页面(之前获取连接信息那有图),点击编辑,开启「存储配置」,把「不存储」改成「上报即存储」,选择需要存到哪个数据库(没有的话先创建个,默认配置就够用),度量名称填写 monitor ,点击保存即可。

这样存储的部分就配置好了,每次上报的数据,都会自动给存到 TSDB 里。可以在左侧导航选择「时序数据库」,点对应数据库的「查询面板」查看存进去的历史数据了。
六、 做个好看的报表
数据存好了,接下来就是展示出来。
同样的,继续使用天工的一个叫「物可视」的功能。这也是我选用百度这套平台的主要原因之一。
这个功能的引导略少,我是看文档才了解怎么用,会了之后发现超级超级简单方便。
我以做一张我截图那种报表为例,来大概说一下步骤:
首先进到物可视,点创建「仪表盘」
进入后,顶上有俩标签,选择「数据表」
左侧新建数据表,因为我有俩仪表指针图和一个时序折线图,所以这一步我要创建两个数据表,一个时序数据库类型,一个物管理类型
创建完后,返回「仪表盘」。将需要的图拖动到空白处,点对应的图,右侧设置一下绑定数据,如下图
另外,在仪表盘列表页面,可以将创建好的图表分享出来或 copy 代码来直接放到自己的项目里。例如
这里介绍了一小部分功能,需要展示更多的部分,可以再看看文档。
结束
至此,整个搭建到展示的过程完成。
一共花费为 20 元 = (NodeMCU板 14.5 元)+ (DHT11传感器 4.5元) + (时序数据库 1 元)
这是套最基础的温湿度采集上报系统,我主要用于学习物联网设备的开发模型,同时丢家里监测下环境。在此基础上,也可以做一些梗复杂的事情。比如加个红外,当温湿度到指定阈值,就触发开关空调;做个手机 App 或微信小程序,控制板子上的红外遥控……
场景还是很多的,就不一一引申了。
冰镇菠萝
校验提示文案
燃墨为烛
校验提示文案
fxiaopi
校验提示文案
Hoooo
校验提示文案
kilua
校验提示文案
zj2012ss
校验提示文案
燃墨为烛
校验提示文案
zj2012ss
校验提示文案
kilua
校验提示文案
冰镇菠萝
校验提示文案
Hoooo
校验提示文案
fxiaopi
校验提示文案