问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Arduino配置ESP8266发布MQTT消息的完整指南

创作时间:
作者:
@小白创作中心

Arduino配置ESP8266发布MQTT消息的完整指南

引用
CSDN
1.
https://blog.csdn.net/2201_75314884/article/details/136923561

本文将详细介绍如何使用Arduino IDE配置ESP8266模块,并通过PubSubClient库实现MQTT消息的发布。从软件安装、库配置到代码编写和验证,本文将手把手教你完成整个过程。

(一)安装Arduino

Arduino是一个基于易用硬件和软件的开源电子平台。全球范围内的学生、爱好者、艺术家、程序员和专业人士都在使用Arduino。

(二)进行汉化等配置

(三)安装库

安装ESP8266基础库

首先我们需要配置ESP8266基础库,对硬件进行基础支持

  1. 打开Arduino IDE,进入工具->开发板->开发板管理器
  2. 在搜索框中输入ESP8266,找到后点击安装

安装常用MQTT客户端库 - PubSubClient库

ESP8266的Arduino开发环境里有多个MQTT库,这里我们学习如何使用PubSubClient库来实现MQTT物联网应用。

添加库流程:

  1. 打开Arduino IDE,进入项目->导入库->添加.zip库
  2. 选择下载的zip文件进行导入

(四)代码编写

实现 ESP8266 网络连接,将ESP8266作为MQTT客户端连接MQTT服务端,并且向服务端发送报文。

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <Ticker.h>

// 设置wifi接入信息(请根据您的WiFi信息进行修改)
const char* ssid = "******";  //连接的wifi账号
const char* password = "*******"; //WiFi密码
const char* mqttServer = "broker.emqx.io";

Ticker ticker;
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);
int count;    // Ticker计数用变量

void setup() {
  Serial.begin(9600);
  //设置ESP8266工作模式为无线终端模式
  WiFi.mode(WIFI_STA);
  // 连接WiFi
  connectWifi();
  // 设置MQTT服务器和端口号
  mqttClient.setServer(mqttServer, 1883);
  // 连接MQTT服务器
  connectMQTTServer();
  // Ticker定时对象
  ticker.attach(1, tickerCount);  
}

void loop() {
  if (mqttClient.connected()) { // 如果开发板成功连接服务器
    // 每隔3秒钟发布一次信息
    if (count >= 3){
      pubMQTTmsg();
      count = 0;
    }    
    // 保持心跳
    mqttClient.loop();
  } else {                  // 如果开发板未能成功连接服务器
    connectMQTTServer();    // 则尝试连接服务器
  }
}

void tickerCount(){
  count++;
}

void connectMQTTServer(){
  // 根据ESP8266的MAC地址生成客户端ID(避免与其它ESP8266的客户端ID重名)
  String clientId = "esp8266-" + WiFi.macAddress();
  // 连接MQTT服务器
  if (mqttClient.connect(clientId.c_str())) {
    Serial.println("MQTT Server Connected.");
    Serial.println("Server Address: ");
    Serial.println(mqttServer);
    Serial.println("ClientId:");
    Serial.println(clientId);
  } else {
    Serial.print("MQTT Server Connect Failed. Client State:");
    Serial.println(mqttClient.state());
    delay(3000);
  }  
}

// 发布信息
void pubMQTTmsg(){
  static int value; // 客户端发布信息用数字
  // 建立发布主题。主题名称以Taichi-Maker-为前缀,后面添加设备的MAC地址。
  // 这么做是为确保不同用户进行MQTT信息发布时,ESP8266客户端名称各不相同,
  String topicString = "Taichi-Maker-Pub-" + WiFi.macAddress();
  char publishTopic[topicString.length() + 1];  
  strcpy(publishTopic, topicString.c_str());
  // 建立发布信息。信息内容以Hello World为起始,后面添加发布次数。
  String messageString = "Hello World " + String(value++);
  char publishMsg[messageString.length() + 1];  
  strcpy(publishMsg, messageString.c_str());
  // 实现ESP8266向主题发布信息
  if(mqttClient.publish(publishTopic, publishMsg)){
    Serial.println("Publish Topic:");Serial.println(publishTopic);
    Serial.println("Publish message:");Serial.println(publishMsg);    
  } else {
    Serial.println("Message Publish Failed.");
  }
}

// ESP8266连接wifi
void connectWifi(){
  WiFi.begin(ssid, password);
  //等待WiFi连接,成功连接后输出成功信息
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi Connected!");  
  Serial.println("");
}

(五)编译写入ESP8266

  1. 将ESP8266通过数据线连接到电脑
  2. 根据图片图示选择正确的开发板
  3. 在Arduino软件中选择对应的端口
  4. 进行编译运行上传

(六)通过串口监视验证

  1. 先打开串口监视器
  2. 会在下面窗口看到ESP8266返回的一些数据信息

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号