-
设置wifi模式为AP_STA
WiFi.mode(WIFI_AP_STA);
-
配置 softAP(您可以硬编码 SSID 和密码或使用具有默认值的配置文件)
IP地址 apIP(192, 168, 1, 1);
WiFi.mode(WIFI_AP);
WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0));
WiFi.softAP(apname, password);
(可选)使用 DNSServer 库,您可以设置 DNS 服务器
使用 ESP8266WebServer 库,您可以设置 HTTP 服务器
-
调用服务器对象的 onNotFound 方法,传递一个在 SPIFF 或 SD(或两者,如果您同时使用这两个接口)上搜索所请求文件的闭包并将其流式传输。
server->onNotFound
(
[&]()
{
if(!handleFileRead(server->uri()))
server->send(404, "text/plain", "FileNotFound");
}
);
- 调用 on 方法,以便它需要一个名为 networks.json 的文件(您可以指定另一个名称)。此方法流式传输具有所有可用网络 SSID、信号级别和安全模式的 json 字符串。要使用此代码,您应该包含 ArduinoJson 库
server->on("/networks.json", &
{
字符串 json;
int numNetworks,我,j,rssi;
静态JsonBuffer jsonBuffer;
JsonArray& 网络 = jsonBuffer.createArray();
对于(j = 0;j
if (WiFi.encryptionType(j) != 7)
network["auth"] = 0;
else
network["auth"] = 1;
rssi = WiFi.RSSI(j);
if (rssi < -90)
network["signal"] = 1;
else if (rssi < -80)
network["signal"] = 2;
else if (rssi < -70)
network["signal"] = 3;
else if (rssi < -67)
network["signal"] = 4;
else if (rssi < -30)
network["signal"] = 5;
}
}
networks.printTo(json);
server->send(200, "application/json", json);
Serial.println("handleFileRead: /networks.json");
}
);
-
再次调用 on 方法以期待配置:
server->on("/configure", &
{ //处理程序
//添加一个新行
文件配置;
文件 file = SPIFFS.open("/resp.htm", "r");
SPIFFS.remove(configFile);
静态JsonBuffer jsonBuffer;
JsonObject& root = jsonBuffer.createObject();
配置 = SPIFFS.open(configFile, "w"); // 稍后添加一些备份逻辑
如果(!文件)
{
server->send(404, "text/plain", "File Not Found");
返回;
}
for (int i = 0; i args(); i++)
{
根[服务器->argName(i)] = 服务器->arg(i);
if(服务器->argName(i).equals("ssid"))
{
root["wifissid"] = 服务器->arg(i);
}
if(server->argName(i).equals("password"))
{
root["wifipassword"] = server->arg(i);
}
}
server->streamFile(file, "text/html");
root.printTo(config);
文件.close();
config.close();
}
- 创建一个网页,该网页读取名为 /networks.json 的文件以填充表单中的可用网络列表。当用户选择一个网络时,让页面要求输入密码(我不会为此提供代码,因为实际上有数百万种方法可以做到这一点)。您应该在此页面上使用 javascript。如果您想使用任何花哨的 javascript 插件,例如 jquery、bootstrap 或 angular,您可以使用它,但请记住 ESP8266HttpServer 库可能对较大的文件表现不佳(我设法将 jquery 压缩到 27kb 并且在这个大小上没有问题) .表单应该 GET 到“/config”。
-
您将获得一个包含 JSON 的简洁配置文件,可用于配置 STA SSID 和密码。
configWifi(){
文件配置;
int 文件长度;
诠释标记;
整数结果;
无符号字符 mac[6];
字符 * 缓冲区 = NULL;
静态JsonBuffer jsonBuffer;
wifiConnection = new WiFiClient();
WiFi.mode(WIFI_STA);
WiFi.mac地址(mac);
hex2str(this->clientid, (char *)mac, 6);
配置 = SPIFFS.open(configFile, "r");
如果(!配置)
{
config.close();
返回;
}
如果 (config.size()
缓冲区 = (char *) calloc(config.size() + 1, 1);
config.readBytes(缓冲区,config.size());
config.close();
Serial.println(缓冲区);
JsonObject& root = jsonBuffer.parseObject(buffer);
如果 (!root.success())
{
config.close();
免费(缓冲区);
返回;
}
strcpy(wifi_ssid, root["wifissid"]);
strcpy(wifi_password, root["wifipassword"]);
Serial.print("SSID = ");
串行打印(wifi_ssid);
Serial.print("Pass = ");
Serial.println(wifi_password);
WiFi.begin(wifi_ssid, wifi_password);
免费(缓冲区);
Serial.println("初始化");
返回;
}