`
#include <ESP8266WiFi.h>
#include <smartconfig.h>
// 回调函数
void smartConfigCallback(uint32_t st, void* result)
{
sc_status status = (sc_status) st;
Serial.printf("[SmartConfig] status:%d\n", status);
if (status == SC_STATUS_FIND_CHANNEL) {
Serial.println("正在扫描信道... 请打开 ESP-Touch App 开始配网");
}
else if (status == SC_STATUS_GETTING_SSID_PSWD) {
Serial.println("正在接收 SSID 和密码...");
if (result != NULL) {
sc_type type = (sc_type)result;
if (*type == SC_TYPE_ESPTOUCH) {
Serial.println("协议类型: ESP-Touch");
} else if (*type == SC_TYPE_AIRKISS) {
Serial.println("协议类型: AirKiss");
}
}
}
else if (status == SC_STATUS_LINK) {
Serial.println("已成功获取 SSID 和密码!正在连接路由器...");
if (result != NULL) {
struct station_config *sta_conf = (struct station_config *)result;
// 保存配置并连接
wifi_station_set_config(sta_conf);
wifi_station_disconnect();
wifi_station_connect();
}
}
else if (status == SC_STATUS_LINK_OVER) {
Serial.println("SmartConfig 配网成功!已连接到路由器");
if (result != NULL) {
uint8_t *ip = (uint8_t*)result;
Serial.printf("手机端 IP: %d.%d.%d.%d\n", ip[0], ip[1], ip[2], ip[3]);
}
smartconfig_stop(); // 停止 SmartConfig,释放资源
Serial.print("设备本地 IP: ");
Serial.println(WiFi.localIP());
}
else {
Serial.printf("未知状态: %d\n", status);
}
}
void setup() {
Serial.begin(115200);
delay(1000);
// We start by connecting to a WiFi network
/* Explicitly set the ESP8266 to be a WiFi-client, otherwise, it by default,
would try to act as both a client and an access-point and could cause
network-issues with your other WiFi-devices on your WiFi-network. */
WiFi.mode(WIFI_STA);
Serial.println(smartconfig_get_version());
esptouch_set_timeout(30);
if(smartconfig_start(reinterpret_cast<sc_callback_t>(smartConfigCallback), 1))
{
Serial.println("SmartConfig 已启动,等待手机发送配置...");
} else {
Serial.println("SmartConfig 启动失败!");
return;
}
}
void loop() {
}`
`
#include <ESP8266WiFi.h>
#include <smartconfig.h>
// 回调函数
void smartConfigCallback(uint32_t st, void* result)
{
sc_status status = (sc_status) st;
Serial.printf("[SmartConfig] status:%d\n", status);
if (status == SC_STATUS_FIND_CHANNEL) {
Serial.println("正在扫描信道... 请打开 ESP-Touch App 开始配网");
}
else if (status == SC_STATUS_GETTING_SSID_PSWD) {
Serial.println("正在接收 SSID 和密码...");
if (result != NULL) {
sc_type type = (sc_type)result;
if (*type == SC_TYPE_ESPTOUCH) {
Serial.println("协议类型: ESP-Touch");
} else if (*type == SC_TYPE_AIRKISS) {
Serial.println("协议类型: AirKiss");
}
}
}
else if (status == SC_STATUS_LINK) {
Serial.println("已成功获取 SSID 和密码!正在连接路由器...");
}
else if (status == SC_STATUS_LINK_OVER) {
Serial.println("SmartConfig 配网成功!已连接到路由器");
}
else {
Serial.printf("未知状态: %d\n", status);
}
}
void setup() {
Serial.begin(115200);
delay(1000);
// We start by connecting to a WiFi network
/* Explicitly set the ESP8266 to be a WiFi-client, otherwise, it by default,
would try to act as both a client and an access-point and could cause
network-issues with your other WiFi-devices on your WiFi-network. */
WiFi.mode(WIFI_STA);
Serial.println(smartconfig_get_version());
esptouch_set_timeout(30);
if(smartconfig_start(reinterpret_cast<sc_callback_t>(smartConfigCallback), 1))
{
Serial.println("SmartConfig 已启动,等待手机发送配置...");
} else {
Serial.println("SmartConfig 启动失败!");
return;
}
}
void loop() {
}`