esp8266 mqtt 串口透传程序

文章介绍了一个基于ArduinoIDE的ESP8266串口透传程序,通过MQTT协议在两个ESP8266模块间中转数据。程序利用PubSubClient库连接WiFi和MQTT服务器,一个模块作为发布端,另一个作为订阅端。当接收到新数据时,会调用回调函数将数据发布到指定主题并打印出来。
摘要由CSDN通过智能技术生成

下面是基于 Arduino IDE 的 ESP8266 串口透传程序,通过 MQTT 中转数据。需要使用 PubSubClient 库来支持 MQTT 协议。

 

接线:

 

- 将两个ESP8266 01s的GND、VCC、TX、RX引脚分别连接。其中一个ESP8266作为发布端(Publisher),另一个作为订阅端(Subscriber)。

- 两个ESP8266模块TX接受电路板的RX,电路板TX接收ESP8266模块的RX。

- 确保两个ESP8266模块都已烧录好 AT 固件,并正确地配置了连接 WiFi 网络的参数。

 

在 Arduino IDE 中安装 PubSubClient 库:Sketch -> Include Library -> Manage Libraries,搜索 "pubsubclient" 并点击安装。

 

代码如下:

 

```

#include <PubSubClient.h>

#include <SoftwareSerial.h>

 

// WiFi信息

const char* ssid = "YOUR_WIFI_SSID";

const char* password = "YOUR_WIFI_PASSWORD";

 

// MQTT信息

const char* mqtt_server = "YOUR_MQTT_SERVER";

const char* mqtt_username = "YOUR_MQTT_USERNAME";

const char* mqtt_password = "YOUR_MQTT_PASSWORD";

const char* mqtt_topic_pub = "topic/tx"; // Publisher 发送到该主题

const char* mqtt_topic_sub = "topic/rx"; // Subscriber 订阅该主题

 

// 创建软串口对象

SoftwareSerial Serial1(D3, D4); // RX: D3, TX: D4

 

// 创建MQTT客户端对象

WiFiClient espClient;

PubSubClient client(espClient);

 

// 保存已连接到WiFi和MQTT服务器的状态

bool connected_wifi = false;

bool connected_mqtt = false;

 

// 连接WiFi

void connectWiFi() {

  Serial.println();

  Serial.print("Connecting to ");

  Serial.println(ssid);

 

  WiFi.begin(ssid, password);

 

  while (WiFi.status() != WL_CONNECTED) {

    delay(1000);

    Serial.print(".");

  }

 

  Serial.println("");

  Serial.println("WiFi connected");

  Serial.print("IP address: ");

  Serial.println(WiFi.localIP());

 

  connected_wifi = true;

}

 

// 连接MQTT服务器

void connectMQTT() {

    if (!client.connected()) {

        Serial.print("Attempting MQTT connection...");

        

        String clientId = "ESP8266Client-";

        clientId += String(random(0xffff), HEX);

        

        if (client.connect(clientId.c_str(), mqtt_username, mqtt_password)) {

            Serial.println("connected");

            client.subscribe(mqtt_topic_sub); // 订阅主题

            connected_mqtt = true;

        } else {

            Serial.print("failed, rc=");

            Serial.print(client.state());

            connected_mqtt = false;

        }

    }

}

 

// 发布数据到MQTT主题

void publishData(String data) {

    if (connected_mqtt) {

        client.publish(mqtt_topic_pub, data.c_str());

    }

}

 

// 当接收到新数据时,回调函数将被调用

String serial_data_received = "";

void callback(char* topic, byte* payload, unsigned int length) {

    for (int i=0; i<length; i++) { // 将字节数据转换成字符串类型

      serial_data_received += (char)payload[i];

    }

 

    publishData(serial_data_received); // 将数据发布到MQTT主题

    Serial.println("Data received: " + serial_data_received); // 打印接收到的数据

    serial_data_received = ""; // 清空串口接收的数据

}

 

void setup() {

  Serial.begin(115200);

  Serial1.begin(115200);

 

  connectWiFi();

 

  client.setServer(mqtt_server, 1883);

  client.setCallback(callback);

}

 

void loop() {

    if (connected_wifi) {

        if (!connected_mqtt) {

            connectMQTT();

        } else {

            client.loop();

 

            if (Serial1.available()) { // 发送端有数据可用

                String s = "";

                while(Serial1.available()) { // 不断读取数据直到串口里没有可读字节为止

                    char c = Serial1.read();  

                    s += c;  

                    delay(2); // 等待缓冲区填充   

                }

                publishData(s); // 将数据发布到MQTT主题上

                Serial.println("Data sent: " + s);

            }

        }

    }

}

```

 

注意以下几点:

 

- ESP8266 的软串口是通过软件实现的,需要使用两个GPIO引脚来作为RX和TX管脚,并在程序中初始化。

- 在程序中,将模块连接到 WiFi 网络并连接到 MQTT 连接器。

- 在回调函数中,串口接收到的新数据将被转发到 `mqtt_topic_pub` 主题上,并打印出来作为日志记录。

 

上传代码后打开串口监视器查看输出日志。如果没有错误,您将看到串口通过MQTT收发数据的成功消息。

 

注意:如果使用其他GPIO引脚作为软串口管脚,则需要在程序中更新引脚配置。

你可以使用 PubSubClient 库来实现 ESP8266MQTT 透传功能。PubSubClient 是一个常用的 MQTT 客户端库,可以帮助你连接到 MQTT 代理,并进行发布和订阅操作。 你可以通过以下步骤来使用 PubSubClient 库: 1. 首先,确保你的 Arduino IDE 中已经安装了 ESP8266 开发环境。 2. 在 Arduino IDE 中,选择 "工具" -> "管理库",搜索并安装 "PubSubClient" 库。 3. 在你的代码中,引入 PubSubClient 库: ```cpp #include <ESP8266WiFi.h> #include <PubSubClient.h> ``` 4. 设置你的 WiFi 连接: ```cpp const char* ssid = "YourWiFiSSID"; const char* password = "YourWiFiPassword"; ``` 5. 设置 MQTT 代理服务器的地址和端口: ```cpp const char* mqtt_server = "mqtt.example.com"; const int mqtt_port = 1883; ``` 6. 创建 WiFiClient 和 PubSubClient 对象: ```cpp WiFiClient espClient; PubSubClient client(espClient); ``` 7. 在 `setup()` 函数中,连接到 WiFi 和 MQTT 代理服务器: ```cpp void setup() { // Connect to WiFi WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } // Connect to MQTT broker client.setServer(mqtt_server, mqtt_port); while (!client.connected()) { if (client.connect("ESP8266Client")) { Serial.println("Connected to MQTT broker"); } else { Serial.print("Failed, rc="); Serial.print(client.state()); Serial.println("Retrying..."); delay(5000); } } } ``` 8. 在 `loop()` 函数中,处理 MQTT 消息: ```cpp void loop() { client.loop(); // 处理其他逻辑 } ``` 9. 使用 `client.publish()` 发布消息,使用 `client.subscribe()` 订阅主题,使用 `client.onMessage()` 处理接收到的消息。 这样,你就可以使用 PubSubClient 库在 ESP8266 上实现 MQTT 透传功能了。记得根据你的具体需求进行相关配置和操作。希望对你有所帮助!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值