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模板网!

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

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

相关文章

  • 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日
    浏览(41)
  • 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日
    浏览(34)
  • Arduino离线安装esp32/esp8266

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

    2023年04月13日
    浏览(45)
  • 【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日
    浏览(48)
  • Arduino_ESP32开发环境搭建

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

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

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

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

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

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

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

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

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

    2024年02月03日
    浏览(48)
  • Arduino安装ESP32下载失败的解决方法

     Arduino安装ESP32时,经常下载失败  解决办法: 1.复制命令行中的提示信息到记事本,找到下载地址  2.打开浏览器,在地址栏中贴粘下载地址,回车开始下载    3.将下载的包复制到C:UsersAdministratorAppDataLocalArduino15stagingpackages(注意,用户名不一样,可能路径不一样)

    2024年02月16日
    浏览(47)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包