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模式,需要注意的我都写到注释里面了:
/* Hello World Example
This example code is in the Public Domain (or CC0 licensed, at your option.)
Unless required by applicable law or agreed to in writing, this
software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied.
*/
#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");
//没有这行会报DHCP错误的问题
tcpip_adapter_init();
//配置wifi前置先初始化
esp_event_loop_create_default();
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
esp_wifi_init(&cfg);
//注册wifi事件回调函数
esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &wifi_event_handler, NULL);
//配置wifi
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设置成为客户端模式,来连接路由器!
更多回帖