ESP8266 是一款流行的低成本 WiFi 微控制器,广泛用于物联网(IoT)项目。使用 Arduino IDE,你可以很容易地编写代码,使 ESP8266 连接到 MQTT 服务器,从而实现设备间的通信和数据交换。以下是一个基本的步骤指南,展示如何使用 Arduino IDE 和 ESP8266 连接到 MQTT 服务器。
步骤 1: 准备硬件
- ESP8266 开发板(如 NodeMCU, WeMos D1 等)
- USB 线(用于将 ESP8266 连接到电脑)
- (可选)外部电源(如果 ESP8266 板无法仅通过 USB 供电)
步骤 2: 安装 Arduino IDE 和 ESP8266 插件
- 下载并安装 Arduino IDE:从 Arduino 官网 下载并安装 Arduino IDE。
- 安装 ESP8266 插件:
- 打开 Arduino IDE。
- 转到“文件”>“首选项”>“附加开发板管理器网址”,添加
http://arduino.esp8266.com/stable/package_esp8266com_index.json
。 - 然后,在“工具”>“开发板”>“开发板管理器”中搜索 ESP8266 并安装。
步骤 3: 配置开发板
- 在 Arduino IDE 中,通过“工具”>“开发板”选择你的 ESP8266 型号(如 NodeMCU 1.0)。
- 设置正确的端口(在“工具”>“端口”中选择)。
步骤 4: 编写 MQTT 连接代码
你可以使用 PubSubClient 库来简化 MQTT 连接过程。
- 安装 PubSubClient 库:
- 在 Arduino IDE 中,转到“项目”>“加载库”>“管理库...”,搜索并安装 PubSubClient。
- 编写代码:
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
const char* ssid = "你的WiFi名";
const char* password = "你的WiFi密码";
const char* mqtt_server = "bemfa.com"; //使用的巴法云做的示例
const int mqtt_port = 9501; //使用的巴法云做的示例
const char* client_id = "7beb5a73e6a2.......2d5e3a21a"; //使用的巴法云做的示例
const char* SUB_topic = "test1"; //订阅的Topic
const char* PUB_topic = "test2"; //发送Topic数据
WiFiClient espClient;
PubSubClient client(espClient);
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
// 这里可以添加对接收到的消息的处理逻辑
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
if (client.connect(client_id)) {
Serial.println("Connected to MQTT server");
client.subscribe( SUB_topic );
} else {
delay(5000);
}
}
}
void setup_wifi() {
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void setup() {
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
reconnect();
}
uint8_t num=0;
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
// 每隔10秒发布一次数据到test2 Topic
static unsigned long lastMillis = 0;
if (millis() - lastMillis > 10000) {
lastMillis = millis();
// const char* payload = "Hello MQTT";
// client.publish( PUB_topic , payload);
char buffer[50];
sprintf(buffer, "number: %d", num++);
client.publish( PUB_topic , buffer );
Serial.println("Sent message to topic test2");
}
}