使用模块

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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐