最近笔者所在公司有个物联网项目需要采集环境数据并做数据的可视化展示。由于之前没有做过相关项目,于是找了找市场上的物联网解决方案。在具体项目实践中,我发现物联网项目不像传统Web架构LNMP直接搞定,而是有各种协议和组件,如果没有好的解决方案,开发者需要耗费大量精力在解决数据接入、协议支持、数据处理等方面,开发效率实在是低下。
纠结了很多方案之后,我发现百度云天工物联网平台比较中意。为快速进行可行性验证,我在开始正式项目(也是基于ESP8266)之前,先用温湿度作为基础数据,做了这个小Demo进行练手,整个过程下来20分钟搞定,搭建了一个简易的环境温湿度监测站,并且效果非常不错,而且成本十分低廉,仅仅18元!!!于是整理出一篇文章,希望可以对大家提供一些有用的帮助。
下面是云端的最终展示效果图,可以实时监控温度和湿度的变化:
感觉挺高大上有木有?闲话少说,Let’s begin!
一个ESP8266模组,我用的是NodeMCU。(14元)一个DHT11温湿度传感器,可以直接从淘宝上买(4元)。百度天工云平台负责上报的数据存储和展现,我们使用最低的配额,还有免费的代金券,完全免费。一共18元搞定!
端上的代码已经包含在百度iot-edge-c-sdk里面,我们直接clone下来:
git clone https://github.com/baidu/iot-edge-c-sdk.git
耐心等待一会儿。。。
进入工程目录:
cd iot-edge-c-sdk/practise/freeRTOS/ESP/dht11_iotdm_monitor
cat README.md
按照README里面的指导,没啥好说的,配置,编译:
export IDF_PATH=你的 ESP8266_RTOS_SDK 路径
export PATH=esp8266 toolchain 路径
make menuconfig # 按照README配置,还有SPI模式这里是`DIO`大小`4M`,也在`Serial flasher config`里面配置好
# 修改iot-edge-c-sdk的`component.mk`中加入```CFLAGS += -DESP8266_SOC_RTC```
make
现在就可以编译通过了,但是还无法连接mqtt server。还需要登陆百度天工进行配置注册等工作。可以用你的百度账号直接登陆,进去之后,左侧的菜单栏依次点击:产品服务->物联网服务->物接入Iot Hub,进入天工的管理控制台
界面。之后点击创建计费套餐
,(这里如果是第一次登陆,还需要开发者实名认证一下)如下图所示:
在购买规格里面填写1
,一个月,100万条数据,对于我们的demo足够了,而且还是免费的哦。直接下一步。然后是支付页面,这里不需要支付任何费用,这样套餐就创建完成啦。
接下来开始创建项目。
进入管理控制台
,点击创建项目
,如下图所示:
这里的项目名称随便写,比如iotdm_test
。项目类型选择设备型
。点击右侧的提交
按钮,项目就创建好了。
接下来,就要开始创建设备
啦!在百度天工云平台中,云端的设备叫做物影子
,其实就是物理设备在云端的一个实例,包含了设备当前所有的状态信息(比如当前的温度,湿度,开关状态等等)。关于物影子
的概念以及创建方法,可以参考官方文档。anyway,如果你不想看文档 = =!也没关系,跟着我一步步来做就行啦:)
进入之前的管理控制台界面,点击我们刚刚创建的项目,之后就进入了设备创建的页面:
左侧有几个栏目:物模型
物影子
权限组
OTA远程升级
,一步步来,我们先点击物模型
,所谓的物模型
简单说就是你给设备创建的几个属性的集合。我们的例子中,当然是temperature
和humidity
这两个属性啦。于是,点击点击新建物模型
之后进入属性的创建页面,名称
随便写,比如dht11_model
,点击添加属性
,添加第一个属性,属性名称填写temperature
类型为number
单位为度
,就可以了,同样地,添加humidity
属性,最终效果如下图所示:
这样物模型就创建好了。
接下来创建物影子
,点击左侧的物影子
,点击点击新建物影子
,名称随便写,比如dht11_device_shadow
,之后,选择物模型,就选刚才创建的物模型dht11_model
,然后开启存储配置
,因为我们有一个折线图,描述温湿度在过去一段时间的变化情况,所以需要把数据存储到百度时序数据库TSDB
,看起来还有免费的代金券可以领,点击立即领取,点击开始使用,点击创建数据库,就进入到创建数据库的界面,如下图:
数据库名称随便写,比如dht11tsdb
。下面的所有选项默认即可。点击下一步,进入支付界面,选择我们刚才免费领取的代金券,点击支付,这样我们的数据库就创建OK了。
再次返回到之前创建物影子到页面,数据存储到
这里选择我们刚才创建的dht11tsdb
,最后,点击创建
,之后会弹出一个对话框,包含了我们需要的connect信息!!!!!如下图所示:
好啦,修改代码main/iotdm_client_sample.c
...
#define ADDRESS "ssl://xxxxxxxxxxxxxxxxxxx.mqtt.iot.gz.baidubce.com:1884"
// The device name you created in device management service.
#define DEVICE "yyyyyyyyyyyyy"
// The username you can find on the device connection configuration web,
// and the format is like "xxxxxx/xxxxx"
#define USERNAME "xxxxxxxxxxxxxxxxxxx/yyyyyyyyyyyyy"
// The key (password) you can find on the device connection configuration web.
#define PASSWORD "xxxxxx"
...
上面的ADDRESS
就替换成刚才得到的连接信息中的SSL Address
中的值(通讯链路是tls加密的,如果你希望不加密,这里就填写TCP Address
中的值)。DEVICE
就填写我们物影子
的名称dht11_device_shadow
,然后USERNAME
PASSWORD
就填写刚才连接信息中的name
key
,然后,重新编译,烧写,测试。
注意,关于DHT11与NodeMCU的连接,Demo程序里面选择的是GPIO5
,也就是D1
,不要搞错了。
上电运行,发现连接成功,并且实时数据每隔5s上报一次,我们再看看云端是否能够收到上报的数据呢?进入管理控制台
,进入项目,再点击物影子
,发现数据上报成功!!
到目前为止,接入部分就圆满结束了。咦,你在文章开头不是有一张很好看的监控界面吗?别急,点点鼠标就出来了。
要生成监控界面,对数据可视化展现,也是非常简单方便的。进入管理控制台
,点击左侧的物可视
仪表盘
:
点击新建仪表盘
,之后就是一张画布了。我们从左边的控件库中拖入两个仪表盘
一个时序面积图
。光有图还不行啊,还需要关联我们tsdb里面的数据才行。
注意上面用红色标记出来的两种类型,一个是时序数据库
类型,个人理解就是如果需要把一段时间存储下来的数据展现的,就需要这种类型,我们的时序面积图就需要这样的类型。另一个是设备影子
,就是设备的当前值,那当然就是两个仪表盘需要的类型啦,很简单。所以,我们需要创建两张表。
先创建第一张时序数据库
:
名称随意,比如dht11_tsdb_table
,区域选择广州:
下面开始创建第二张数据影子
表,名字随意,比如dht11_shadow_table
:
如上图选择我们之前的物影子,点击下一步。勾选涉及到的两个属性,之后确定,这张表也创建完成了。
好了,现在我们就可以绑定数据到控件上了,返回仪表盘
,选中左边的仪表盘,选择右侧的数据设置
菜单,点击指标值
右侧的小图标,选择数据源,就是之前我们创建的dht11_shadow_table
:
并且选中temperature(Number)
值域,之后点击绑定
,这个仪表盘之后就现实温度的实时量了。
同样设置第二个仪表盘:
并且在样式设置
中把显示的单位改一下,两个仪表盘的最终效果如下:
接下来设置折线图:
数据设置
中点击数据表
下拉中选择之前创建的dht11_tsdb_table
,时间轴
选择timestamp
,Y轴
中选择两个度量temperature
humidity
:
大功告成!一个简易的环境检测站就好啦。
当然,这些都是最最基本的设置,比如OTA,权限,以及一些美化工作都还没有涉及。有需要可以参考文档,也是非常方便的。
在使用百度天工云
平台的过程中,个人感觉还是非常方便的,傻瓜操作,既可以满足一般开发者的基本需求,对于复杂的场景也有很好的覆盖,但就必须好好研读文档了。
这是一套最基础的温湿度采集上报系统。在此基础上,还可以增加其他功能,比如设置温度阀值,温湿度达到一定的阀值就触发红外开关控制空调等等,可以做很多事情。