1.微信搜索:智件微控 小程序注册


2.注册成功后先到 设备页面 绑定新设备,这一步很关键,自编数字加字母,记住你自编的设备ID等会烧录设备需要改。

2.1显示设备就是自编成功了

3.在设备界面长按设备跳出弹窗可以对设备进行删除和重命名。


4.烧录固件所需工具以及固件 Arduino IDE 下载好安装好必须的库

4.1带一路继电器固件

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>

// ====================== 核心配置 ======================
const char* AP_SSID = "AP-666";
const char* AP_PWD  = "1235678";

const char* DEVICE_ID = "duxbk666";  //这里改成你自编的设备ID
const char* API_KEY   = "GuJian_20260509";  // 密钥不可修改否则无法和小程序通信

#define RELAY_PIN D1          // 继电器控制脚,根据实际情况修改
#define RESET_KEY_PIN D3      // 复位键
#define RESET_TIME 3000       // 长按3秒复位

ESP8266WebServer server(80);
bool needConfig = false;
unsigned long lastReconnectAttempt = 0;
const unsigned long reconnectInterval = 5000;

bool connectWiFi();
void handleSetWiFi();
void checkResetKey();
void startAP();

// ====================== 初始化 ======================
void setup() {
  Serial.begin(115200);
  pinMode(RELAY_PIN, OUTPUT);
  digitalWrite(RELAY_PIN, LOW);  // 初始关闭
  
  pinMode(RESET_KEY_PIN, INPUT_PULLUP);

  WiFi.persistent(true);
  WiFi.mode(WIFI_STA);
  delay(100);

  if (!connectWiFi()) {
    startAP();
  } else {
    Serial.println("\nWiFi 连接成功!");
    Serial.println("IP: " + WiFi.localIP().toString());
  }
}

// ====================== 主循环 ======================
void loop() {
  checkResetKey();

  if (needConfig) {
    server.handleClient();
    delay(20);
    return;
  }

  if (WiFi.status() != WL_CONNECTED) {
    if (millis() - lastReconnectAttempt > reconnectInterval) {
      lastReconnectAttempt = millis();
      connectWiFi();
    }
    delay(100);
    return;
  }

  // 心跳上报
  static uint32_t heart_t = 0;
  if (millis() - heart_t > 3000) {
    heart_t = millis();
    WiFiClient c; HTTPClient h;
    String url = "http://47.107.153.124:59005/online.php?id=" + String(DEVICE_ID) + "&act=beat&key=" + String(API_KEY);
    h.begin(c, url);
    h.setTimeout(2000);
    h.GET();
    h.end();
    Serial.println("✅ 心跳正常");
  }

  // 获取服务器指令 → 控制继电器
  static uint32_t cmd_t = 0;
  if (millis() - cmd_t > 500) {
    cmd_t = millis();
    WiFiClient c; HTTPClient h;
    String url = "http://47.107.153.124:59005/device_api.php?act=get&device=" + String(DEVICE_ID) + "&key=" + String(API_KEY);
    h.begin(c, url);
    h.setTimeout(2000);
    
    int state = 0;
    if (h.GET() == 200) state = h.getString().toInt();
    h.end();

    // 继电器开关
    if (state == 1) {
      digitalWrite(RELAY_PIN, HIGH);
      Serial.println("✅ 继电器打开");
    } else {
      digitalWrite(RELAY_PIN, LOW);
      Serial.println("✅ 继电器关闭");
    }
  }

  delay(100);
}

// ====================== WiFi连接 ======================
bool connectWiFi() {
  if (WiFi.status() == WL_CONNECTED) return true;
  WiFi.begin();
  int timeout = 0;
  while (WiFi.status() != WL_CONNECTED && timeout < 25) {
    delay(500);
    timeout++;
  }
  return WiFi.status() == WL_CONNECTED;
}

// ====================== 复位键 ======================
void checkResetKey() {
  if (digitalRead(RESET_KEY_PIN) == LOW) {
    delay(50);
    if (digitalRead(RESET_KEY_PIN) == LOW) {
      uint32_t t = millis();
      while (digitalRead(RESET_KEY_PIN) == LOW) {
        delay(50);
        if (millis() - t > RESET_TIME) {
          Serial.println("恢复出厂");
          WiFi.disconnect(true);
          delay(100);
          startAP();
          return;
        }
      }
    }
  }
}

// ====================== AP配网 ======================
void startAP() {
  needConfig = true;
  server.stop();
  
  WiFi.mode(WIFI_AP);
  delay(200);
  WiFi.softAP(AP_SSID, AP_PWD);
  
  server.on("/setWiFi", HTTP_POST, handleSetWiFi);
  server.begin();
  Serial.println("AP 已启动:AP-666");
}

void handleSetWiFi() {
  String ssid = server.arg("ssid");
  String pwd = server.arg("pwd");

  WiFi.begin(ssid.c_str(), pwd.c_str());
  int timeout = 0;
  while (WiFi.status() != WL_CONNECTED && timeout < 30) {
    delay(500);
    timeout++;
  }

  if (WiFi.status() == WL_CONNECTED) {
    server.send(200, "application/json", "{\"code\":1,\"msg\":\"配网成功!设备已重启\"}");
    delay(600);
    
    needConfig = false;
    server.stop();
    WiFi.softAPdisconnect(true);
    WiFi.mode(WIFI_STA);
    ESP.restart();
  } else {
    server.send(200, "application/json", "{\"code\":0,\"msg\":\"WiFi密码错误或不存在\"}");
  }
}