出生于互联网时代的咱们,见证了智能手机和我的电脑经过计算机网络互相进行链接,把每一个人紧密地链接在一块儿,造成了一个地球村。而今,咱们即将迈入5G时代,在通讯技术不断发展的今天,链接到互联网的将不只是昂贵精密的手机电脑,身边的各类物体也能够经过物联网链接到云端,由物联网平台管理上云的物联网设备,使用者经过浏览器,小程序等接收物发出的通知而且完成想过操做。物联网不只将物与物链接在一块儿,也将物与人紧密地链接在一块儿,让生活更加智慧便捷。这,就是即将到来的AIOT时代。
本次实验主要经过自制一个家庭物联网温湿度检测模块,学习具体的基于MQTT协议的物联网设计制做。在应用的过程当中,也加深了对计算机网络各层次之间的理解。
硬件设备原代码附于文末。javascript
云端服务所有使用阿里云平台的服务,阿里云的服务具备稳定性强,配置便捷的特色,方便部署物联网应用,云端整体应用架构以下。
java
云端物联网平台使用阿里云物联网平台。阿里云物联网平台为设备提供安全可靠的链接通讯能力,向下链接海量设备,支撑设备数据采集上云;向上提供云端API,服务端经过调用云端API将指令下发至设备端,实现远程控制。提供设备接入,设备管理,安全能力和规则引擎。其中规则引擎用来完成数据转发,负责沟通数据在设备间,设备与数据库间,设备与服务器间流转。node
Web服务器使用阿里云服务器ECS,云服务器(Elastic Compute Service,简称ECS)是阿里云提供的性能卓越、稳定可靠、弹性扩展的IaaS(Infrastructure as a Service)级别云计算服务。云服务器ECS免去了您采购IT硬件的前期准备,让您像使用水、电、自然气等公共资源同样便捷、高效地使用服务器,实现计算资源的即开即用和弹性伸缩。阿里云ECS持续提供创新型服务器,解决多种业务需求,助力业务发展。git
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通信协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优势在于,能够以极少的代码和有限的带宽,为链接远程设备提供实时可靠的消息服务。做为一种低开销、低带宽占用的即时通信协议,使其在物联网、小型设备、移动应用等方面有较普遍的应用。github
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特色使它适用范围很是普遍。在不少状况下,包括受限的环境中,如:机器与机器(M2M)通讯和物联网(IoT)。其在,经过卫星链路通讯传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已普遍使用。web
实现MQTT协议须要客户端和服务器端通信完成,在通信过程当中,MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者能够同时是订阅者。数据库
MQTT传输的消息分为:主题(Topic)和负载(payload)两部分:小程序
在此次实验中,硬件设备和阿里云服务器做为客户端订阅和发布相关话题,阿里云物联网平台做为消息代理服务器后端
一个使用MQTT协议的应用程序或者设备,它老是创建到服务器的网络链接。客户端能够:微信小程序
(1)发布其余客户端可能会订阅的信息;
(2)订阅其它客户端发布的消息;
(3)退订或删除应用程序的消息;
(4)断开与服务器链接。
MQTT服务器以称为"消息代理"(Broker),能够是一个应用程序或一台设备。它是位于消息发布者和订阅者之间,它能够:
(1)接受来自客户的网络链接;
(2)接受客户发布的应用信息;
(3)处理来自客户端的订阅和退订请求;
(4)向订阅的客户转发应用程序消息。
MQTT报文由三部分组成
每一个MQTT报文都包含一个固定报头,下图描述了固定报头的格式
其中MQTT控制报文的类型决定了这个报文是Connect,仍是Disconnect,仍是Subscribe,7到4位不一样数值表明的数字以下
它在固定报头和负载之间。可变报头的内容根据报文类型的不一样而不一样。可变报头的报文标识符(Packet Identifier)字段存在于在多个类型的报文里。
有效载荷搭载报文段的有效内容,好比在PUBLISH中,有效载荷就是硬件设备要发送到物联网平台的内容。在硬件设备做为客户端链接到服务端使用Connect时,有效载荷就是用户名和密码等内容。
硬件设备端须要完成温湿度数据的读取,wifi的链接,MQTT服务端的链接和数据的上报。由于任务比较简单,不使用操做系统,直接使用裸机开发。MQTT报文须要用JSON格式收发,因此发送数据以前须要自行封装成JSON格式。以前分析过MQTT协议,这里为了使用方便,咱们使用开源的Paho MQTT协议栈,可完成多个平台间的切换,该代码不只可以使用阿里云物联网平台,也适用于其余物联网平台。详细步骤为:
1.硬件初始化
2.链接WIFI,TCP/IP协议创建与阿里云服务器创建链接
3.使用MQTT协议发送CONNECT报文链接阿里云物联网平台
4.大循环中读取温湿度传感器的数据,而且封装成JSON格式使用MQTT协议的PUBLISH向指定话题发布消息,将消息发送到阿里云物联网服务器
JSON格式数据以下
{ "id":"12345", "method":"thing.event.property.post", "params":{ "LEDSwitch":当前LED灯的状态, "CurrentHumidity":当前湿度, "CurrentTemperature",当前温度 } }
大循环主要代码以下
while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ HAL_Delay(1000); if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)) { KEY_STATUS = 1; } else{ KEY_STATUS = 0; } DHT11_Read_Data(&temperature,&humidity); cJSON * pJsonRoot = NULL; pJsonRoot = cJSON_CreateObject();// cJSON_AddStringToObject(pJsonRoot, "id", "12345");// cJSON_AddStringToObject(pJsonRoot, "method", "thing.event.property.post");// cJSON * pJsonChild = cJSON_CreateObject();// cJSON_AddNumberToObject(pJsonChild, "LEDSwitch", KEY_STATUS); cJSON_AddNumberToObject(pJsonChild, "CurrentHumidity",humidity); cJSON_AddNumberToObject(pJsonChild, "CurrentTemperature",temperature); cJSON_AddItemToObject(pJsonRoot, "params", pJsonChild);// char * lpJsonStr = cJSON_Print(pJsonRoot); //cJSON_Delete(pJsonChild); cJSON_Delete(pJsonRoot);// u1_printf("time:%s\r\n",lpJsonStr); IOT_baidu_connect_publish(P_TOPIC_NAME,lpJsonStr); free(lpJsonStr); }
链接实物图
链接物联网平台须要先建立设备,根据这个设备的证书信息,和密码。设备可经过一个三元组证书信息链接到云服务器。
阿里云物联网服务器做为设备的接收和中转站,管理全部经过MQTT协议发送和接收的信息。
将Web服务器和硬件设备定义成两个设备,经过设置规则引擎,完成数据的接收和转发。
下图为规则引擎设计
使用node-red,node-red是一种图形化的后端处理工具,适用于物联网服务等小型服务端应用搭建,不须要写代码,部署比较快捷。
使用node-red主要完成如下几个功能
下图为在node-red上完成的配置,没有写一点代码,点击部署后完成部署,即可以在网页上看到
打开硬件设备,待其链接到阿里云物联网平台,而后进入如下网址
截至这篇文章提交,我使用的阿里云服务器免费七天试用期已到,应该不可访问。。。
就能够看到实时的温湿度信息。
湿度比较大的两个尖峰是我用嘴吹了两口气。人工增长了湿度。
至此完成了基于MQTT应用层协议的物联网家庭温湿度监测系统的设计与制做。
此次基于MQTT应用层协议的物联网家庭温湿度监测系统的实验过程当中,我查询了不少资料,解决了很多bug。主要锻炼了学习新知识而且运用新知识的能力,在此过程当中运用到了嵌入式,服务器先后端等知识。经过物联网实验,对计算机网络各个层次的理解和应用更加深入透彻,充分理解了TCP/IP协议在实际计算机网络的应用中起到了什么样的做用。深刻学习了MQTT协议,初步掌握了物联网产品的架构和开发流程,为之后制做物联网相关应用打下了基础。
本实验初步打通了物联网的整个数据链路,经过该实验,下一步能够完成更加复杂智能的物联网应用,好比实时操控家里的家电,家中电器经过检测环境变化自动开关机。添加微信小程序访问Web服务器,从而监控物联网设备等功能。
总之,在5G时代即将到来之际,物联网及其应用将迎来新的发展机遇,值得咱们好好研究。
硬件设备端stm32源码
https://github.com/FranHawk/TemHumIViewer.git