基于Arduino平台通过ESP8266进行MQTT通信

        ESP8266 是一款流行的低成本 WiFi 微控制器,广泛用于物联网(IoT)项目。使用 Arduino IDE,你可以很容易地编写代码,使 ESP8266 连接到 MQTT 服务器,从而实现设备间的通信和数据交换。以下是一个基本的步骤指南,展示如何使用 Arduino IDE 和 ESP8266 连接到 MQTT 服务器。

步骤 1: 准备硬件

  • ESP8266 开发板(如 NodeMCU, WeMos D1 等)
  • USB 线(用于将 ESP8266 连接到电脑)
  • (可选)外部电源(如果 ESP8266 板无法仅通过 USB 供电)

步骤 2: 安装 Arduino IDE 和 ESP8266 插件

  1. 下载并安装 Arduino IDE:从 Arduino 官网 下载并安装 Arduino IDE。
  2. 安装 ESP8266 插件
    • 打开 Arduino IDE。
    • 转到“文件”>“首选项”>“附加开发板管理器网址”,添加 http://arduino.esp8266.com/stable/package_esp8266com_index.json
    • 然后,在“工具”>“开发板”>“开发板管理器”中搜索 ESP8266 并安装。

步骤 3: 配置开发板

  • 在 Arduino IDE 中,通过“工具”>“开发板”选择你的 ESP8266 型号(如 NodeMCU 1.0)。
  • 设置正确的端口(在“工具”>“端口”中选择)。

步骤 4: 编写 MQTT 连接代码

你可以使用 PubSubClient 库来简化 MQTT 连接过程。

  1. 安装 PubSubClient 库
    • 在 Arduino IDE 中,转到“项目”>“加载库”>“管理库...”,搜索并安装 PubSubClient。
  2. 编写代码
#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");  
  }  
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_755682240

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值