前言:
玩esp-01有断时间了,自己使用homeassistant搭建后台控制中心,esp-01做终端控制灯、控制风扇、温度检测等等。但在控制之前esp-01需要配网,说到配网baidu搜索到最多应该就是smartconfig,以及微信的airkiss。但是不管是smartconfi或airkiss配置网,配置过程很不稳定,经常无法配置成功然后就只能断电重来;另一个原因是smartconfig需要app上配置很是麻烦。以上原因让我去寻找找到了另一种配网方式webconfig
webconfig基本思路
基本思路是ESP8266工作AP模式下,作为TCP Server监听TCP Client的连接。因为网页HTTP默认的端口是80,所以ESP8266作为TCP Server的端口需要设置为80。电脑连接上ESP8266的AP后,网页访问默认IP地址192.168.4.1,此时ESP8266就会收到来自网页的HTTP的Get请求,此请求数据为HTML格式。ESP8266收到请求后,读出保存在Flash中的HTML格式网页,并将带有HTML应答头的HTML网页发送给网页,网页端就可以显示出网页。
实现过程
从flash中读取上次保留的wifi信息,若有wifi信息进入station模式反之进程softap模式等待配网
void ICACHE_FLASH_ATTR
init_done_cb_init(void)
{
struct station_config stconfig;
struct softap_config apconfig;
print_chip_info();
os_memset(&stconfig, 0, sizeof(struct station_config));
wifi_station_get_config_default(&stconfig);
if(os_strlen(stconfig.ssid) != 0){
os_printf("ssid[%s]pass[%s]", stconfig.ssid, stconfig.password);
wifi_set_opmode(STATION_MODE);
wifi_station_set_reconnect_policy(TRUE);
wifi_station_set_auto_connect(TRUE);
}
else{
wifi_set_opmode(SOFTAP_MODE);
wifi_softap_get_config(&apconfig);
os_memset(apconfig.ssid, 0, 32);
os_memset(apconfig.password, 0, 64);
os_sprintf(apconfig.ssid,"ESP_%X",system_get_chip_id());
apconfig.authmode = AUTH_OPEN;
apconfig.ssid_len = 0;
apconfig.max_connection = 5;
wifi_softap_set_config(&apconfig);
wifi_station_set_reconnect_policy(FALSE);
wifi_station_set_auto_connect(FALSE);
wifi_station_disconnect();
}
#if PLUG_DEVICE
user_plug_init();
#elif FAN_DEVICE
user_fan_init();
#elif DS18B