arduino esp32 通过wifi连接mqtt

使用模块

eps32 支持arduino开发,基于eps32-s

arduino导入eps32开发插件

添加开发板管理地址 https://github.com/espressif/arduino-esp32/releases/download/1.0.4/package_esp32_index.json

arduino esp32 通过wifi连接mqtt_第1张图片

arduino esp32 通过wifi连接mqtt_第2张图片
arduino esp32 通过wifi连接mqtt_第3张图片

添加开发板

在开发管理地址添加好后,打开开发板管理
arduino esp32 通过wifi连接mqtt_第4张图片

安装开发板
arduino esp32 通过wifi连接mqtt_第5张图片

esp32开发板安装好之后,选择开发板

arduino esp32 通过wifi连接mqtt_第6张图片

导入依赖库

#include 
#include 

定义变量

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 
#include 
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();
}

你可能感兴趣的:(arduino,arduino,物联网,wifi)