代码

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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include <ESP8266WiFi.h>
/* 依赖 PubSubClient 2.4.0 */
#include <PubSubClient.h>
/* 依赖 ArduinoJson 5.13.4 */
#include <ArduinoJson.h>

/* 连接您的WIFI SSID和密码 */
#define WIFI_SSID "Lengff-2.4G"
#define WIFI_PASSWD ""

/* MQTT 配置信息 */
#define MQTT_SERVER "112.74.111.111"
#define MQTT_PORT 61613
#define MQTT_USRNAME "admin"
#define MQTT_PASSWD "password"
#define CLIENT_ID "lengff-iot-esp8266"
#define SUBSCRIBE_TOPIC "subscribe"
#define PUBLISH_TOPIC "publish"
unsigned long lastMs = 0;

WiFiClient espClient;
PubSubClient client(espClient);

/**
网络回调方法
*/
void callback(char *topic, byte *payload, unsigned int length)
{
Serial.print("订阅到的消息:");
Serial.print(topic);
Serial.print("] ");
payload[length] = '\0';
Serial.println((char *)payload);
const char* json = (char *)payload;
Serial.println(json);
}


void wifiInit()
{
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASSWD);
while (WiFi.status() != WL_CONNECTED)
{
delay(1000);
Serial.println("WiFi not Connect");
}

Serial.println("Connected to AP");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
/* 连接WiFi之后,连接MQTT服务器 */
client.setServer(MQTT_SERVER, MQTT_PORT);
client.setCallback(callback);
}

/**
确认mqtt服务连接是否成功,如果连接成功就登录mqtt
*/
void mqttCheckConnect() {
while (!client.connected()) {
Serial.println("连接MQTT服务器成功");
if (client.connect(CLIENT_ID, MQTT_USRNAME, MQTT_PASSWD)) {
Serial.println("登录MQTT成功");
// 连接成功时订阅主题
client.subscribe(SUBSCRIBE_TOPIC);
} else {
Serial.println(MQTT_USRNAME);
Serial.println(CLIENT_ID);
Serial.println(MQTT_PASSWD);
Serial.println("MQTT 连接异常:");
Serial.println(client.state());
delay(5000);
}
}
}

/**
向mqtt服务端发送消息
*/
void mqttIntervalPost() {
boolean d = client.publish(PUBLISH_TOPIC, "你吗死啦");
if (d) {
Serial.println("publish: 失败 - 0 成功 - 1");
} else {
Serial.println("publish: 失败 - 1 成功 - 0");
}
}


void setup() {
pinMode(LED_BUILTIN, OUTPUT);
/* initialize serial for debugging */
Serial.begin(115200);
Serial.println("Demo Start");
wifiInit();
}


// the loop function runs over and over again forever
void loop()
{
if (millis() - lastMs >= 1000 * 5) {
lastMs = millis();
mqttCheckConnect();
/* 上报消息心跳周期 */
mqttIntervalPost();
}
client.loop();
}