一:简述
硬件:硬件为ESP-LAUNCHER开发板(使用GPIO5口)。
需求:8266SDK开发,使用官方文档推荐调用函数。
协助:EspTouch手机软件
二:简单认识8266联网方式
在这次实验中,用到的联网方式是“一键入网”,也就是快连模式。在这过程中8266处于station状态,相当于一部手机。手机APP将所用WIFI的SSID和密码编码到UDP报文中,通过广播包或者组播报发送,8266监听空中所有报文,当接收到相应UDP报文后进行解码,获取要用到的SSID和密码,从而,连接路由器。
三:代码
SmartConfig接口位于/ESP8266_NONOS_SDK/include/smartconfig.h。
注:开启 SmartConfig 功能前,请先确保 AP 已经开启。
smartconfig_start 调用之前要先确定快连模式的协议类型以及8266处于station状态
详细函数说明,见官方文档SmartConfig 接口这一章节。
程序:
//官方已给的配网函数
void ICACHE_FLASH_ATTR smartconfig_done(sc_status status, void *pdata) {
switch (status) {
//连接未开始,请勿在此阶段开始连接
case SC_STATUS_WAIT:
os_printf("SC_STATUS_WAIT\n");
break;
//发现信道
case SC_STATUS_FIND_CHANNEL:
os_printf("SC_STATUS_FIND_CHANNEL\n");
break;
//得到wifi名字和密码
case SC_STATUS_GETTING_SSID_PSWD:
os_printf("SC_STATUS_GETTING_SSID_PSWD\n");
sc_type *type = pdata;
if (*type == SC_TYPE_ESPTOUCH) {
os_printf("SC_TYPE:SC_TYPE_ESPTOUCH\n");
} else {
os_printf("SC_TYPE:SC_TYPE_AIRKISS\n");
}
break;
case SC_STATUS_LINK:
os_printf("SC_STATUS_LINK\n");
struct station_config *sta_conf = pdata;
wifi_station_set_config(sta_conf);
wifi_station_disconnect();
wifi_station_connect();
break;
//成功获取到IP,连接路由完成。
case SC_STATUS_LINK_OVER:
os_printf("SC_STATUS_LINK_OVER \n\n");
if (pdata != NULL) {
uint8 phone_ip[4] = { 0 };
os_memcpy(phone_ip, (uint8*) pdata, 4);
os_printf("Phone ip: %d.%d.%d.%d\n", phone_ip[0], phone_ip[1], phone_ip[2], phone_ip[3]);
}
//停止配置
smartconfig_stop();
break;
}
}
void ICACHE_FLASH_ATTR
user_init(void)
{
uart_init(115200, 115200);//设置串口0和串口1的波特率
os_printf("SDK version:%s\n", system_get_sdk_version());
//一键配网练习
os_printf("-_- -_- -_-开始入网-_- -_- -_-\n-----");
smartconfig_set_type(SC_TYPE_ESPTOUCH); //设置WiFi快连模式,SC_TYPE_ESPTOUCH,SC_TYPE_AIRKISS,SC_TYPE_ESPTOUCH_AIRKISS
wifi_set_opmode(STATION_MODE);//设置WiFi工作模式为设备终端
smartconfig_start(smartconfig_done);//开始配网
}