接上期文章:《入住阿里云MQTT物联网平台》

我们已经获取到阿里云设备三元组信息,并且做好了消息转发“云产品流转”设置,今天就来使用ESP32连接阿里云,试试用MQTT开关板载LED是什么感觉。

相关资源下载:ESP32连接阿里云MQTT物联网平台的Arduino支持库及示例代码

一、硬件:ESP32最小系统板加一根安卓手机USB数据线,板载按键和LED,USB取电,不需要额外电源连接,网上商店一大把,便宜易得,非常适合本实验项目。图片如下:

二、软件:Arduino软件,设置好ESP32编程环境,下载相关支持库。(相关教程和资源网上很多,请自行百度。)本文用到的库包括:Crypto(使用到库文件:SHA256.h,用于阿里云MQTT连接密码运算);pubsubclient-2.8(使用到库文件: PubSubClient.h,用于MQTT协议通信);ArduinoJson(使用到库文件ArduinoJson.h,用于JSON数据解析);由于阿里官方的MQTT连接库用起来不太顺手(个人习惯吧),自己照着CPP文件进行修改,做成一个Class,加上我喜欢的中文注释,自我感觉还不错。文前链接包括所有支持库及实验代码,感兴趣可以前往下载。下载资源包括两个文件夹,直接复制到arduino代码文件夹下。如果你libraries目录下已经存在相关支持库,可以不复制相应库文件。

  • 程序结构说明。

本程序使用arduino编写,MQTT被封装成一个Class:

#ifndef ALIMQTT_H#define ALIMQTT_H#include <WiFi.h>#include <PubSubClient.h>#include <SHA256.h>#include <ArduinoJson.h>class ALIMQTT{……};#endif

代码太长,这里节约一点版面,需要的按文前指示下载,花钱不多,支持一下未偿不可。

使用的时候先申明MQTT连接对象:ALIMQTT mqtt;

在程序入口setup()过程中首先初始化串口,连接WIFI,成功后初始化MQTT对象,传入设备三元组信息,设置Callback回调函数。初始化程序如下:

uint8_t led=2;//LED--D2(GPIO2)
void setup() {uint8_t Index;Serial.begin(115200);pinMode(led, OUTPUT); //设置LED引脚为输出模式以便控制LEDWiFi.mode(WIFI_STA);WiFi.begin("ShuFang","12345678");//这里请使用你自己的WIFI名和密码。Index=60;Serial.print("\r\n连接WIFI...");while(WiFi.status()!=WL_CONNECTED && Index!=0){Serial.print(".");Index--;delay(500);digitalWrite(led,not digitalRead(led));//LED慢速闪烁表示正在连接WIFI.}if(Index!=0){Serial.println("成功!");digitalWrite(led,1);//WIFI连接成功LED常亮.mqtt.begin("a1lkLsmt6QI","ESP32_LED","719bc6e69907e1568472e6c16d0719f3");//这里的参数请使用你自己在阿里云平台申请的设备三元组相应信息。mqtt.setCallback(callback);//这里设置回调函数,以便对接收信息进行处理。}else{digitalWrite(led,0);//WIFI连接失败LED熄灭.Serial.println("失败!");}
}

这里要特别注意:

1、请确认你使用模块LED连接引脚的IO编号,本人LED引脚GPIO2。

2、如果你使用电脑串口调试助手,请设置相同的波特率。

3、请修改程序中的WIFI名称密码与你自己家里的WIFI一致。

4、请注意mqtt.begin()传入的参数分别表示阿里设备三元组:productKey、deviceName、deviceSecret顺序不能搞错了,请修改为你自己的设备信息。

5、回调函数格式是固定的(函数名可以更改,但须与mqtt.setCallback(callback);一致):

void callback(char *topic, byte *payload, unsigned int length){……}

回调传入三个参数:topic为订阅主题Topic;payload为订阅收到的信息体,即消息本身;length为信息体字节数。

在主循环loop()中,加入语句mqtt.loop();目的是MQTT心跳保持和接收订阅消息。如果没有这行代码,MQTT连接不会接收到订阅消息,也不会产生回调事件。

void loop() {mqtt.loop();
}

MQTT远程控制LED代码在回调函数中完成:

void callback(char *topic, byte *payload, unsigned int length){JsonVariant params;payload[length]='\0';//写入一个字符串结束标志,防止后续处理时溢出。StaticJsonDocument<4096>doc;DeserializationError error = deserializeJson(doc, payload);//反序列化JSON数据,注意其中的4096请根据自己信息长短进行合理设置。if(!error){mqttCommand(doc.as<JsonVariant>());}
}
void mqttCommand(JsonVariant params){if(params.containsKey("params")){if(params["params"].containsKey("COMMAND")){/*阿里平台里添加设备属性COMMAND*/if(params["params"]["COMMAND"].is<String>()){if(params["params"]["COMMAND"].as<String>()=="restart"){ESP.restart();//模块重启。}}}if(params["params"].containsKey("LED")){/*阿里平台里添加设备属性LED*/if(params["params"]["LED"].is<int>()){if(params["params"]["LED"].as<int>()==1){digitalWrite(led,1);}if(params["params"]["LED"].as<int>()==0){digitalWrite(led,0);}}}//这里可以添加其他属性设置代码。}
}

回调处理使用到JSON库,方便数据解析处理,这也是MQTT程序通常的做法,如果你不想这样做,可以自行编写代码搜索payload。用自己喜欢的方式进行任意的处理。(其实就是个字符串,你可以想到很多方法去处理和使用它,你也可以简简单把它打印到串口,慢慢分析)

最后烧写程序到ESP32模块,注意有的模块烧写的时候需要按住按键,有的模块则不需要。烧写完成,模块重启,请关注串口信息和LED状态。

然后呢,然后就是:

  • 在线调试。

模块烧写成功后会自动重启,连接WIFI,连接阿里云平台。

现在我们登陆阿里MQTT物联网平台(都看到这里了,请不要告诉我你还没有注册!)

“控制台”-->“物联网平台”-->“公共实例”,左边栏点击“监控运维”-->“在线调试”“请选择设置”后面选择我们正在使用的产品和设备。必须与程序中使用的产品设备一致。如果你看到“设备在线”,恭喜你,咱们程序烧写成功,并且模块已经成功连接到物联网平台!如果“设备已离线”,请仔细检查程序,WIFI连接是否成功,MQTT三元组信息是否正确,网络是否通达。重点关注串口调试信息,直到连接成功。如果你足够仔细,严格按前文所述修改代码,应该可以一次成功。

此时,你会看到高度设备自定义属性,每个属性下面有一个输入框,在LED属性输入框里填入0,点后面的“调试”à“设置”。是不是灯灭了?改为1再来一次,是否灯亮了?有不有点小小的激动?

ESP32连接阿里云MQTT物联网平台相关推荐

  1. 入住阿里云MQTT物联网平台

    注册阿里云: 网址:阿里云-上云就上阿里云 进入阿里云平台主页,点右上角"立即注册",你可以选择"扫码快速注册"或"账号密码注册"两种方式进 ...

  2. 【微信小程序控制硬件⑧ 】微信小程序以 websocket 连接阿里云IOT物联网平台mqtt服务器,封装起来使用就是这么简单!(附带Demo)

    [微信小程序控制硬件第1篇 ] 全网首发,借助 emq 消息服务器带你如何搭建微信小程序的mqtt服务器,轻松控制智能硬件! [微信小程序控制硬件第2篇 ] 开始微信小程序之旅,导入小程序Mqtt客户 ...

  3. 支付宝小程序使用MQTT over WebSocket连接阿里云IoT物联网平台

    前言 之前写了一篇微信小程序使用MQTT over WebSocket连接阿里云IoT物联网平台,介绍了如何使用mqtt.js在微信小程序上连接mqtt服务器,文中顺带提了mqtt.js是支持支付宝小 ...

  4. 微信小程序使用MQTT.js连接阿里云IoT物联网平台

    官方已经开源了一个SDK版本,也是基于mqtt.js,进行了各种封装: https://github.com/aliyun/alibabacloud-iot-device-sdk · 阅读以下内容需要 ...

  5. 基于阿里云MQTT物联网平台视频监控

    1.项目介绍   本项目基于物联量平台远程的视频监控项目,通过MQTT协议实现两个设备间的数据上报与订阅.通过这个项目来演示,两个MQTT设备如何互相订阅,进行消息流转.在阿里云服务器上创建2个设备, ...

  6. 解密阿里云IoT物联网平台MQTT Access Server核心架构

    MQTT是基于TCP/IP协议栈构建的异步通信消息协议,是一种轻量级的发布.订阅信息传输协议.MQTT已逐渐成为IoT领域最热门的协议,也是国内外各大物联网平台最主流的传输协议,阿里云IoT物联网平台 ...

  7. MQTT.fx 模拟 IoT 设备接入阿里云企业物联网平台

    MQTT.fx是一款基于Eclipse Paho SDK,使用Java语言编写的MQTT客户端,支持Windows.Mac和Linux操作系统,可用于验证设备是否可与物联网平台正常连接,并基于 Top ...

  8. MQTT协议与阿里云IoT物联网平台

    1.MQTT协议介绍 1.1 MQTT协议 MQTT(消息队列遥测传输) 是基于 TCP/IP 协议栈而构建的支持在各方之间异步通信的消息协议.MQTT在空间和时间上将消息发送者与接收者分离,因此可以 ...

  9. 【小程序案例】支付宝小程序-MQTT模器,IoT设备通过WSS接入阿里云IoT物联网平台...

    支付宝小程序-MQTT模拟器通过WSS接入阿里云IoT物联网平台 准备工作 1.1 注册阿里云账号 开通阿里云账号,并通过支付宝实名认证 https://www.aliyun.com 1.2 免费开通 ...

最新文章

  1. composer不成功的原因
  2. 理论基础 —— 索引 —— 倒排索引
  3. c 递归下降识别程序_程序员的算法课(3)-递归(recursion)算法
  4. srsLTE源码学习:度量中心:metrics_hub.h
  5. 笔记本vm系统的分辨率不好调整_苹果笔记本电脑怎么设置使用今声优盒
  6. data自定义属性获取方法和设置
  7. 电脑罗盘时钟代码_轻松吃透实时时钟芯片DS1302软硬件设计
  8. 一页纸商业计划书 (Business Plan) 模板
  9. CuteFTP下载大文件时报错
  10. 上网账号口令怎么获取_我的路由器上网账号和口令忘记了该怎么办
  11. CentOS 7 - Securing OpenSSH(一)
  12. 计算机win7卡顿如何解决方法,win7电脑出现卡顿怎么办_win7电脑卡顿严重解决方法...
  13. 『论文笔记』Visually Grounded Reasoning across Languages and Cultures
  14. 【三】Apache的管理及优化
  15. 强大的nginx反向代理异步传输模式(原理)
  16. page_to_phys()和virt_to_phys()
  17. 洛谷P4043 支线剧情
  18. 中规中矩的Spring事件监听
  19. 【GHM (AAAI‘2019)】
  20. 模型评价指标—F1值

热门文章

  1. Windows Server:客户端脱机加域
  2. Java编程思想第4版第三章习题
  3. Margin 在WPF中的用法
  4. 恩平高考成绩查询2021,广东江门好高中,新会一中、恩平、鹤山、开平,2020高考成绩发布...
  5. 从方法到思维:什么是应用逻辑架构的正确姿势?
  6. cc1310 学习调试记录
  7. 机器学习-单一模型/Ensemble模型-误差率解析
  8. 地基基础检测远程监控系统 易云系统 中易云
  9. 旅游风景区`web大作业 静态网页
  10. 新年新迹象,商场购物中心“牛”年如何装扮设计