arduino esp32 通过wifi连接mqtt
使用模块eps32 支持arduino开发,基于eps32-sarduino导入eps32开发插件添加开发板管理地址 https://github.com/espressif/arduino-esp32/releases/download/1.0.4/package_esp32_index.json添加开发板在开发管理地址添加好后,打开开发板管理安装开发板esp32开发板安装好之后,选择开发板导入
·
使用模块
eps32 支持arduino开发,基于eps32-s
arduino导入eps32开发插件
添加开发板管理地址 https://github.com/espressif/arduino-esp32/releases/download/1.0.4/package_esp32_index.json



添加开发板
在开发管理地址添加好后,打开开发板管理
安装开发板
esp32开发板安装好之后,选择开发板

导入依赖库
#include <WiFi.h>
#include <PubSubClient.h>
定义变量
const char* ssid = "wifi-SSID";
const char* password = "wifi密码";
#define JDQ 16
const char* MQTT_SERVER = "mqtt服务地址";
const int MQTT_PORT = 1883;//mqtt服务端口号
const char* MQTT_USRNAME = "admin";//mqtt账户
const char* MQTT_PASSWD = "123";//mqtt密码
const char* TOPIC = "home/devices/onoff/";//订阅主题
const char* CLIENT_ID = "scy-mqtt-client"; //当前设备的clientid标志
WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
设备初始化
Serial.begin(115200);//设置串行监听端口
delay(10);//等待10毫秒
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);//连接wifi
//等待wifi连接完成
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
pinMode(JDQ, OUTPUT);//设置引脚输出模式
client.setServer(MQTT_SERVER, MQTT_PORT); //设定MQTT服务器与使用的端口,1883是默认的MQTT端口
client.setCallback(callback); //设定回调方式,当ESP8266收到订阅消息时会调用此方法
连接方法
void reconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Attempt to connect
if (client.connect(CLIENT_ID,MQTT_USRNAME,MQTT_PASSWD)) {
Serial.println("connected");
// 连接成功时订阅主题
client.subscribe(TOPIC);
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}
回调方法
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]); // 打印主题内容
}
if ((char)payload[0] == '1') {
digitalWrite(JDQ, HIGH); // 亮灯
Serial.print(" 开灯");
} else {
digitalWrite(JDQ, LOW); // 熄灯
Serial.print(" 关灯");
}
Serial.println();
}
完整示例代码
/*
This sketch sends data via HTTP GET requests to data.sparkfun.com service.
You need to get streamId and privateKey at data.sparkfun.com and paste them
below. Or just customize this script to talk to other HTTP servers.
*/
#include <WiFi.h>
#include <PubSubClient.h>
const char* ssid = "ssid";
const char* password = "password";
#define JDQ 16
const char* MQTT_SERVER = "127.0.0.1";
const int MQTT_PORT = 1883;
const char* MQTT_USRNAME = "admin";
const char* MQTT_PASSWD = "adminadmin";
const char* TOPIC = "home/devices/onoff/";
const char* CLIENT_ID = "scy-mqtt-client"; //当前设备的clientid标志
WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
void setup()
{
Serial.begin(115200);
delay(10);
Serial.println();
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());
pinMode(JDQ, OUTPUT);
client.setServer(MQTT_SERVER, MQTT_PORT); //设定MQTT服务器与使用的端口,1883是默认的MQTT端口
client.setCallback(callback); //设定回调方式,当ESP8266收到订阅消息时会调用此方法
}
int value = 0;
void reconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
if (client.connect(CLIENT_ID,MQTT_USRNAME,MQTT_PASSWD)) {
Serial.println("connected");
// 连接成功时订阅主题
client.subscribe(TOPIC);
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
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]); // 打印主题内容
}
if ((char)payload[0] == '1') {
digitalWrite(JDQ, HIGH); // 亮灯
Serial.print(" 开灯");
} else {
digitalWrite(JDQ, LOW); // 熄灯
Serial.print(" 关灯");
}
Serial.println();
}
void loop()
{
if (!client.connected()) {
reconnect();
}
client.loop();
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)