通信猫物联网平台配置
通信猫物联网平台配置


实验代码:
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
const char* WIFI_SSID = "aaaa"; // WiFi名
const char* WIFI_PASSWORD = "1234567890"; // WiFi密码
const char* MQTT_SERVER = "120.27.235.176"; // mqtt通讯地址
const int MQTT_PORT = 1883; // mqtt端口
const char* MQTT_CLIENTID = "esp8266_client_01"; // 改成你自己的唯一ID
const char* MQTT_TOPIC1 = "test/chat1"; // 订阅主题
const char* MQTT_TOPIC2 = "test/chat2"; // 发布主题
WiFiClient espClient;
PubSubClient client(espClient);
void callback(char* topic, byte* payload, unsigned int length) {
// 只打印必要信息,减少串口负载
Serial.print("收到消息: ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
}
void reconnect() {
while (!client.connected()) {
Serial.print("连接MQTT...");
if (client.connect(MQTT_CLIENTID)) {
Serial.println("成功!");
client.subscribe(MQTT_TOPIC1);
} else {
Serial.print("失败,状态码: ");
Serial.println(client.state());
delay(5000);
}
}
}
void setup() {
Serial.begin(115200);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi已连接");
client.setServer(MQTT_SERVER, MQTT_PORT);
client.setCallback(callback);
client.setKeepAlive(15); // 15秒心跳包,防止被踢
}
void loop() {
// WiFi断线自动重连
if (WiFi.status() != WL_CONNECTED) {
WiFi.reconnect();
delay(5000);
return;
}
// MQTT断线自动重连
if (!client.connected()) {
reconnect();
}
client.loop();
// 降低发送频率,减少服务器压力
static unsigned long lastSend = 0;
if (millis() - lastSend > 5000) { // 5秒发一次,不要太频繁
lastSend = millis();
String msg = "ESP8266在线: " + String(millis()/1000) + "秒";
client.publish(MQTT_TOPIC2, msg.c_str());
Serial.println("已发送消息");
}
}

实现单片机串口通信
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
// ======================== 【配置区】========================
const char* WIFI_SSID = "aaaa"; // WiFi名称
const char* WIFI_PASSWORD = "1234567890"; // WiFi密码
const char* MQTT_SERVER = "120.27.235.176"; // MQTT服务器IP
const int MQTT_PORT = 1883; // MQTT端口
const char* MQTT_CLIENTID = "esp8266_client_01"; // 客户端ID(唯一)
const char* MQTT_TOPIC1 = "test/chat1"; // 订阅主题(接收消息)
const char* MQTT_TOPIC2 = "test/chat2"; // 发布主题(发送消息)
// ==========================================================
WiFiClient espClient;
PubSubClient client(espClient);
// LED 状态指示灯引脚
#define LED_PIN 2
// 定时器变量(用于LED闪烁、心跳)
unsigned long ledTime = 0;
bool ledState = false;
// ==========================================================
// 【MQTT回调函数】:当收到订阅主题的消息时,自动进入这里
// ==========================================================
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("【MQTT收到】");
Serial.print(topic);
Serial.print(" → ");
// 打印收到的消息内容
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
}
// ==========================================================
// 【MQTT重连函数】:断开后自动重连,并重新订阅主题
// ==========================================================
void reconnect() {
// 循环尝试重连,直到成功
while (!client.connected()) {
Serial.print("正在连接MQTT服务器...");
// 尝试连接MQTT
if (client.connect(MQTT_CLIENTID)) {
Serial.println("连接成功!");
client.subscribe(MQTT_TOPIC1); // 重新订阅
Serial.print("已订阅主题:");
Serial.println(MQTT_TOPIC1);
} else {
// 连接失败,打印错误码,5秒后重试
Serial.print("失败,错误码:");
Serial.println(client.state());
Serial.println("5秒后重试...");
delay(5000);
}
}
}
// ==========================================================
// 【初始化】:只执行一次
// ==========================================================
void setup() {
Serial.begin(115200); // 初始化串口波特率115200
pinMode(LED_PIN, OUTPUT); // 设置LED引脚为输出模式
digitalWrite(LED_PIN, HIGH); // 上电默认熄灭LED
Serial.println("\n==================================");
Serial.println(" ESP8266 串口+MQTT 透传程序");
Serial.println("==================================\n");
// ========== 连接WiFi ==========
Serial.print("正在连接WiFi:");
Serial.println(WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi 连接成功!");
Serial.print("IP地址:");
Serial.println(WiFi.localIP());
// ========== MQTT初始化 ==========
client.setServer(MQTT_SERVER, MQTT_PORT); // 设置服务器地址+端口
client.setCallback(callback); // 设置消息接收回调
client.setKeepAlive(15); // 心跳包:15秒一次(防止掉线)
}
// ==========================================================
// 【主循环】:反复执行
// ==========================================================
void loop() {
// ========== 1. WiFi 掉线自动重连 ==========
if (WiFi.status() != WL_CONNECTED) {
Serial.println("WiFi 断开,正在重连...");
WiFi.reconnect();
delay(3000);
return; // 没连WiFi前不执行后续代码
}
// ========== 2. MQTT 掉线自动重连 ==========
if (!client.connected()) {
reconnect();
}
// ========== 3. MQTT 心跳维持 ==========
client.loop();
// ========== 4. LED 状态指示灯 ==========
// WiFi + MQTT 都在线 → 常亮
// 任意一个断开 → 闪烁
if (WiFi.status() == WL_CONNECTED && client.connected()) {
digitalWrite(LED_PIN, LOW); // 常亮
} else {
// 500ms闪烁一次
if (millis() - ledTime > 500) {
ledTime = millis();
ledState = !ledState;
digitalWrite(LED_PIN, ledState ? LOW : HIGH);
}
}
// ========== 5. 串口透传 → MQTT发送 ==========
if (Serial.available() > 0) {
// 读取串口数据(直到换行)
String msg = Serial.readStringUntil('\n');
msg.trim(); // 去掉多余空格、换行符
if (msg.length() > 0) {
Serial.print("【串口发送】→ ");
Serial.println(msg);
// 把串口收到的内容通过MQTT发出去
client.publish(MQTT_TOPIC2, msg.c_str());
}
}
}

浙公网安备 33010602011771号