1、代码
关于连接wifi,我一开始看了官方文档一头雾水的,他还要去申请证书什么鬼的,后面看了其他博客才大致了解了
板子连接AP其实说起来还是挺简单的,首先是一系列初始化,然后设置wifi模式,板子提供了三种,AP,STA,APSTA,分别就是ap,客户,ap+客户,这里选择了sta做客户端连接AP。
接着是利用其预设的结构体设定好ap的SSID和密码等信息,接着用函数将其配置到esp的wifi的config中,启动,连接即可,我的代码如下
/*
* Copyright (C) 2015-2017 Alibaba Group Holding Limited
*/
#include <stdio.h>
#include <aos/kernel.h>
#include "driver/gpio.h"
#include "sdkconfig.h"
#include "esp_wifi.h"
#include "esp_system.h"
#include "esp_event.h"
#include "esp_event_loop.h"
#include "nvs_flash.h"
esp_err_t event_handler(void *ctx, system_event_t *event)
{
return ESP_OK;
}
int application_start(int argc, char *argv[])
{
// int count = 0;
// printf("nano entry here!\r\n");
nvs_flash_init();
tcpip_adapter_init();
//ESP_ERROR_CHECK( esp_event_loop_init(event_handler, NULL) );
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
ESP_ERROR_CHECK( esp_wifi_init(&cfg) );
ESP_ERROR_CHECK( esp_wifi_set_storage(WIFI_STORAGE_RAM) );
ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_STA) );
wifi_config_t sta_config = {
.sta = {
.ssid = "MERCURY_70D438",
.password = "*********",
.bssid_set = false
}
};
ESP_ERROR_CHECK( esp_wifi_set_config(WIFI_IF_STA, &sta_config) );
ESP_ERROR_CHECK( esp_wifi_start() );
ESP_ERROR_CHECK( esp_wifi_connect() );
wifi_ap_record_t ap_info;
esp_wifi_sta_get_ap_info(&ap_info);
while(1) {
printf("macAddress:%s SSID:%s", ap_info.bssid,ap_info.ssid);
aos_msleep(3000);
}
}
2、一些问题
- 首先是一个大问题,在我第一次连接wifi成功后,第二次wifi连接就始终连不上,反复出现SYSTEM_EVENT_STA_DISCONNECTED,查了资料,说是信道相关的问题,解决参考这篇文章,不过按照博主的方法更该了文件后虽然开始可以连上但是会时不时地掉线再次出现断线事件,不清楚是我的设备问题还是什么
- 其次是关于include的问题,开始的时候#include"esp_wifi.h"里的#include"esp_event.h"里的#include "tcpip_adapter.h"会出现找不到文件的问题,然而用IDE的跳转是可以正常跳转到这个头文件的,这个头文件在esp_event.h的前几级目录下,我尝试在编译配置文件中的include引用列表添加了这个目录,然而还是会报错,那我就直接在include的时候用了相对目录#include "../../../tcpip_adapter.h",问题才解决。
- 还有一个就是那个开启事件循环的函数ESP_ERROR_CHECK( esp_event_loop_init(event_handler, NULL) );一直报错,这个是在编译下载后跑在板子上的时候报的错,上面那个事件处理回调写得好像也没啥毛病,然后我也查了一些官方文档,没什么收获,就把这一行删掉了,然后就运行成功了,并也连上了wifi