ESP8266入门教程11:连接MQTT服务器
将第三方库PubSubClient下载到lib文件夹
git clone https://github.com/knolleary/pubsubclient.git
一、阿里云IOT使用
1、打开阿里云IOT官网,登录阿里云账号
https://iot.console.aliyun.com
2、创建实例
3、新建产品
4、自定义主题
5、添加设备
6、查看设备配置
二、连接阿里云MQTT服务器
1、修改PubSubClient.h头文件,否则无法连接阿里云MQTT服务器
将MQTT_MAX_PACKET_SIZE的值改为1024
将MQTT_KEEPALIVE的值改为65
2、代码解析
第27行:创建WIFI客户端
第28行:创建MQTT客户端
第29行:创建任务对象
第30行:定义MQTT消息发送函数
第32行:发送消息前先判断MQTT服务器是否连接成功
第37行:发送MQTT消息
第47行:定义MQTT消息接收函数
第53行:定义MQTT服务器连接函数
第54行:请求连接MQTT服务器
第59行:订阅MQTT主题
第64行:开始定时任务,每隔三秒发送一条MQTT消息
第67行:结束定时任务
第82行:设置MQTT服务器主机地址和端口号
第84行:设置MQTT消息接收回调函数
第94行:保持MQTT客户端心跳,否则会连接中断
三、测试效果
四、完整代码
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <Ticker.h>
#include "../lib/pubsubclient/src/PubSubClient.h"#define WIFI_SSID "WWW"
#define WIFI_PASS "00000000"
#define MQTT_HOST "MQTT服务器地址"
#define MQTT_PORT 1883
#define MQTT_CLIENT_ID "MQTT客户端名称"
#define MQTT_USER "MQTT用户名"
#define MQTT_PASS "MQTT登录密码"void connectWIFI() {// 连接WIFI热点WiFi.begin(WIFI_SSID, WIFI_PASS);int retryCount = 1;while (WiFi.status() != WL_CONNECTED) {Serial.println("重试次数: " + String(retryCount));retryCount++;delay(1000);}Serial.println("WIFI连接成功");Serial.println("IP地址: " + WiFi.localIP().toString());
}WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);
Ticker ticker;void sendMsg() {if (mqttClient.connected()) {String topic = "/a1aeNGS45Gg/";topic += "ESP8266";topic += "/user/info";String payload = "Hello World !";if (mqttClient.publish(topic.c_str(), payload.c_str())) {Serial.println("MQTT消息发送成功");} else {Serial.println("MQTT消息发送失败");}} else {Serial.println("MQTT服务器未连接");}
}void recvMsg(char *topic, uint8_t *payload, size_t length) {Serial.println("topic: " + String(topic));Serial.println("payload: " + String((char *)payload).substring(0, length));Serial.println("length: " + String(length));
}void connectMQTT() {if (mqttClient.connect(MQTT_CLIENT_ID, MQTT_USER, MQTT_PASS)) {Serial.println("MQTT服务器连接成功");String topic = "/a1aeNGS45Gg/";topic += "ESP8266";topic += "/user/info";if (mqttClient.subscribe(topic.c_str())) {Serial.println("MQTT主题订阅成功");} else {Serial.println("MQTT主题订阅失败");}ticker.attach(3, sendMsg);} else {Serial.println("MQTT服务器连接失败");ticker.detach();delay(3000);}
}void setup() {// put your setup code here, to run once:// 设置波特率Serial.begin(9600);Serial.println();// 连接WIFI热点connectWIFI();// 配置MQTT服务器mqttClient.setServer(MQTT_HOST, MQTT_PORT);// 设置回调函数mqttClient.setCallback(recvMsg);// 连接MQTT服务器connectMQTT();
}void loop() {// put your main code here, to run repeatedly:// 判断MQTT服务器是否连接成功if (mqttClient.connected()) {mqttClient.loop();} else {connectMQTT();}
}
ESP8266入门教程11:连接MQTT服务器相关推荐
- 【STM32 x ESP8266】连接 MQTT 服务器(报文,附部分源码解析)
MQTT 协议作为物联网非常重要的传输协议,如何使用它十分重要,如果有不理解的同学可以点击这里学习,这里只是简单介绍一下.同时这里附上MQTT 3.1.1协议中文版 pdf 的链接,对协议底层感兴趣的 ...
- SpringBoot连接MQTT服务器时因ClintID重复导致频繁掉线重连
场景 SpringBoot整合MQTT服务器实现消息的发送与订阅(推送消息与接收推送): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/detai ...
- ESP8266入门教程-ESP8266睡眠和唤醒功能
ESP8266入门教程-ESP8266睡眠和唤醒功能 本指南展示了如何使用Arduino IDE与ESP8266 (NodeMCU)使用深度睡眠.我们将覆盖深度睡眠与定时器唤醒和深度睡眠与外部唤醒使用 ...
- DTU网关连接MQTT服务器、MQTT.fx工具测试
4G DTU网关连接MQTT服务器+MQTT.fx工具调试 今天介绍DTU网关如何通过简单几步配置连接MQTT服务器,再使用MQTT.fx客户端进行串口测试. 一. 设备准备 1.硬件准备 DTU网关 ...
- 应用场景一:西门子PLC通过桥接器连接MQTT服务器
应用场景描述: 云平台.MES等数据采集.设备管理系统,需要通过MQTT的方式,上传和下发数据,MQTT服务器可以获取PLC的实时状态数据,也可以下发控制指令.桥接器提供4G.WIFI和有线三种连接方 ...
- 移远EC200 EC20 EC600 EC800连接MQTT服务器
前言 移远的CAT1模块EC200S连接MQTT大致流程 ,经过测试,完全有效 A:开机 就是对模块进行断电2S在上电. B:基础配置 这部分跟连TCP服务器一样 (1):发送AT,确认模块是否正常 ...
- java连接MQTT服务器(Springboot整合MQTT)
一.业务场景 硬件采集的数据传入EMQX平台(采用MQTT协议),java通过代码连接MQTT服务器,进行采集数据接收.解析.业务处理.存储入库.数据展示. MQTT 是基于 发布(Publish)/ ...
- esp8266连接mqtt服务器
1.MQTT ESP8266库 菜单"项目"-"加载库"-"管理库",搜索安装"PubSubClient" PubSub ...
- 13-ESP8266连接MQTT服务器发送数据
Author:teacherXue 一.什么是MQTT 定义 MQTT是一个基于客户端-服务器的消息发布/订阅传输协议.MQTT协议是轻量.简单.开放和易于实现的,这些特点使它适用范围非常广泛.在很多 ...
最新文章
- Error: Default interface methods are only supported starting with Android N (--min-api 24): java.uti
- rabbitmq beam.smp cpu利用率过高
- Windows Live Messenger 8.5 抢先试用
- 浅谈Linux磁盘存储管理续【逻辑卷管理(LVM)】
- 【Java基础总结】网络编程
- python多线程之线程锁(Lock)和递归锁(RLock)实例
- 《Dotnet9》系列-Google ProtoBuf在C#中的简单应用
- PAT甲级1001 字符串处理
- Tricks(二十五)—— decorator(在函数调用前后打印日志)
- 第1讲:软件测试背景
- 设置Chrome新标签页为自定义地址页面
- 异步爬取有道词典(入门js逆向)
- 用 Golang 实现矩阵运算库
- 微信订阅号简单开发指引
- 猿创征文|云原生|kubernetes学习之多账户管理--权限精细化分配放啊(两种方式-sa和用户)
- 关于Hibernate的Session和SessionFactory
- 学计算机得肩周炎,电脑工作者更易患肩周炎 肩周炎的自我按摩方法
- 杭电计算机考研经验总结
- 【Sharding-JDBC系列二】一文快速入门分库分表中间件 Sharding-JDBC (必修课)
- Dreamweaver怎么用css设置基本的文字属性