简介: 室内温湿度监控
cf9c627eefc4436b903e87ff9cdfb71b?from=pc.jpg

硬件准备

今天我们在只有20元预算前提下,带领大家完成一次IoT物联网开发之旅!
感谢万能的淘宝,让我们能采购到esp8266开发板,dht11温湿度传感器:

d30e0a148aee4940a3e94060baa568e6?from=pc.jpg

架构方案

我们通过DHT11采集温度,湿度数据,通过 MQTT 协议上报道阿里云 IoT 物联网平台,并通过规则引擎转发到表格存储OTS数据库中,整体技术方案如下:

97e2f6ca62d543e09db81e20f986c972?from=pc.jpg

创建产品和注册设备

我们登录阿里云IoT物联网平台控制台,创建产品温湿度计。

2b1f301d97b2467b881fe479810c8cc0?from=pc.jpg

在温湿度计产品详情的Topic类列表可以看到系统默认创建的Topic,这就是我们用来上报温湿度数据的Topic。

3a96032fede64d2aa75cd069c9359972?from=pc.jpg

接下来,我基于温湿度计产品注册一个设备hz9527,并获取到设备身份三元组。
37bf327e8573451a8a39016b2c890471?from=pc.jpg

配置数据流转 规则引擎

我们在表格存储控制台,预先创建数据库实例iotMsg和iot_thermometer_data表,如下图:

e2a2004f64e14f478576fbcfbbba6343?from=pc.jpg

然后,我们回到IoT物联网平台控制台,配置数据流转规则,把设备上报数据存储到已有的表格存储数据库实例iotMsg中的iot_thermometer_data表中,规则引擎配置如下:

4003c23f8b2d4d55a2765300f693fa19?from=pc.jpg

完整的数据处理SQL:
  1. SELECT *,
  2. deviceName() as deviceName,
  3. timestamp() as time,
  4. timestamp('yyyy-MM-dd HH:mm:ss') as date_time
  5. FROM "/a1k3547Gr0v/+/user/update"
数据转发配置如下: 10f28f25a46440338f0cf2b4737b7915?from=pc.jpg

设备和云端通信Topic和Payload如下:
  1. Topic:
  2. /a1k823sJ0v/hz9527/user/update
  3. Payload:
  4. {
  5.     "temperature":23,
  6.     "humidity":65
  7. }
硬件 开发

Arduino开发依赖C库,如下:

360b909ca43442d3b22389bf5dc4114c?from=pc.jpg
  1. /* 连接WiFi之后,连接MQTT服务器 */
  2. client.setServer(MQTT_SERVER, MQTT_PORT);
  3. client.setCallback(callback);
  4. client.connect(CLIENT_ID, MQTT_USRNAME, MQTT_PASSWD)
设备读取传感器数据,并通过 MQTT 通道发送到云端:
  1. void loop() {
  2.   // 从传感器获取温度,湿度数据
  3.   float temperature = dht.readTemperature();
  4.   float humidity = dht.readHumidity();
  5.   char jsonBuf[128];
  6.   sprintf(jsonBuf, BODY_FORMAT, temperature, humidity);
  7.   // 通过 MQTT 发送数据上云
  8.   if (client.connected()) {
  9.     boolean d = client.publish(PROP_POST_TOPIC, jsonBuf);
  10.   }
  11.   client.loop();
  12.   // delay
  13.   delay(DELAY_TIME);
  14. }
使用 Arduino IDE 烧录程序到 esp8266 开发板:

b7ea2a9125aa44c782ec537da7bd186a?from=pc.jpg

联机运行

烧录完成后,程序启动,我们就可以在IoT控制台的日志服务中查看到上报的数据,如下图:

28be176eccaf415f95eab30b2e867870?from=pc.jpg
db3ec4337b77410d94cf52e239e3f0a4?from=pc.jpg
19a22aa1d8b8440491dbd246b165aa8e?from=pc.jpg
59050064bf944bbaa330d366aa69faae?from=pc.jpg
a1c78319557b421fb5df7cebae9b65a3?from=pc.jpg
a14298648f644d17b5f793b58548b6ef?from=pc.jpg

物模型开发

物模型指将物理空间中的实体数字化,并在云端构建该实体的数据模型。物模型描述产品是什么、能做什么、可以对外提供哪些服务。

a47e282060f147e09a6cd3283c83cdd4?from=pc.jpg

我们在物联网平台控制台,产品详情页面的功能定义,添加温度和湿度两个属性,如下图:

b8a76b32b0164366b7fe16e952c5316d?from=pc.jpg

物模型属性上报的通信Topic,如下图:

3a9f637de2cf4f86aef3352de72304a1?from=pc.jpg

物模型通信Topic和Payload如下:
  1. Topic:
  2. /sys/a1k823sJ0v/hz9527/thing/event/property/post
  3. Payload:
  4. {
  5.     "id":1596087445906,
  6.     "params":{
  7.         "temperature":23,
  8.         "humidity":65
  9.     },
  10.     "method":"thing.event.property.post"
  11. }
我们修改 Arduino 查询中Topic和Payload后,重新烧录,设备上报数据后,在控制台可以查看日志,如下图:
7b647fd3fc814418b18bda80e368b210?from=pc.jpg
c5fd1c3df15149a9beea75a3d986179a?from=pc.jpg
设备详情
56e5b9f1e995451985618da97163472a?from=pc.jpg
物模型数据
3ac91e9acb31495b947c959ff381c65f?from=pc.jpg
运行状态
8c77320e800b4aeda7e7e5f482c908cd?from=pc.jpg
1b63f400b5cd4177826dde0663a2f019?from=pc.jpg
来源:阿里云开发者社区官方账号