将第三方库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服务器相关推荐

  1. 【STM32 x ESP8266】连接 MQTT 服务器(报文,附部分源码解析)

    MQTT 协议作为物联网非常重要的传输协议,如何使用它十分重要,如果有不理解的同学可以点击这里学习,这里只是简单介绍一下.同时这里附上MQTT 3.1.1协议中文版 pdf 的链接,对协议底层感兴趣的 ...

  2. SpringBoot连接MQTT服务器时因ClintID重复导致频繁掉线重连

    场景 SpringBoot整合MQTT服务器实现消息的发送与订阅(推送消息与接收推送): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/detai ...

  3. ESP8266入门教程-ESP8266睡眠和唤醒功能

    ESP8266入门教程-ESP8266睡眠和唤醒功能 本指南展示了如何使用Arduino IDE与ESP8266 (NodeMCU)使用深度睡眠.我们将覆盖深度睡眠与定时器唤醒和深度睡眠与外部唤醒使用 ...

  4. DTU网关连接MQTT服务器、MQTT.fx工具测试

    4G DTU网关连接MQTT服务器+MQTT.fx工具调试 今天介绍DTU网关如何通过简单几步配置连接MQTT服务器,再使用MQTT.fx客户端进行串口测试. 一. 设备准备 1.硬件准备 DTU网关 ...

  5. 应用场景一:西门子PLC通过桥接器连接MQTT服务器

    应用场景描述: 云平台.MES等数据采集.设备管理系统,需要通过MQTT的方式,上传和下发数据,MQTT服务器可以获取PLC的实时状态数据,也可以下发控制指令.桥接器提供4G.WIFI和有线三种连接方 ...

  6. 移远EC200 EC20 EC600 EC800连接MQTT服务器

    前言 移远的CAT1模块EC200S连接MQTT大致流程 ,经过测试,完全有效 A:开机 就是对模块进行断电2S在上电. B:基础配置 这部分跟连TCP服务器一样 (1):发送AT,确认模块是否正常 ...

  7. java连接MQTT服务器(Springboot整合MQTT)

    一.业务场景 硬件采集的数据传入EMQX平台(采用MQTT协议),java通过代码连接MQTT服务器,进行采集数据接收.解析.业务处理.存储入库.数据展示. MQTT 是基于 发布(Publish)/ ...

  8. esp8266连接mqtt服务器

    1.MQTT ESP8266库 菜单"项目"-"加载库"-"管理库",搜索安装"PubSubClient" PubSub ...

  9. 13-ESP8266连接MQTT服务器发送数据

    Author:teacherXue 一.什么是MQTT 定义 MQTT是一个基于客户端-服务器的消息发布/订阅传输协议.MQTT协议是轻量.简单.开放和易于实现的,这些特点使它适用范围非常广泛.在很多 ...

最新文章

  1. Error: Default interface methods are only supported starting with Android N (--min-api 24): java.uti
  2. rabbitmq beam.smp cpu利用率过高
  3. Windows Live Messenger 8.5 抢先试用
  4. 浅谈Linux磁盘存储管理续【逻辑卷管理(LVM)】
  5. 【Java基础总结】网络编程
  6. python多线程之线程锁(Lock)和递归锁(RLock)实例
  7. 《Dotnet9》系列-Google ProtoBuf在C#中的简单应用
  8. PAT甲级1001 字符串处理
  9. Tricks(二十五)—— decorator(在函数调用前后打印日志)
  10. 第1讲:软件测试背景
  11. 设置Chrome新标签页为自定义地址页面
  12. 异步爬取有道词典(入门js逆向)
  13. 用 Golang 实现矩阵运算库
  14. 微信订阅号简单开发指引
  15. 猿创征文|云原生|kubernetes学习之多账户管理--权限精细化分配放啊(两种方式-sa和用户)
  16. 关于Hibernate的Session和SessionFactory
  17. 学计算机得肩周炎,电脑工作者更易患肩周炎 肩周炎的自我按摩方法
  18. 杭电计算机考研经验总结
  19. 【Sharding-JDBC系列二】一文快速入门分库分表中间件 Sharding-JDBC (必修课)
  20. Dreamweaver怎么用css设置基本的文字属性

热门文章

  1. 感知算法-超声波三角定位测量方法
  2. windows文件同步备份软件-文件夹同步工具哪个好?
  3. 简介 IndexedDB 及详解 IndexedDB 在实际项目中可能存在的问题与解决方案
  4. 埃拉托色尼筛选法(Eratosthenes Sieve)分析
  5. C语言 第六章 多重循环
  6. 运维工程师是桥的护栏_运维工程师职务说明书
  7. 亚马逊运营怎么做广告?六大方法!
  8. word插入分页符后在下一页开始出现一个回车符,这个回车符如何删掉,但不影响分页
  9. Hyper-V配置ubuntu网络(无线有限均可)
  10. 拼多多员工匿名发帖被辞退,拼多多回应