ESP8266是怎么火起来的?毫无疑问就是他把WIFI模块的价格成功的打了下来,在我第一次看到ESP8266仅仅10元成本的开发板竟然可以连接WIFI时,知道对我幼小的心灵造成多大的震撼吗?一度带WIFI的连接要比带有线网络的连接要便宜很多,不过现在有线网络的板子价格也下来了,比如说MILKV-DUO39元的核心板不光提供有线网络还可以运行LINUX系统岂不是美哉。
所以既然我们开始学习ESP8266那么WIFI肯定是很重要的一个地方,我们这就开始吧,在开始前我们先把文档放上来:(Wi-Fi API — ESP8266 RTOS SDK Programming Guide documentation)
里面有两部分内容,一部分是WIFI的API,另外一部分是Smart Config,第二部分我们下一篇再说,我们先说第一部分,这里再班门弄斧说一下WIFI的两种模式,一种叫做Station模式(即STA模式或者Client模式),也就是我们目前手机一般打开WIFI的模式,去主动连接热点,其实就像他的名字一样客户端模式,另外一种是AP 模式(Access Point mode)翻译过来就是接入点模式,就是相当于路由器的模式咯,可以发送出自己的接入点名称供客户端模式去连接,当然了,还有一种模式就是他们两种模式的结合了,这里就不详细赘述了,详细可以看看官方文档里面有写。
这次我们先来研究一下ESP8266的AP模式,需要注意的我都写到注释里面了:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_spi_flash.h"
#include "driver/uart.h"
#include "esp_wifi.h"
#define EXAMPLE_ESP_WIFI_SSID "ESP8266Test"
#define EXAMPLE_ESP_WIFI_PASS "12345678"
#define EXAMPLE_MAX_STA_CONN 4
static void wifi_event_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data)
{
if (event_id == WIFI_EVENT_AP_STACONNECTED) {
wifi_event_ap_staconnected_t* event = (wifi_event_ap_staconnected_t*) event_data;
printf("station "MACSTR" join, AID=%d", MAC2STR(event->mac), event->aid);
fflush(stdout);
} else if (event_id == WIFI_EVENT_AP_STADISCONNECTED) {
wifi_event_ap_stadisconnected_t* event = (wifi_event_ap_stadisconnected_t*) event_data;
printf("station "MACSTR" leave, AID=%d", MAC2STR(event->mac), event->aid);
fflush(stdout);
}
}
void app_main()
{
uart_set_baudrate(0, 74880);
printf("Esp8266 Hello world!\n");
tcpip_adapter_init();
esp_event_loop_create_default();
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
esp_wifi_init(&cfg);
esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &wifi_event_handler, NULL);
wifi_config_t wifi_config = {
.ap = {
.ssid = EXAMPLE_ESP_WIFI_SSID,
.ssid_len = strlen(EXAMPLE_ESP_WIFI_SSID),
.password = EXAMPLE_ESP_WIFI_PASS,
.max_connection = EXAMPLE_MAX_STA_CONN,
.authmode = WIFI_AUTH_WPA_WPA2_PSK
},
};
esp_wifi_set_mode(WIFI_MODE_AP);
esp_wifi_set_config(ESP_IF_WIFI_AP, &wifi_config);
esp_wifi_start();
printf("wifi_init_softap finished. SSID:%s password:%s", EXAMPLE_ESP_WIFI_SSID, EXAMPLE_ESP_WIFI_PASS);
fflush(stdout);
while(true) {
vTaskDelay(10000 / portTICK_PERIOD_MS);
}
fflush(stdout);
esp_restart();
}
运行成功的截图在这里:
开始报的那两行MAC地址错误暂时还没找到解决BUG的问题,有说电压不稳的,但我感觉不是。
下一部分将会把ESP8266设置成为客户端模式,来连接路由器!
|