从 0 开始搭建 IoT 平台-程序员宅基地

技术标签: MQTT  EMQ  物联网  IoT  

课程背景

物联网应用开发,并不像 Web 开发那样有固定的模式和框架可以学习,开发者往往还是需要从协议这一层慢慢往上搭积木,学习曲线比较陡。本课程结合物联网应用开发常用的设计模式以及作者多年的开发经验,带你从 0 开始搭建一个物联网平台,希望本课程所体现的架构和思路能够帮助你少走弯路、少踩坑。

课程亮点

从 0 开始搭建专属物联网平台

  • 大量实战代码,手把手逐行讲解
  • 使用开源组件,掌握大厂设计思路和实现逻辑

“踩坑”经验沉淀,教你快速「搭积木」

  • 优化物联网应用开发学习曲线
  • 覆盖物联网开发中 80% 的场景以及可能遇到的设计和架构问题
你能收获什么?
  • 学习物联网应用的常用架构和设计模式
  • 学会独立设计和开发可以用于支撑多个物联网应用的物联网平台
  • 学会使用和编写 EMQ X 的插件
  • 获得一套完整的、可运行的物联网平台代码,包括服务端和设备端 SDK
前置知识

学习和熟悉 MQTT 协议的基本概念和特性,对阅读本课程有非常大的帮助。

作者介绍

付强,某物联网 Startup 联合创始人兼 CTO,之前就职于趋势科技,诺基亚中国,在物联网领域从业多年,曾经在德国、硅谷的 Startups 工作过。

适宜人群
  • 物联网应用开发者
  • 物联网架构师
  • 物联网平台开发者
课程目录

avatar

课程内容
开篇词:开发物联网应用,光会 MQTT 还不够

导读

大家好,我是付强,我现在是一家物联网 Startup 的联合创始人兼 CTO,在自己创业之前,我曾经在趋势科技和诺基亚工作过。从 2011 年我在硅谷参与的第一个物联网项目开始算起,到 2015 年开始在物联网方向创业并运营到现在,从 0 到 1,1 到盈利,我在物联网这个行业已经摸爬滚打快 8 年了。

我的上一门课程《MQTT 协议快速入门》详细讲解了 MQTT 协议及其各种特性。在课程的交流群中,读者们也提了很多问题,除了关于 MQTT 协议本身的内容以及特性相关的问题之外,还有很多问题是关于物联网软件设计和架构方面的,比如:

  • 我应该如何管理我的设备和设备的状态?
  • 业务服务端应该怎么接收、处理和存储来自设备的数据?
  • 我的设备数量很多, Broker 端应该怎么架设来确保性能和扩展性?
  • 我的设备处理能力有限,除了使用 MQTT 协议以外,还有没有其他的选择?
  • ……

这让我意识到,单单学会和熟悉 MQTT 协议,离开发和架构一个成熟的物联网产品还是有一段不小的距离,其实仔细想想,这也没有什么不对的:拿 Web 开发做一个类比,我们只学习 HTTP 协议,就能够开发一个成熟的网站或者基于 Web 的服务吗? 答案也是否定的。

回想一下我们是怎么学习 Web 开发的。首先我们会了解一下 HTTP 协议,然后选择一个框架,比如 Java 的Spring Boot、 Python 的 Django、Ruby 的 Rails 等。这些框架提供固定的模式,对软件进行了高度的抽象和分层,比如集成了一些 Web 开发的 Good Practice; 你会知道在 Model 层处理业务的逻辑,用 ORM 来进行数据库操作,在 Controller 层处理输入输出和跳转,在 View 层渲染 HTML 页面,这样一个网站和 Web 服务就能够很快被开发出来,除了性能优化的时候,你几乎不用去想 HTTP 协议的细节。

回到物联网开发,抛开设备端的异构性,单说服务端的架构这块,并不像 Web 开发这块有一个 Well Known 的模式、架构或者开发框架。开发者往往还是需要从协议这一层慢慢往上搭积木,学习曲线还是比较陡的。

我的经历

2015 年中的时候我开始在物联网方向创业,我的第一个决定就是先实现一个供业务系统和设备使用的物联网平台。当时阿里云的 IoT 平台已经上线,由于功能性和定制性方面暂时满足不了我们的需求,最后还是决定自行开发。

我们自行开发的物联网平台实现了设备的管理和接入,设备数据的存储和处理,并抽象和封装了基于 MQTT 协议的数据传输,比如设备的数据上报和服务端的指令下发等,提供了业务服务端使用的服务端 API,和设备端使用的设备端 SDK, 业务服务器和设备不再需要处理数据传输和接入等方面的细节,它们甚至不知道数据是通过 MQTT 协议传输的,这一切对业务服务器和设备都是透明的。

这个平台很好地支持了业务服务端和设备端的快速迭代,也支撑着业务从 0 到 1,从 1 再到盈利。同时,我也在密切地关注着各大云服务商(比如阿里云、AWS 等)提供的 IoT 平台,在一些功能上,我们的设计思路和实现逻辑是非常相似的,同时我也会把在云 IoT 平台上的新功能或者更好的实现集成到自研的物联网平台上。

avatar

在这个过程中,我踩了很多坑,同时也积累了一些物联网平台在架构和设计模式等方面的经验。在这门课程中,我想把这些物联网平台架构以及设计方面的知识和经验分享给大家,这应该可以覆盖大家在物联网开发中 80% 的场景和可能遇到的设计和架构问题

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

如何学习

2019 年的阿里云 IoT 平台功能已经非常强大了,在本门课程中,我们将使用开源的组件,从第一行代码开始,一步步地实现一个具有阿里云 IoT 平台大部分的功能的"物联网平台",在这个过程中穿插讲解在物联网平台开发中可以用到的模式和架构的选择, Pros and Cons,以及一些 Best Practice 等。与《MQTT 协议快速入门》侧重协议内容和理论不同,本门课程包含大量的实战代码,毕竟代码是程序员之间交流的最好语言。

这里给这个"物联网平台"起了一个 Codename: Maque IotHub,简称 IotHub。

本课程属于实战性课程,所以不会再详细地讲解 MQTT 协议的概念和特性了,预先学习和熟悉 MQTT 协议的基本概念和特性,对阅读本课程有非常大的帮助。你可以访问 mqtt.org 查阅协议的文档,也可以通过阅读我的《MQTT 协议快速入门》来进行快速学习。

课程特色

目前物联网开发的的实战课程,特别是成体系的实战课程是很少的,本课程涵盖了从物联网平台到设备端开发的大量场景和设计模式,并不像其他教程那样只是罗列知识点。本课程各节内容之间就像搭积木一样关联性很强,从第一行代码开始搭建一个物联网平台,轻理论而重实战,专注于你无法在互联网上找到参考的实战内容,干货十足。

  • 大量实战代码,从第一行开始手把手讲解
  • 来自实际运营的物联网项目的开发/架构经验
  • 覆盖 80% 物联网开发场景
  • 在互联网其他地方找不到的原创课程

课程介绍

开篇词:开发物联网应用,光会 MQTT 还不够
附录:如何运行 Maque IotHub
第一部分(第 1-1 ~ 1-9 课):设备生命周期管理

作为课程的第一部分,我们会设计和开发 IotHub 的最基础功能,对设备的创建、接入、 上线/下线、 禁用/恢复和删除的整个生命周期进行管理,引入设备的发布订阅权限管理。同时也会把服务端代码和设备端代码的框架搭建起来,便于后续的迭代开发。这部分最后也会讲解如何横向和纵向地扩展 EMQ X

第二部分(第 2-1 ~ 2-6 课):上行数据处理

在课程的第二部分,我们会设计和实现 IotHub 的上行数据处理功能,在这部分我们会学习 EMQ X 的 Hook 机制,以及它如何为 IotHub 的开发带来便利性,同时也会第一次对 IotHub 中的 MQTT 主题名进行规划,把 MQTT 的 Broker-Client 模式转换为 Server-Client 模式。

第三部分(第 3-1 ~ 3-5 课):下行数据处理

在课程的第三部分,我们会设计和实现 IotHub 的指令下发功能,在这部分我们会学习使用 EMQ X 的监控管理 API,并对指令下发的主题进行规划,实现可靠的指令下发流程。

第四部分(第 4-1 ~ 4-15 课):进一步抽象

在第四部分的课程中,我们会利用第二部分和第三部分实现的上行和下行通道,来实现物联网应用中一些常见的功能,比如 OTA 升级、设备分组等。我们会学习如果将这些功能抽象出来放入 IotHub 中,使多个物联网应用可以通过 IotHub 复用这些功能。最后我们还会学习和实现在各大云服务商提供的 IoT 平台中非常常见的设备影子功能。

第五部分(第 5-1 ~ 5-6 课):扩展 EMQ X

在前面的课程中,我们使用大量的 EMQ X 自带插件功能来完善 IotHub, 在这部分课程中,我们将学习如何编写一个 EMQ X 插件。通过这部分的学习,读者将会掌握根据自己的业务逻辑来扩展 EMQ X 的能力。

第六部分(第 6-1 ~ 6-2 课):CoAP

在课程的最后一部分,我们会将目光暂时从 MQTT 上移开,讨论 MQTT 在某些场景下的缺陷,并学习另外一种物联网协议 CoAP。最后我们会将 CoAP 无缝地接入现有 IotHub 的设备体系。

适合阅读的人群

本课程适合以下人群阅读:

  • 物联网应用开发者
  • 物联网架构师
  • 物联网平台开发者

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

课程寄语

在我的另一篇达人课《MQTT 协议快速入门》,我尝试着用一门课来解答大家在物联网应用设计和开发上遇到的问题,在交流中发现,大家的问题不只局限在协议上。这是也促成我编写这篇课程的原因之一。

物联网应用开发不像 Web 开发那样有固定的模式和框架可以学习,本课程实现阿里云 Iothub 的部分功能,并结合我在设计和实现一个已上线运行多年的物联网平台的经验,来阐述在物联网应用中常用的设计模式和思路,目的也是希望大家在学习本课程之后,可以少走点弯路、少踩点坑。如果你不需要实现一个物联网平台(比如直接使用云服务商提供的物联网平台)也没关系,这门课所体现的架构和思路也能帮助你更好地设计物联网应用

我希望读者在学习完本课的内容后,能够将学到的设计思路和模式运用到实际工作中去,希望本课程能够解答你在物联网应用开发中能遇到大部分设计和实现的问题。毕竟 5G 时代已经来临,物联网的发展势头会越来越快。

学完后的收获

  • 熟悉物联网应用的常用架构和设计模式
  • 学会独立设计和开发可以用于支撑多个物联网应用的物联网平台
  • 学会使用和编写 EMQ X 的插件
  • 获得一套完整的、可运行的物联网平台代码,包括服务端和设备端 SDK
第 1-1 课:准备工作台

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

安装组件

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

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: M
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/valada/article/details/97698090

智能推荐

异步fifo设计及验证verilog代码_异步fifo验证-程序员宅基地

文章浏览阅读337次。异步fifo设计及验证verilog代码_异步fifo验证

Python入门学习笔记第十二章——游戏制作之武装飞船~~~_飞船的位图-程序员宅基地

文章浏览阅读847次,点赞2次,收藏9次。该整个项目了在前面十一章的学习中,我们已经对Python这门语言有了一个比较基本的认识和了解,那么接下来,我们会通过一些项目的学习,来加深和拓展我们对Python的认知。那么我们首先就是尝试做一个游戏——武装飞船。因为Python做游戏我也是第一次,所以要是一步步学着做完了,估计回来再写也写不清楚,就一步步来,一步步写吧。准备工作首先,我们需要下载pygame,这里下载的方法有很多,我们可以之间在终端输入pip install pygame就可以实现下载,也可以在官网上下载安装,这里其实还是很容易的_飞船的位图

LeetCode 热题 HOT 100——101. 对称二叉树-程序员宅基地

文章浏览阅读83次。题目:给定一个二叉树,检查它是否是镜像对称的。例如,二叉树[1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2/ \ / \3 4 4 3但是下面这个[1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/symmetric-tree思路:如...

使用element中的el-upload自定义上传文件_el-upload response-程序员宅基地

文章浏览阅读4.7k次。首先,我的需求是通过导入excel文件实现批量添加数据,因为使用的是开源项目,前端使用element+vue来实现,所以上传文件就使用element的上传组件el-upload来实现。因为我要在上传文件的同时添加其它参数并且这个参数还是需要判断的,原生的el-upload就不支持这个操作,所以我使用它的http-request属性,实现自定义上传文件。我后端使用的是springboot 上传框架选择的是easypoi,感兴趣的可以一起探讨一下。html代码:<el-upload cla_el-upload response

Conclusions about Deep Learning with Python-程序员宅基地

文章浏览阅读248次。 Conclusions about Deep Learning with Python Last night, I start to learn the python for deep learning research. It really confused me at the beginning. So, here is some conclusions about the hard ..._np.save

jquery在线引用-程序员宅基地

文章浏览阅读4.8k次,点赞4次,收藏3次。直接引如下的即可<scripttype="text/javascript"src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>_jquery在线引用

随便推点

基于ARM9 编写LED汇编程序_arm9.芯片程序-程序员宅基地

文章浏览阅读1k次。下定决心考研了,把之前的写的笔记都整理整理^-^!ARM芯片启动过程(大多数芯片从0地址启动)1)NOR启动: 1.NOR Flash的基地址为0,片内RAM为0x4000 0000;2.CPU读出NOR上的第一个指令(前4字节),执行CPU继续读出其他指令执行。2)Nand启动:1.片内4K RAM基地址为0,NoR Flash 不可访问; 注:stepping stone是三星MCU的一种启动..._arm9.芯片程序

2021-01-24-程序员宅基地

文章浏览阅读212次。学什么东西都好,可能对于别人来说确实是迟了,但是对于自己来说,永远都不会算迟,增值自己应该是一辈子都在做的事情。我恰好也是大三,专业软件工程,主要做移动开发,现在是在做Android开发。我学校普通2A,环境不怎么样,师资不怎样。对我来说,基本所有编程得知识都是来自于书本和网络。既然现在开始还没有迟,那么就让我分享下我的想法,题主参考下,按重要程度降序排列。**① 强迫自己解决问题。**很多时候,我们的思维都是,学习、不懂、太难了、不想学、放弃。但是实际上问题都没有想象中的难,如果我们一开始就怕太难

最新Vue2.0+组件开源项目库集合_vue2.0项目推荐-程序员宅基地

文章浏览阅读573次。UI组件element ★11612 - 饿了么出品的Vue2的web UI工具套件Vux ★7503 - 基于Vue和WeUI的组件库iview ★5801 - 基于 Vuejs 的开源 UI 组件库mint-ui ★5517 - Vue 2的移动UI元素vue-material ★2790 - 通过Vue Material和Vue 2建立精美的app应用muse-ui ★2..._vue2.0项目推荐

【解决错误】ImportError: No module named seaborn_no module named seaborn命令行怎么解决-程序员宅基地

文章浏览阅读7k次,点赞2次,收藏3次。1. pip安装:pip install seaborn2. conda安装:conda install seaborn_no module named seaborn命令行怎么解决

超详细的大数据学习资源大全!_大学生大数据资源库动画资源-程序员宅基地

文章浏览阅读270次。当今社会,可以说进入了大数据时代,爆炸性的数据信息给传统的计算技术以及信息技术带来术挑战。大数据技术正在助力公众、企业打开DT世界的大门。学习大数据不仅前景好,而且工资高。为了帮助程序员更好、更深入的了解大数据,w3cschool整理了GitHub Awesome Big Data资源,供大家参考。本资源类型主要包括:大数据框架、论文等实用资源集合。1.关系数据库管理系统(RDBMS) ..._大学生大数据资源库动画资源

matlab在电力系统中的应用 当当,MATLAB在电力系统中的应用解析.ppt-程序员宅基地

文章浏览阅读619次。第4章 电力系统主要元件等效模型  4.1 同步发电机模型4.1.1 同步发电机等效电路  SimPowerSystems中同步发电机模型考虑了定子、励磁和阻尼绕组的动态行为,经过Park变换后的等值电路如图4-1所示。 图4-1 同步发电机等效电路图 (a) ?d轴等效电路;(b) ?q轴等效电路   该等值电路中,所有参数均归算到定子侧,各变量下标的含义如表4-1所示。 4.1.2..._电机测试信号分配器在matlab里叫什么