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密码错误或不存在\"}");
}
}