用esp8266也有一个月了,以前都是用的RTOS2.0版本的SDK,最近一个星期试了一下最新的RTOS3.1SDK,跟RTOS2.0的SDK还是有很大出入的,因此在编写例程时,将一些常用的api记录下来。
esp8266的RTOS3.1多了一个NVS分区,程序一开始就要初始化这个分区
nvs_flash_init();初始化NVS分区
接下来就是如何初始化wifi连接了
wifi_event_group=xEventGroupCreate();//创建一个事件标志组
tcpip_adapter_init(); //初始化TCP/IP堆栈
esp_event_loop_init(event_handler, NULL); //这个api会调用event_handler函数来处理wifi的状态事件
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();//初始化默认wifi的默认值
esp_wifi_init(&cfg); //初始化wifi
esp_wifi_set_storage(WIFI_STORAGE_RAM);设置wifi配置存储位置
wifi_config_t wifi_config={
.sta={
.ssid =SSID,
.password=PASSWORD,
}
}; //设置wifi配置信息,这里我们用的是station模式,所以只要设置ssid和password
esp_wifi_set_mode(WIFI_MODE_STA); //设置wifi模式
esp_wifi_set_config(ESP_IF_WIFI_STA,&wifi_config); //将配置信息,写入wifi
esp_wifi_start();//启动wifi
这里呢,我们只是启动了wifi,并没有连接路由器,一般我们会将wifi的连接等操作放在状态事件event_handler处理
static esp_err_t event_handler(void *ctx, system_event_t *event)
{
switch (event->event_id)
{
case SYSTEM_EVENT_STA_START: //表示wifi启动就绪
esp_wifi_connect();//连接路由器
break;
case SYSTEM_EVENT_STA_GOT_IP: //分配得到IP,就表示已经连上路由器咯
xEventGroupSetBits(wifi_event_group, CONNECTED_BIT);//设置事件标志位
printf("esp_wifi_connect");
break;
case SYSTEM_EVENT_STA_DISCONNECTED: //断开连接
esp_wifi_connect();//当esp8266因为异常断开连接时,我们继续连接
xEventGroupClearBits(wifi_event_group, CONNECTED_BIT);//清除事件标志位,等连接wifi后重新设置
break;
default:
break;
}
return ESP_OK;
}
这几个只是常用网络连接的状态,当然还有其他的状态,都在system_event_id_t这个枚举里,好了,到这里我们已经连接上路由器了