ESP32 Arduino开发 MQTT

这篇具有很好参考价值的文章主要介绍了ESP32 Arduino开发 MQTT。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ESP32 Arduino开发 MQTT

目录
  • ESP32 Arduino开发 MQTT
    • 1. 安装程序库
    • 2. 编写相关程序
      • 2.1. 引入头文件
      • 2.2. 定义MQTT相关参数
      • 2.3. 创建对象
      • 2.4. 连接网络
      • 2.5. 连接MQTT服务器
      • 2.6. MQTT回调函数
    • 3. 完整的代码例程
    • 4. MQTT连接测试

1. 安装程序库

  1. 打开库管理工具

工具 -> 管理库...

  1. 查找所需要的程序库
    安装PubSubClient
    ESP32 Arduino开发 MQTT

2. 编写相关程序

2.1. 引入头文件

在保证网络连接的前提之下,才可以连接MQTT。
所以需要引入<WiFi.h>的库。

#include <WiFi.h>
#include <PubSubClient.h>

2.2. 定义MQTT相关参数

MQTT相关参数可以分为3个部分:一是方便开发所设计的宏定义参数,二是网络连接所需要的信息,三是MQTT连接所需要的信息。

MQTT连接所需要的信息包括:

  1. MQTT服务器(选用EMQX的开源测试服务器)
  2. MQTT主题
  3. 用户名
  4. 密码
  5. 端口号
  6. 服务器ID
#define MAX_RETRIES 20          // 网络最大连接次数
#define MQTT_CALLBACK 1         // 是否开启MQTT回调函数

const char* ssid="HTB";         // 网络信息
const char* pass="htb66666666";

// 设置MQTT borker信息
const char *mqtt_broker = "broker-cn.emqx.io";  
const char *topic = "mqtt_hbb_example";
const char *mqtt_username = "emqx";
const char *mqtt_password = "public";
const int mqtt_port = 1883;
const char *client_id = "mqtt-client-hbb-example";

2.3. 创建对象

创建MQTT服务器对象

WiFiClient espClient;
PubSubClient client(espClient);

2.4. 连接网络

网络连接函数是在之前的教程《ESP32 Arduino开发 网络连接》的基础上进行了小部分的修改,将其封装成函数,返回值表示网络是否连接成功。

// 网络连接函数
bool connectWifi(){
  Serial.println("调用WiFi连接函数");
  WiFi.begin(ssid, pass);

  for(int i=0; i<MAX_RETRIES; i++){
    delay(500);
    if(WiFi.status()==WL_CONNECTED){
      Serial.println("网络连接成功");
      return true;
    }
  }
  if(WiFi.status()!=WL_CONNECTED){
    Serial.println("网络连接超时");
    return false;
  }
}

2.5. 连接MQTT服务器

  1. 通过setServer函数设置服务器地址及端口号
  2. #if#endif是预处理命令,跟if语句的作用类似,如果宏为真,则执行其中的语句,如果宏为假,则其中的语句不编译
  3. 先要保证Wi-Fi连接处于正常状态,再执行MQTT的连接函数。MQTT连接整体的程序设计思路与Wi-Fi连接是一致的。
// MQTT服务器连接函数
bool connectMqtt(){
  Serial.println("调用MQTT连接函数");
  client.setServer(mqtt_broker, mqtt_port);

  #if MQTT_CALLBACK
  Serial.println("调用MQTT回调函数");
  client.setCallback(mqttCallback);
  #endif

  if(WiFi.status()==WL_CONNECTED){
    for(int i=0; i<MAX_RETRIES; i++){
      delay(1000);
      if(client.connect(client_id, mqtt_username, mqtt_password)){
        Serial.println("MQTT服务器连接成功");
        return true;
      }
    }
    if(!client.connected()){
      Serial.println("MQTT服务器连接超时");
      return false;
    } 
  }else{
    Serial.println("网络连接失败");
    return false;
  }
}

2.6. MQTT回调函数

未完待续

3. 完整的代码例程

#include <WiFi.h>
#include <PubSubClient.h>

#define MAX_RETRIES 20          // 网络最大连接次数
#define MQTT_CALLBACK 1         // 是否开启MQTT回调函数

const char* ssid="HTB";         // 网络信息
const char* pass="htb66666666";

const char *mqtt_broker = "broker-cn.emqx.io";  // 设置MQTT borker信息
const char *topic = "mqtt_hbb_example";
const char *mqtt_username = "emqx";
const char *mqtt_password = "public";
const int mqtt_port = 1883;
const char *client_id = "mqtt-client-hbb-example";

// String client_id = "esp32-client-" + String(WiFi.macAddress()); // 服务器id设置为wifi的物理地址

WiFiClient espClient;
PubSubClient client(espClient);

// MQTT监听函数
void mqttCallback(char *topic, byte *payload, unsigned int length) {
  Serial.print("Message arrived in topic: ");
  Serial.println(topic);
  Serial.print("Message:");
  String charPayload;
  for (int i = 0; i < length; i++) {
    charPayload += (char) payload[i];
  }
  Serial.println(charPayload);
  Serial.println("-----------------------");
}

// 网络连接函数
bool connectWifi(){
  Serial.println("调用WiFi连接函数");
  WiFi.begin(ssid, pass);

  for(int i=0; i<MAX_RETRIES; i++){
    delay(500);
    if(WiFi.status()==WL_CONNECTED){
      Serial.println("网络连接成功");
      return true;
    }
  }
  if(WiFi.status()!=WL_CONNECTED){
    Serial.println("网络连接超时");
    return false;
  }
}

// MQTT服务器连接函数
bool connectMqtt(){
  Serial.println("调用MQTT连接函数");
  client.setServer(mqtt_broker, mqtt_port);

  #if MQTT_CALLBACK
  Serial.println("调用MQTT回调函数");
  client.setCallback(mqttCallback);
  #endif

  if(WiFi.status()==WL_CONNECTED){
    for(int i=0; i<MAX_RETRIES; i++){
      delay(1000);
      if(client.connect(client_id, mqtt_username, mqtt_password)){
        Serial.println("MQTT服务器连接成功");
        return true;
      }
    }
    if(!client.connected()){
      Serial.println("MQTT服务器连接超时");
      return false;
    } 
  }else{
    Serial.println("网络连接失败");
    return false;
  }
}

void setup() {
  Serial.begin(115200);
  if(connectWifi()){
    connectMqtt();
  };
}

void loop() {
  // put your main code here, to run repeatedly:

}

4. MQTT连接测试

未完待续文章来源地址https://www.toymoban.com/news/detail-850336.html

到了这里,关于ESP32 Arduino开发 MQTT的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • ESP32 Arduino开发 MQTT

    ESP32 Arduino开发 MQTT

    目录 ESP32 Arduino开发 MQTT 1. 安装程序库 2. 编写相关程序 2.1. 引入头文件 2.2. 定义MQTT相关参数 2.3. 创建对象 2.4. 连接网络 2.5. 连接MQTT服务器 2.6. MQTT回调函数 3. 完整的代码例程 4. MQTT连接测试 打开库管理工具 工具 - 管理库... 查找所需要的程序库 安装 PubSubClient 在保证网络连接

    2024年04月13日
    浏览(10)
  • Arduino添加ESP32开发板

    Arduino添加ESP32开发板

    【2023年3月4日】 最近要在新电脑上安装Arduino,需要进行一些配置,正好记录一下! Arduino2.0.1 下的开发板添加操作。 ESP32开发板GitHub链接 : GitHub - espressif/arduino-esp32: Arduino core for the ESP32 Arduino core for the ESP32. Contribute to espressif/arduino-esp32 development by creating an account on GitHub. h

    2024年02月05日
    浏览(15)
  • Arduino离线安装esp32/esp8266

    Arduino离线安装esp32/esp8266

    使用本教程所示的安装方法,双击安装包的傻瓜式操作,不用进入文件夹修改,不用添加网站地址,免去网络带来的烦恼。安装完成后直接使用。 官网地址:Software | Arduino 打开链接后如图  点击红色框内以后跳转到此界面 再次选择红框后下载 打开安装包一直下一步就好 打

    2023年04月13日
    浏览(12)
  • 【ESP32最全学习笔记(基础篇)——2.ESP32 Arduino 集成开发环境】

    【ESP32最全学习笔记(基础篇)——2.ESP32 Arduino 集成开发环境】

    关于本教程: 1.ESP32简介                                                                 2.ESP32 Arduino 集成开发环境 ☑ 3.VS 代码和 PlatformIO 4.ESP32 引脚 5.ESP32 输入输出 6.ESP32 脉宽调制 7.ESP32 模拟输入 8.ESP32 中断定时器 9 .ES P32 深度睡眠 ESP32 网络

    2024年02月10日
    浏览(28)
  • Arduino_ESP32开发环境搭建

    Arduino_ESP32开发环境搭建

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 – 提示:以下是本篇文章正文内容,下面案例可供参考 Arduino IDE 是一款免费的软件,可以直接去官网(https://www.arduino.cc/en/software)下载。 直接点击红色方框即可下载,下载完成如图所示。 直接点击ardu

    2023年04月13日
    浏览(11)
  • [Arduino] ESP32开发 - 基础入门与原理分析

    [Arduino] ESP32开发 - 基础入门与原理分析

    实用 GPIO 用到再查,熟能生巧,别上来就背图,一天你就忘了! 仅输入引脚 下面的四个引脚由于内部没有上拉下拉电阻,所以仅仅支持输入信号 GPIO 34 GPIO 35 GPIO 36 GPIO 39 SPI Flash 闪存引脚 这些引脚都是对 ESP32 内部 flash 进行操作的,最好不要使用这些引脚进行输入输出操作!

    2024年02月11日
    浏览(9)
  • Arduino+Esp32-wroom32E开发环境搭建(2023)

    Arduino+Esp32-wroom32E开发环境搭建(2023)

    这两天开始在Arduino下安装esp32,经历了从自动安装到手动安装的过程。自动安装,三个字评价:太慢了,然后还每次100%失败,无语。 然后开始手动安装。最后成功了。 最新的发布版本: 官网下载页面 不要修改安装路径。 设置中文: 如果这一步要是运气好,成功了,还是很

    2023年04月14日
    浏览(10)
  • ESP32 Arduino开发 DHT11传感器

    ESP32 Arduino开发 DHT11传感器

    参考:CSDN博客 打开库管理工具 工具 - 管理库... 查找所需要的程序库 安装 DHT sensor library DHT对象创建的函数需要两个参数,一个是用于获取数据的引脚号,一个是传感器的类型(可选DHT11、DHT21、DHT22)。 所以在创建对象之前,通过宏定义的方式对于所需要的两个参数进行定义

    2024年02月03日
    浏览(31)
  • 快速入门ESP32——开发环境配置Arduino IDE

    快速入门ESP32——开发环境配置Arduino IDE

     最近这段时间刚好在捣鼓ESP32,遇到了挺多大大小小的坑,所以我将自己的配置过程和注意要点写出来分享给大家,希望对你们有帮助。  ESP32系列单片机可以用 MicroPython 和 C ++进行编程,在这里我主要介绍C++编程语言下的两种常用的开发环境: Arduino IDE :Arduino 相信很多

    2024年02月03日
    浏览(12)
  • MAC版本的Arduino+ESP32环境安装

    MAC版本的Arduino+ESP32环境安装

    官网下载安装Arduino-IDE Arduino-IDE官方网站 在这里选择macOS,自行选择intel和m系列芯片。 偏好设置 在这里设置中文,Preferrence 在这里设置开发文件目录: /Users/shineber/Documents/Arduino 设置开发板管理器地址: 法一:在Arduino内部安装 文件首选项附加开发板管理器网址加入Arduino c

    2024年02月08日
    浏览(9)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包