【MQTT基础篇(四)】ESP8266连接MQTT服务端

MQTT服务端连接操作

1 电脑客户端连接MQTT服务端

首先一起来学习如何使用电脑软件来实现客户端与服务端的连接。为电脑安装一款免费的MQTT客户端软件–MQTTfx。MQTT客户端软件有很多款,不过经过使用和比较,发现免费的MQTTfx软件在易用性和功能性都非常出色。

通过MQTTfx软件,我们的电脑将会成为一台MQTT客户端。您可以通过以下两个途径下载到MQTTfx软件。

首先,您可以通过MQTT官网下载到MQTTfx软件。MQTTfx的官网地址是:http://mqttfx.org

由于网络连接问题,有些朋友可能无法打开此网址。如果是这样的话,您也可以通过太极创客网站的下载页面获取此软件。请点击这里进入本站MQTTfx下载链接列表

接下来我们就来实际使用MQTTfx客户端来尝试连接服务端。


2 ESP8266连接MQTT服务端

ESP8266Arduino开发环境里有多个MQTT库,我们将使用最为流行的PubSubClient库来作为本教程的主要介绍对象,我们将通过一系列课程教您如何使用ESP8266通过PubSubClient库来实现MQTT物联网应用。关于PubSubClient库,以下是其基本信息:

当您将PubSubClient库安装后,我们就可以使用该库进行开发了。假如您不知道如何安装该库,可以参考这篇教程文章

以下是ESP8266连接MQTT服务端的示例程序。

/**********************************************************************
项目名称/Project          : 零基础入门学用物联网
程序名称/Program name     : connect_mqtt_server
团队/Team                : 太极创客团队 / Taichi-Maker (www.taichi-maker.com)
作者/Author              : CYNO朔
日期/Date(YYYYMMDD)     : 20201109
程序目的/Purpose          : 
本程序旨在演示如何使用PubSubClient库使用ESP8266向连接MQTT服务器。
-----------------------------------------------------------------------
本示例程序为太极创客团队制作的《零基础入门学用物联网》中示例程序。
该教程为对物联网开发感兴趣的朋友所设计和制作。如需了解更多该教程的信息,请参考以下网页:
http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/iot-c/esp8266-nodemcu-web-client/http-request/
***********************************************************************/
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
 
// 设置wifi接入信息(请根据您的WiFi信息进行修改)
const char* ssid = "taichi-maker";
const char* password = "12345678";
const char* mqttServer = "test.ranye-iot.net";
 
// 如以上MQTT服务器无法正常连接,请前往以下页面寻找解决方案
// http://www.taichi-maker.com/public-mqtt-broker/
 
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);
 
void setup() {
  Serial.begin(9600);
 
  //设置ESP8266工作模式为无线终端模式
  WiFi.mode(WIFI_STA);
  
  // 连接WiFi
  connectWifi();
  
  // 设置MQTT服务器和端口号
  mqttClient.setServer(mqttServer, 1883);
 
  // 连接MQTT服务器
  connectMQTTServer();
}
 
void loop() { 
  if (mqttClient.connected()) { // 如果开发板成功连接服务器    
    mqttClient.loop();          // 保持客户端心跳
  } else {                  // 如果开发板未能成功连接服务器
    connectMQTTServer();    // 则尝试连接服务器
  }
}
 
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);
  }   
}
 
// 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(""); 
}

内容来自 -----> 太极创客
详情可见太极创客官网,内有Arduino、ESP32等详细教程

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在微信小程序中连接MQTT服务器并控制ESP8266 LED灯,需要进行以下几个步骤: 1. 搭建MQTT服务器 可以选择自己搭建一台MQTT服务器,或者使用第三方的MQTT服务器提供商,例如EMQ X, HiveMQ等。在这里我们以EMQ X为例,按照官方文档进行安装和配置。 2. 在小程序中引入MQTT.js 使用MQTT.js库实现与MQTT服务器连接和数据通信。可以通过npm或者直接下载在项目中使用。 3. 连接MQTT服务器 使用MQTT.js库提供的mqtt.connect()方法连接MQTT服务器,需要指定MQTT服务器的IP地址和端口号。例如: ```javascript var mqtt = require('mqtt') var client = mqtt.connect('mqtt://localhost:1883') ``` 4. 发布消息 使用MQTT.js库提供的client.publish()方法向MQTT服务器发布消息。例如: ```javascript client.publish('topic', 'hello world') ``` 在这里,‘topic’是消息的主题,‘hello world’是消息的内容。 5. 订阅主题 使用MQTT.js库提供的client.subscribe()方法订阅MQTT服务器上的特定主题。例如: ```javascript client.subscribe('topic') ``` 6. 接收消息 使用MQTT.js库提供的client.on()方法监听MQTT服务器发送过来的消息。例如: ```javascript client.on('message', function (topic, message) { // message is Buffer console.log(message.toString()) client.end() }) ``` 7. 控制ESP8266 LED灯 在ESP8266上运行一个MQTT客户端程序,订阅特定的主题,可以接收来自MQTT服务器发布的消息。根据接收到的消息控制LED灯的开关状态。例如: ```c++ #include <PubSubClient.h> #include <WiFiClient.h> const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; const char* mqtt_server = "mqtt_server_IP_address"; const char* clientID = "ESP8266Client"; const char* topic = "led"; int led = 2; WiFiClient espClient; PubSubClient client(espClient); void setup() { pinMode(led, OUTPUT); Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); client.setServer(mqtt_server, 1883); client.setCallback(callback); while (!client.connected()) { Serial.println("Connecting to MQTT Broker..."); if (client.connect(clientID)) { Serial.println("Connected to MQTT Broker"); client.subscribe(topic); } else { Serial.print("MQTT connection failed with state "); Serial.println(client.state()); delay(2000); } } } 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(); if ((char)payload[0] == '1') { digitalWrite(led, HIGH); } else if ((char)payload[0] == '0') { digitalWrite(led, LOW); } } void loop() { if (!client.connected()) { reconnect(); } client.loop(); } void reconnect() { while (!client.connected()) { Serial.println("Connecting to MQTT Broker..."); if (client.connect(clientID)) { Serial.println("Connected to MQTT Broker"); client.subscribe(topic); } else { Serial.print("MQTT connection failed with state "); Serial.println(client.state()); delay(2000); } } } ``` 在上面的代码中,订阅了一个名为‘led’的主题,当接收到‘1’时,将LED灯打开;当接收到‘0’时,将LED灯关闭。 8. 在小程序中控制LED灯 在小程序中使用MQTT.js库实现向MQTT服务器发布消息,控制ESP8266 LED灯的开关状态。例如: ```javascript // 打开LED灯 client.publish('led', '1') // 关闭LED灯 client.publish('led', '0') ``` 以上就是在微信小程序中连接MQTT服务器实现控制ESP8266 LED灯的全部步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Eiker_3169

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

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

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

打赏作者

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

抵扣说明:

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

余额充值