收起

从 0 开始搭建 IoT 平台

代码实操,揭秘大厂 IoT 平台设计之道

付强 · 物联网创业者兼 CTO
已发布 46 篇 共 46 篇
1

开发物联网应用,光会 MQTT 还不够

试读
2

如何运行 Maque IotHub

3

准备工作台

试读
4

设备注册(一)

试读
5

设备注册(二)

试读
6

设备注册(三)

试读
7

设备在线状态管理(一)

8

设备在线状态管理(二)

9

设备禁用与删除

10

设备权限管理

11

加一点扩展性

12

选择一个可扩展的上行数据处理方案

13

功能设计

14

实现(一)

15

实现(二)

16

设备状态上报

17

时序数据库

18

选择下行数据处理方案

19

功能设计

20

设备端实现

21

服务端实现(一)

22

服务端实现(二)

23

RPC 式调用(一)

24

RPC 式调用(二)

25

设备数据请求

26

NTP 服务

27

设备分组——功能设计

28

设备分组——服务端实现

29

设备分组——设备端实现

30

设备间通信

31

OTA 升级——功能设计

32

OTA 升级——服务端实现

33

OTA 升级——设备端实现

34

设备影子概览

35

设备影子——服务端实现

36

设备影子——设备端实现

37

IotHub 状态监控

38

EMQ X 的插件系统

39

我们会用到的 Erlang 特性

40

搭建开发和编译环境

41

编写 emqx-rabbitmq-hook(一)

42

编写 emqx-rabbitmq-hook(二)

43

使用 emqx-rabbitmq-hook

44

CoAP 简介

45

IotHub 接入 CoAP

46

我们学到了什么?

准备工作台

在本课中,我们将安装开发物联网平台时使用到的组件,并把物联网平台的开发环境搭建起来。

安装组件

首先在开发机上面安装开发需要的组件。

MongoDB

MongDB 是一个基于分布式文件存储的数据库,我们会把 MongoDB 作为物联网平台主要的数据存储工具。

可以在这里找到 MongoDB 的安装文档,根据文档在对应的系统上安装和运行 MongoDB。

Redis

Redis 是一个高效的内存数据库,物联网平台会使用 Redis 来实现缓存和简单的队列功能。

请根据这里的文档,在对应的系统上安装和运行 Redis。

Node.js

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,我们会使用 Node.js 来开发物联网平台的主要功能。

请根据这里的文档在对应的系统上面安装 Node.js。

RabbitMQ

RabbitMQ 是使用 Erlang 编写的 AMQP Broker,物联网平台使用 RabbitMQ 作为队列系统实现物联网平台内部以及物联网平台到业务系统的异步通信。

请根据这里在对应的系统上按照和运行 RabbitMQ。

EMQ X

EMQ X 是一个使用 Erlang 编写的 MQTT Broker,物联网平台使用 EMQ X 来实现 MQTT/CoAP 协议接入,并使用 EMQ X 的一些高级功能来简化和加速开发。

可以在这里找到 EMQ X 的安装文档,安装完毕之后,在控制台运行:

<EMQ X 安装目录>/bin/emqx start

如果命令行输出为 emqx 3.2.0 is started successfully! 那说明 EMQ X 已经成功安装并运行了。

本课程在编写时,使用的版本为EMQ X Broker V 3.2.0。 EMQ X Enterprise为 EMQ X 的付费版本,注意不要安装错了。

那么开发物联网平台需要的组件就安装完了,接下来我们简单介绍一下物联网平台的各个组成部分。

首先给这个物联网平台取一个代号,就叫它 Maque IotHub 吧,寓意麻雀虽小,五脏俱全。 接下来我们把后续课程中会出现的实体都定义一下:

  • Maque IotHub:我们将要开发的物联网平台,简称 IotHub。
  • Maque IotHub Server API:Maque IotHub 的服务端 API,以 Restful API 的形式将功能提供给外部业务系统调用,简称 Server API。
  • Maque IotHub Server:Maque IotHub 的服务端,包含了 Server API 和主要的 IotHub 服务端功能代码,简称为 IotHub Server。
  • 业务系统:指实现特定物联网应用服务端的业务逻辑系统,它通过调用 Maque IotHub Server API 的方式来控制设备/使用设备上报的数据,Maque IotHub 为它屏蔽了和设备交互的细节。
  • Maque IotHub DeviceSDK: Maque IotHub 提供的设备端 SDK,设备通过调用 SDK 提供的 API 接入 Maque IotHub,并和业务系统进行交互,简称 DeviceSDK。
  • 设备应用代码:实现设备具体功能的代码,比如打开灯、在屏幕上显示温度等,它调用 Maque IotHub DeviceSDK 来使用 Maque IotHub 提供的功能。

在后续的课程中就用 IotHub 来指代我们开发的这个物联网平台,用 DeviceSDK 来指代设备端的 SDK 代码,用 IotHub Server 来指代物联网平台的服务端代码。

项目结构

本课程会使用两个 Node.js 的项目来进行开发,分别是物联网平台的服务端代码 IotHub Server 和设备端代码 DeviceSDK。

Maque IotHub Server

服务端代码以一个 Express 项目作为开始, Express 是一个 Node.js 轻量级的 Web 开发框架,非常适合开发 Restful API,项目的结构如下图所示:

avatar

这个项目包含了 Maque IotHub Server API 以及 Maque IotHub 服务端的一些其他功能。

Maque IotHub DeviceSDK

测试 MQTT 连接

首先我们来验证一下 EMQ X Broker 是否已经配置正确,并可以接受 MQTT 连接了。

同样地,这里使用一个 Node.js 项目开发 Maque IotHub DeviceSDK 代码。

package.json 中添加 MQTT 的 Node.js 库:

"dependencies": {
    "mqtt": "^2.18.8"
  }

然后运行 npm install

我们可以写一小段代码来测试一下 MQTT 连接:

//test_mqtt.js
var mqtt = require('mqtt')
var client = mqtt.connect('mqtt://127.0.0.1:1883')
client.on('connect', function (connack) {
    console.log(`return code: ${connack.returnCode}`)
    client.end()
})

如果不出意外的话,控制台会输出:return code: 0

重新组织代码

为了方便设备应用代码的开发, DeviceSDK 会把和 MQTT 相关代码,以及同Maque IotHub Server交互的相关的代码进行封装,这里我们实现一个类 IotDevice作为 DeviceSDK 的入口:

//iot_device.js
"use strict";
var mqtt = require('mqtt')
const EventEmitter = require('events');

class IotDevice extends EventEmitter {
    constructor(serverAddress = "127.0.0.1:8883") {
        super();
        this.serverAddress = `mqtts://${serverAddress}`
    }

    connect() {
        this.client = mqtt.connect(this.serverAddress, {
            rejectUnauthorized: false
        })
        var self = this
        this.client.on("connect", function () {
            self.emit("online")
        })
        this.client.on("offline", function () {
            self.emit("offline")
        })
        this.client.on("error", function (err) {
            self.emit("error", err)
        })
    }

    disconnect() {
        if (this.client != null) {
            this.client.end()
        }
    }
}


module.exports = IotDevice;

这段代码做了这几件事。

  • 封装了 MQTT Client 的 connect 和 disconnect 。
  • 通过设定 MQTT 连接地址为 mqtts://127.0.0.1:8883 的方式,在传输层使用 SSL。 EMQ X 默认使用一个自签署的的证书,所以我们需要设定 rejectUnauthorized: false
  • 通过 Events 和设备应用代码进行交互。

那么使用 IotDevice 类进行连接设备应用代码如下:

var device = new IotDevice()
device.on("online", function () {
    console.log("device is online")
    device.disconnect()
})
device.on("offline", function () {
    console.log("device is offline")
})
device.connect()

Maque IotHub DeviceSDK 项目结构如下图所示:

avatar

  • 在 sdk 目录中是 DeviceSDK 的代码。
  • 在 samples 目录中是调用 DeviceSDK 的示例代码。

工作台准备完毕! 准备好开发环境以后,下面就开始实现第一个功能:设备注册

推荐阅读 👉《从 0 开始搭建 IoT 平台》

注意!!! 为了方便学习和技术交流,特意创建了读者群,入群方式放在 第 1-5 课 文末,欢迎已购本课程的同学入群交流。

互动评论
评论
guoguo5 个月前
不要一来就讲安装一大堆东西。起码有个架构图,从宏观上知道有哪些东西,分别作用是什么,然后讲到具体环节在来讲如何安装使用。
评论
徐洋2 年前
图看不到
评论
阿金2 年前
我觉得可以做个架构原理图或流程图,先让大家从整体上对每个模块有清淅的认识.再细分。上来就是nodejs都不知道干嘛,我就用python怎么整,不喜欢mongodb怎么替换。
评论
关注提示×
扫码关注公众号,获得课程更新动态!