明珠的个人博客

是谁告诉你,你是赤裸的?

0%

物联网之MQTT服务端

MQTT客户端连接服务端光有理论知识还不够,以下为如何使用电脑客户端和ESP8266客户端来连接MQTT服务端。

电脑客户端连接MQTT服务端

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

通过MQTTfx软件,电脑将会成为一台MQTT客户端。

可以通过以下两个途径下载到MQTTfx软件。

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

也可以通过太极创客网站的下载页面获取此软件。请点击这里进入太极创客网站MQTTfx下载链接列表。

特别提示一点,尽量使用以上的MQTTfx官网下载此软件,因为官网上的软件版本肯定是最新的,用新不用旧。

接下来实际使用MQTTfx客户端来尝试连接服务端。具体操作方法,请见如下链接里的视频:
MQTTfx客户端设置和连接客户端

ESP8266连接MQTT服务端

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

作者名:Nick O’Leary
官网地址:https://pubsubclient.knolleary.net/
GitHub:https://github.com/knolleary/pubsubclient/
百度网盘下载: https://pan.baidu.com/s/12MHGbdfiOdwOGip5RMSSEQ 提取码: sizy

将PubSubClient库安装后,我们就可以使用该库进行开发了。假如不知道如何安装该库,可以参考这里

以下是ESP8266连接MQTT服务端的示例程序。关于本程序的详细讲解,还是见这个视频说明:MQTTfx客户端设置和连接客户端

按部就班,设置好后输出如下:

附:示例程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/**********************************************************************
项目名称/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("");
}

附2:公用MQTT服务器列表