看物联网开发实战:20分钟搭建简易环境监测站
当前,物联网可谓是最大的风口,成为市场最大的热门领域之一,但真实的开发情况却是另一番情景:协议多、组件多、工具多,用五花八门、琳琅满目形容也不为过,开发者面对如此情况,往往不知从何下手,开发效率和成果通常得不到有效地保证。那么,这种局面如何改善?让我们来听听天工用户的声音。
百度云天工物联网平台之所以越来越受到开发者的青睐,是因为天工物联网平台提供从物端到云端,从IoT数据接入、设备管理、数据处理、数据存储到数据可视化、物联安全、边缘计算的端到端基础平台,大幅降低物联网应用开发的难度,让物联网应用开发者可以专注于应用的创新。
最近,小编收到了一篇投稿,该作者使用百度云天工物联网平台仅仅花费20分钟就完成一个简易环境监测站的搭建,实现了环境数据采集和可视化展示,可谓是物联网应用高效开发的典范。
以下是投稿全文
最近笔者所在公司有个物联网项目需要采集环境数据并做数据的可视化展示。由于之前没有做过物联网硬件相关项目,于是找了找市场上的物联网解决方案。在具体项目实践中,我发现物联网项目不像传统Web架构LNMP直接搞定,而是有各种协议和组件,如果没有好的解决方案,开发者需要耗费大量精力在解决数据接入、协议支持、数据处理等方面,开发效率实在是低下。
纠结了很多方案之后,我发现百度云天工物联网平台比较中意。为快速进行可行性验证,我在开始正式项目(也是基于ESP8266)之前,先用温湿度作为基础数据,做了这个小Demo进行练手,整个过程下来20分钟搞定,并且效果非常不错,于是整理出一篇文章,希望可以对大家提供一些有用的帮助。
物联网基础硬件的准备
在开发板方面,我选择的是一款叫做NodeMCU的开发板。NodeMCU是一款非常好用且便宜的物联网开发板,自带USB转串口芯片、WiFi及多个GPIO接口,可连接多个传感器。NodeMCU的硬件基于ESP8266构建,内置WiFi支持。
在传感器方面,因为这次是通过做Demo来练手,对精度要求不是特别高,所以选择了一款低成本的温湿度传感器:DHT11。DHT11是一款温湿度传感器,可以用来测试环境温湿度,其精度湿度+-5%RH,温度+-2℃,量程湿度20-90%RH,温度0~50℃。
物联网硬件基本选择完毕,下面让我们来看看物联网云平台的准备。
物联网云平台的准备
我的目的是要将数据报到云端,然后做数据的可视化展示。当然如果条件允许,你也可以自行搭建MQTT Broker及数据存储、展示部分,但是这需要耗费很多时间和精力。这里为了让开发更加快捷,我选择了一个提供物联网平台的云服务。
在评估了多家物联网平台后,决定选择百度云天工。主要是三个方面的考虑:
-
百度云天工支持标准的MQTT接入。
-
存储的过程无需编码。
-
提供现成的可视化报表制作工具。
之后,就是去百度云天工平台进行注册和操作。
首先,注册百度云天工账号并认证天工-物联网平台,在左侧「产品服务」-「物联网服务」中,选择「物接入」,购买一个月的套餐(根据情况选择消息条数,因为我上报的数据比较多,所以我这里选了200万条)。 随后,进入项目列表,创建一个设备型项目。点项目名称可进入到项目详情页面,点击「新建物模型」。
之后,填写「名称」、「添加属性」。这里的属性就是我们需要采集的上报的信息,所以这里我加了两个属性:
-
Temperature温度 number类型
-
Humidity湿度 number类型
创建完物模型,接下来创建物影子。名称自定义即可,这个在后面会用到。之后的物模型选择刚才创建的模型,点击创建即可完成。创建完成后,获取连接信息备用(连接信息中,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:https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers
CH-340:http://www.wch.cn/search?q=340&t=downloads
下载驱动之后,我们就需要开始安装。
我们要下载Mongoose OS。根据你的操作系统,在MongooseOS官网:https://mongoose-os.com/software.html选择对应方式进行安装。
我自己的操作系统是macOS,所以直接使用以下命令安装。
安装完成后,就会自动打开浏览器。这时候你会看到引导界面。
如果没有启动,可输入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替换为你在前面百度云天工中创建的物影子名称。
你一定会好奇,前面的连接信息哪里去了。在MongooseOS里,MQTT的连接信息是写在配置文件的。
点击MongooseOS浏览器界面左侧的DeviceConf,可看到MQTT 配置界面。将前面的连接信息填写进来,点击左上角的Save即可。 另外,还需要切换到Expert View,将RPC模式改为不开启。
再回到Projects的代码编写界面,点击那个长得像上传的图标(如图),保存文件并传输到板子上重启。
这时,你就可以看到Logs里在打印温湿度信息,并显示上报成功(Yes)。如果为 no,可以配合本地Log及天工里「平台通用功能」-「日志」进行错误排查。
传输成功后,在天工「物影子详情」页面上就可以看到刚刚上报的数据了。
至此,就完成了数据采集到上报的全过程。
等一哈…一开始的第二张图不是有个好看的图么,难道是假的?
当然不是。接下来的部分不需要写代码了,直接在云平台上配置即可。
五、数据存储
我展示的图表里,有实时值和折线图。其中折线图是过去一段时间的历史数据。所以,我们需要将数据存下来。在一开始,我想着把数据存到MySQL或者MongoDB,在看了一些物联网平台,尤其是百度云天工之后,发现「时序数据库 TSDB」是一个更好的选择。
随后发现,在天工里,我们上报到物影子的数据,如果需要简单存储到TSDB,压根不用写代码。不过如果需要复杂的逻辑处理,好像还是要写代码,或者用一个叫规则引擎的服务。
扯远了,这次我们要存的东西比较简单,所以就用现成的功能了。在「物详情」页面(之前获取连接信息那有图),点击编辑,开启「存储配置」,把「不存储」改成「上报即存储」,选择需要存到哪个数据库(没有的话先创建个,默认配置就够用),度量名称填写monitor,点击保存即可。
这样存储的部分就配置好了,每次上报的数据,都会自动给存到TSDB里。可以在左侧导航选择「时序数据库」,点对应数据库的「查询面板」查看存进去的历史数据了。
六、做个好看的报表
物联网数据存好之后,接下来就是数据可视化展示。
同样的,继续使用天工的一个叫「物可视」的功能。这也是我选用百度云这套平台的主要原因之一。
这个功能的引导略少,我是看文档才了解怎么用,会了之后发现超级超级简单方便。我以这个项目的报表为例,来大概说一下步骤:
-
首先进到物可视,点创建「仪表盘」
-
进入后,顶上有俩标签,选择「数据表」
-
左侧新建数据表,因为我有俩仪表指针图和一个时序折线图,所以这一步我要创建两个数据表,一个时序数据库类型,一个物管理类型
-
创建完后,返回「仪表盘」。将需要的图拖动到空白处,点对应的图,右侧设置一下绑定数据,如下图:
这里介绍了一小部分功能,需要展示更多的部分,可以再看看文档。
结束
至此,一个简易环境监测站的搭建就算是大功告成啦,来看看具体效果:
想知道这个项目一共花费多少钱吗?
说出来能吓着你:20元!!!
20元=(NodeMCU板13.5元)+(DHT11传感器4.5元)+(时序数据库2元)
这是一套最基础的温湿度采集上报系统。我们在此基础上,也可以继续提升功能。比如增加红外,当温湿度到指定阈值,就触发开关空调;再开发手机App或微信小程序,控制板子上的红外遥控……
类似的场景还有很多的,在此就不一一引申了。