设备自动传感任务一代码--Django

作者 by 超米 / 2024-12-14 / 暂无评论 / 100 个足迹

预览效果:--点我预览--

Django项目代码:

mqtt_project_Hr8Fa.zip

esp32部分

#include <WiFi.h>
#include <PubSubClient.h>

// WiFi 设置
const char* ssid = "your_SSID";           // 替换为你的Wi-Fi名称
const char* password = "your_PASSWORD";   // 替换为你的Wi-Fi密码

// MQTT 设置
const char* mqtt_server = "your_mqtt_broker_host";  // 替换为你的MQTT代理的IP地址或域名
const int mqtt_port = 1883;  // 默认端口是1883,如果你的MQTT代理使用其他端口,修改此值
const char* mqtt_user = "your_mqtt_username";  // 如果有的话,替换为你的MQTT用户名
const char* mqtt_password = "your_mqtt_password";  // 如果有的话,替换为你的MQTT密码

const char* mqtt_topic_light = "home/light";   // 灯的主题
const char* mqtt_topic_buzzer = "home/buzzer"; // 蜂鸣器的主题

// GPIO 引脚设置
const int light_pin = 23;  // 替换为你连接灯的GPIO引脚
const int buzzer_pin = 22; // 替换为你连接蜂鸣器的GPIO引脚

WiFiClient espClient;
PubSubClient client(espClient);

void setup() {
  // 启动串口监视器
  Serial.begin(115200);

  // 设置GPIO引脚为输出模式
  pinMode(light_pin, OUTPUT);
  pinMode(buzzer_pin, OUTPUT);
  digitalWrite(light_pin, LOW);  // 初始化灯为关闭
  digitalWrite(buzzer_pin, LOW); // 初始化蜂鸣器为关闭

  // 连接Wi-Fi
  connectWiFi();

  // 设置MQTT服务器
  client.setServer(mqtt_server, mqtt_port);
  client.setCallback(mqttCallback);
}

void loop() {
  // 保持与MQTT服务器的连接
  if (!client.connected()) {
    reconnect();
  }
  client.loop();
}

// 连接Wi-Fi函数
void connectWiFi() {
  Serial.println();
  Serial.print("Connecting to WiFi...");
  
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }

  Serial.println("Connected to WiFi");
}

// 重新连接MQTT服务器
void reconnect() {
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    
    // 尝试连接MQTT服务器
    if (client.connect("ESP32_Client", mqtt_user, mqtt_password)) {
      Serial.println("Connected to MQTT server");

      // 订阅主题
      client.subscribe(mqtt_topic_light);
      client.subscribe(mqtt_topic_buzzer);
    } else {
      Serial.print("Failed to connect, rc=");
      Serial.print(client.state());
      delay(5000);  // 如果连接失败,等待5秒再尝试
    }
  }
}

// 处理MQTT消息的回调函数
void mqttCallback(char* topic, byte* payload, unsigned int length) {
  // 将接收到的消息转换为字符串
  String message = "";
  for (int i = 0; i < length; i++) {
    message += (char)payload[i];
  }

  // 判断接收到的主题并根据消息控制GPIO
  if (String(topic) == mqtt_topic_light) {
    if (message == "ON") {
      digitalWrite(light_pin, HIGH);  // 打开灯
      Serial.println("Light ON");
    } else if (message == "OFF") {
      digitalWrite(light_pin, LOW);   // 关闭灯
      Serial.println("Light OFF");
    }
  } 
  else if (String(topic) == mqtt_topic_buzzer) {
    if (message == "ON") {
      digitalWrite(buzzer_pin, HIGH);  // 开启蜂鸣器
      Serial.println("Buzzer ON");
    } else if (message == "OFF") {
      digitalWrite(buzzer_pin, LOW);   // 关闭蜂鸣器
      Serial.println("Buzzer OFF");
    }
  }
}

独特见解