环境监控场景的 IoT 物联网开发实战

一、准备工作

1.1 硬件:

本次实战活动需要的硬件列表如下:

在这里插入图片描述

1.2 开发软件:
  • Arduino IDE(NodeMCU 硬件设备集成开发工具);
  • Node.js(在电脑上模拟 IoT 设备,方便没有硬件的同学开发体验);
  • Sublime Text(编辑器)。
1.3 云资源

我们本次 IoT 物联网开发实战涉及以下云资源的使用:

  • 物联网平台 IoT :IoT 设备上云接入平台;
  • 表格存储 OTS :非关系型数据库;
  • 函数计算 FC :Serverless 计算平台;
  • 数据可视化 DataV :数据可视化产品;
  • 钉钉群机器人 :群机器人是钉钉群的高级扩展功能。群机器人可以将第三方服务的信息聚合到群聊中,实现自动化的信息同步。

二、MQTT 协议

MQTT(消息队列遥测传输) 是基于 TCP/IP 协议栈而构建的支持在各方之间异步通信的消息协议。MQTT 在空间和时间上将消息发送者与接收者分离,因此可以在不可靠的网络环境中进行扩展。虽然叫做消息队列遥测传输,但它与消息队列毫无关系,而是使用了发布和订阅(Pub/Sub)的模型。

MQTT 是一种轻量级的、灵活的网络协议,致力于为 IoT 开发人员实现适当的平衡:

  • 这个轻量级协议可在严重受限的设备硬件和高延迟/带宽有限的网络上实现;
  • 它的灵活性使得为 IoT 设备和服务的多样化应用场景提供支持成为可能。

在基于阿里云 IoT 物联网平台进行开发的场景下,设备与 IoT 平台使用 MQTT 协议通信,设备相当于 Client 端,IoT 平台相当于 Broker。

在这里插入图片描述

设备和 IoT 平台建立连接的 Connect 过程如下:

在这里插入图片描述

Connect 消息内容参数如下:

在这里插入图片描述

其中 clientId、username、password 由设备三元组(productKey,deviceName,deviceSecret)按照规则生成,具体规则如下:

在这里插入图片描述

官方文档可戳这里。

连接建立后,我们就可以 Publish 设备端采集的数据到 IoT 云平台,同时可以从 IoT 云平台接收 Subscribe订阅的 Topic 消息。

三、IoT 物联网平台

IoT 物联网平台是阿里云针对物联网领域开发人员推出的一款设备管理平台。高性能 IoT Hub 实现设备与云端稳定通信,全球多节点部署有效降低通信延时,多重防护能力保障设备云端安全。此外,物联网平台还提供丰富的设备管理功能、稳定可靠的数据存储能力,以及规则引擎。使用规则引擎,您仅需在 Web 上配置简单规则,即可将设备数据转发至阿里云其他产品,获得数据采集、数据计算、数据存储的全栈服务,真正实现物联网应用的灵活快速搭建。

阿里云 IoT 平台支持的 MQTT 控制报文如下:

在这里插入图片描述

阿里云 IoT 物联网平台的整体产品架构:

在这里插入图片描述

3.1 IoT Hub

IoT Hub 帮助设备连接阿里云 IoT 服务,是设备与云端安全通信的数据通道。IoT Hub 支持 PUB/SUB 与 RRPC 两种通信方式,其中 PUB/SUB 是基于 Topic 进行的消息路由。

IoT Hub 具有下列特性:

  • 高性能扩展:支持线性动态扩展,可以支撑十亿设备同时连接;
  • 全链路加密:整个通信链路以 RSA、AES 加密,保证数据传输的安全;
  • 消息实时到达:当设备与 IoT Hub 成功建立数据通道后,两者间将保持长连接,以减少握手时间,保证消息实时到达;
  • 支持数据透传: IoT Hub 支持将数据以二进制透传的方式传到自己的服务器上,不保存设备数据,从而保证数据的安全可控性;
  • 支持多种通信模式:IoT Hub 支持 RRPC 和 PUB/SUB 两种通信模式,以满足您在不同场景下的需求;
  • 支持多种设备接入协议:支持设备使用 CoAP、MQTT、HTTPS 协议接入物联网平台。
3.2 设备管理

物联网平台为您提供功能丰富的设备管理服务。包括:生命周期、设备组、设备影子、固件升级、物模型、数据解析、在线调试、远程维护、数据存储、实时监控等。不同版本的物联网平台设备管理功能有所不同,具体请参考产品规格。

3.3 规则引擎

当设备基于 Topic 进行通信时,您可以编写 SQL 对 Topic 中的数据进行处理,然后配置转发规则将数据转发到其他 Topic 或阿里云服务上。例如:

  • 可以转发到 RDS、Table Store、TSDB 中进行存储;
  • 可以转发到 DataHub 中进而使用 Streamcompute 进行流计算,使用 MaxCompute 进行大规模离线计算;或转发到函数计算进行事件计算;
  • 转发到消息队列 MQ 实现高可靠消费数据;
  • 可以将 Topic 中的数据处理转发到另一个 Topic 中实现 M2M 通信。
3.4 安全认证&权限策略

安全是 IoT 的重要话题。阿里云物联网平台提供多重防护保障设备云端安全。

物联网平台为每个设备颁发唯一证书,设备使用证书进行身份验证连接 IoT Hub。

四、技术架构

我们本次 IoT 物联网开发实战整体技术架构如下:

在这里插入图片描述

温湿度传感器设备(DHT11+NodeMCU)使用 MQTT 协议接入 IoT 物联网平台,通过规则引擎配置,把全量数据存储到表格存储数据库,再使用数据可视化产品 DataV 呈现出来一张实时监控大屏;同时把异常数据流转到函数计算,再推送到钉钉群里,实时接收异常告警。

五、设备端开发

5.1 Arduino 硬件开发
ESP8266 开发板管理

在 Ardunio IDE 首选项窗口中的 附加开发板管理器网址 添加如下 URL,保存后重启 Arduino IDE。

代码语言:javascript
复制
https://arduino.esp8266.com/stable/package_esp8266com_index.json

如图:

在这里插入图片描述

在 Ardunio IDE 菜单栏选择工具->开发板->开发板管理器,在搜索框输入 esp8266,选择 2.4.1 版本并进行安装。

在这里插入图片描述

项目依赖软件库

本次项目依赖如下 C 库(可以通过附录 Github 地址获取),下载 libs.zip 解压到 Arduino libraries 目录,如图:

在这里插入图片描述

针对 PubSubClient 库,我们需要修改一些 MQTT 连接的默认参数,具体如下:

在这里插入图片描述

至此我们就完成了 Arduino 项目依赖库的安装和参数修改。

Arduino IDE 使用

我们使用 NodeMCU 1.0(ESP-12E Module)固件,Arduino IDE 的 Tools 参数设置如下:

编译和烧录

在这里插入图片描述

硬件接线

我们把 DHT11 模块的 Data 针脚和 NodeMCU 的 D7 针脚连接,电源+针脚连接 3V3 的针脚,电源-针脚连接 GND 针脚。

在这里插入图片描述

代码部分就不贴在这了,

有兴趣的同学

可以直接扫描下方二维码继续阅读

??

毫无疑问 IoT 物联网开发将是继移动互联网之后又一个新浪潮,企业对物联网开发工程师的需求也会随之爆发,普通的程序员如何快速转向物联网开发?

本场 Chat 将围绕 IoT 物联网的硬件传感器数据采集,数据通过 MQTT 上传,云端数据存储,数据可视化展示,异常告警实时推送串联一个完整的环境监控实战案例,手把手带你进入 IoT 开发领域。

本场 Chat 包含三个部分(2019-1-16发布)

1. IoT 物联网开发基础介绍;

2. 硬件数据采集开发实战;

3. 云端数据存储,可视化,实时告警开发实战。

适宜人群:

- 对物联网平台入门感兴趣的开发人员;

- 渴望掌握物联网实际开发经验的人员。