你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

ESP32作为接入点AP

[复制链接]
aimejia 发布时间:2018-5-31 10:16
本帖最后由 aimejia 于 2018-5-31 10:17 编辑
1 Z6 _& P7 L* _# F* j9 s5 K; e3 N  n8 I; H# z
作为接入点的第一个任务是使用esp_wifi_set_mode()函数设置ESP32 函数并传递请求,作为接入点,可以把ESP32设置为AP或者APSTA,即
7 Q1 t# C$ ~6 E
# O5 C: X7 _) x9 K/ f4 Yesp_wifi_set_mode(WIFI_MODE_STA)
4 E, I9 `$ }$ g4 ]. e或者9 S( ^5 [2 @  e
esp_wifi_set_mode(WIFI_MODE_APSTA)" P! d4 P% W$ @6 t# B) R4 K6 g8 V

2 w7 B- i, n' E. e8 x+ X: ?& Y接下来我们需要提供配置信息。 我们通过填充wifi_ap_config_t 来做到这一点。' r( V0 x2 I/ W5 Q

" _4 M1 `3 t1 M, ^8 l% g该 wifi_ap_config_t 包含:
! y: X6 N0 `, j+ `. q2 Z0 y3 A& T  [/ b. d8 f$ X( W, z; p7 ?
•    SSID - WiFi的SSID名称,用于连接站。' Z: @& b1 H7 m
: @& K  [$ w- J
•    ssid_len - SSID的字节长度,如果不是NULL终止。
- G  E' ?' x0 W5 e8 X2 U( g! \0 r( Y5 k+ f. @! l5 v
•    密码 - 用于站验证的密码。3 J6 w+ G$ _6 L6 E
! o; `/ o: c  m7 S- \9 |  K9 u
•    渠道 - 这个例子中我们使用的网络通道。
7 |# |- k6 j, {3 Q; |- g7 S3 r
# Y3 ~: j' Z! L9 _( z•    authmode - 我们如何想站进行身份验证(如果人)。 选择是
4 S6 q( G$ p" t. Q& ?+ D1 m, i7 e; r$ J6 m
  ◦       OPEN
9 R% d' O! O  I5 Z- w: Y' f* N$ D; s, O1 Q8 }# F. S
  ◦       WEP6 U  e& w7 l$ Y8 V

9 Q, d( c, |" b7 O; f1 H  ◦       WPA2 R: K1 U( y7 E& g) T9 D; U" |+ B
9 k  P& H1 l3 q# v  O7 U" |
  ◦       WPA2
/ X$ E% T8 B" A( L5 _6 W. ?9 `( e8 B$ d. p; x
  ◦       wpa_wpa2
* X  q5 t( \/ e8 @+ f! d2 \" t$ }! e
•      ssid_hidden - 我们是否应该广播SSID我们。
& b0 Z0 T- ~" M' q. D/ S8 K3 l$ s0 C+ K: A/ R
•      max_connection - 并发站的数量。 默认值和最大值是4。
5 M! J  k3 T& p0 P# @2 D& s( u1 L% ~% v* s2 J5 F4 o
•      beacon_interval - 未知。 100。
: @1 H. w1 e! X1 @- p. v
8 }3 Z" p  O0 V此结构的初始化示例是:
+ x- J$ e5 G# |% X( h3 M  \
  1. wifi_config_t apConfig = {9 L3 Y4 V6 s6 L2 U8 n/ V! p
  2.    .ap = {
    4 a8 P0 [2 X, S4 W  _- i0 v
  3.       .ssid="<access point name>",! L6 J& L( Q# c! H1 Z
  4.       .ssid_len=0,
    ; G4 U3 D8 k5 n! w. a/ [
  5.       .password="<password>",; b$ Y) N2 z6 u# W# F  d
  6.       .channel=0,
    / o2 P9 M) _  Q3 X
  7.       .authmode=WIFI_AUTH_OPEN,3 z; ~; [; H7 _  R/ z5 z
  8.       .ssid_hidden=0,+ F; W' w8 h; U' x) G
  9.       .max_connection=4,
    # ~" ]  z/ r1 w8 \- q- P1 ^
  10.       .beacon_interval=100, A7 R/ O# ]/ k# `
  11.    }
    # z% ]5 T0 R1 D1 S8 y
  12. };
复制代码
然后,我们调用1 l& A, f+ O/ M3 P
/ p, t0 q" {1 F! q! v0 G; ~
esp_wifi_set_config(WIFI_IF_AP,&apConfig);/ ]$ o4 `! y8 P8 F  u1 r. G0 ~& S1 ^
5 F( m) [3 c% Q8 d; W
将参数进行设置,最后调用esp_wifi_start()使WIFI开始工作。0 R8 ]; m# r% k
: y/ @9 p$ }& a; a; t
下面是ESP32作为接入点的相关源码:/ ]& V/ [( H2 w8 @3 ^. x
  1. #include <string.h>( x& r$ B  n& r7 B
  2. #include "freertos/FreeRTOS.h"3 h2 Y5 c1 }% V* p2 `$ q
  3. #include "freertos/task.h"
    0 M' c. r8 C# P( k) [
  4. #include "freertos/event_groups.h", @* M; {* T8 l
  5. #include "esp_system.h"
    % z, n) c+ x* B7 ]2 j9 _
  6. #include "esp_wifi.h"1 U( r2 d' w4 p3 v+ @/ x
  7. #include "esp_event_loop.h"
    7 f) A3 ^# _% Z+ [. x
  8. #include "esp_log.h"5 b; D( B3 q# f* Y8 p
  9. #include "nvs_flash.h"
    . F$ l  t1 J- K- q

  10. ) O: v' Y$ s1 r5 P9 U- v3 \
  11. #include "driver/gpio.h"
    . A( z& {* ^/ e) \/ i* n
  12. #include "esp_types.h". I* D- m7 ^. [% L" Z
  13. 2 g+ Z1 I7 b7 \; p/ s1 r
  14. /* FreeRTOS Task Handle -------------------------------------------------------*/0 ]% E5 s! u3 W. `& H

  15. 7 }, O9 j1 u2 M0 W1 p2 d$ l
  16. /* FreeRTOS Semaphore Handle --------------------------------------------------*/
    ) J6 D  J" B0 U; R

  17. 3 N% O6 M7 f% Z) w# q
  18. /* FreeRTOS event group to signal when we are connected & ready to make a request */4 u: B7 Y9 v) S; [% o; C

  19. 7 W0 z: O; E4 ?+ A

  20. 3 y1 j- z. f( u, L7 x
  21. static const char *TAG = "example";
    5 T! q( r7 P0 I( x" Y0 T  b

  22. : |% O; C+ R' \( P

  23. & `( Q3 s7 s  Z2 C$ d
  24. //#define     LED_GPIO_NUM    GPIO_NUM_25- }& D& w- W. U$ b: C, m) B4 U
  25. #define     LED_GPIO_NUM    GPIO_NUM_4//LED闪烁接口,为以后通过LED显示连接状态做拓展准备。$ |9 k4 v9 ^" ^. k  Q
  26. ) d. ~  ^. }3 D7 X! T5 }
  27. 4 |9 n5 h& n3 `' `  S
  28. #define CONFIG_AP_SSID    "ESP32"- j; f5 K: v/ _
  29. #define CONFIG_AP_PASSWORD    "12345678"//配置AP的SSID 和password
    % W9 B6 k4 ^$ c" _

  30. ' M; P/ ~# @: `- a2 d
  31. uint8_t ApMac[6];//网卡地址  }$ B' p% D6 e

  32. , [* {7 @2 e1 }
  33. /**
    / s! H& M) U6 B
  34.     * @brief  no .    + [; J2 h" z8 w; P
  35.     * @note   no.1 Z4 l7 g  Y( g  A4 T- P, u5 r& k
  36.     * @param  no.
    2 O* [: W/ M: ^0 V# E/ I
  37.     * @retval no.
    * [0 O! G5 Z# W$ Z1 ?
  38.     */
    9 T! \2 g" R) E; S" j+ p# |5 y( \+ _
  39. esp_err_t event_handler(void *ctx, system_event_t *event)//等待回调事件2 U+ ]+ X% _: ]% A5 W" E, p9 p0 E& d4 r
  40. {4 w. S$ m, ^3 Z9 Q
  41.     switch (event->event_id)//对事件进行识别
    - [$ m9 C0 F8 a; L/ d. I' D
  42.     {( y8 {8 W2 [+ L* P6 ]. ~4 y
  43.     case SYSTEM_EVENT_STA_START:
    , P; W9 T& ^3 {4 w5 ]- t) X
  44.         ESP_LOGI(TAG, "Connecting to AP...");
    * C9 S1 j# L8 J
  45.         esp_wifi_connect();
    9 V4 Z5 y9 p# t2 C+ P- s: a
  46.         break;& H" j4 X3 e/ N9 L, d
  47. * {$ L) U; K2 W
  48.     case SYSTEM_EVENT_STA_GOT_IP:/ C; D# J2 x# O$ A
  49.         ESP_LOGI(TAG, "Connected.");
    # K$ W% Y0 l+ v9 w
  50.         break;
    5 y: E& s6 n' _) l6 h$ T2 F) e
  51. 5 Z; H2 [* t$ v$ o( a2 I& }- `
  52.     case SYSTEM_EVENT_STA_DISCONNECTED:7 H) E- v5 g" x+ R0 S( A0 C5 d
  53.         //ESP_LOGI(TAG, "Wifi disconnected, try to connect again...");) ?5 e9 q/ v. N! m; i9 g& E
  54.         esp_wifi_connect();! O. l2 J& w( b* B
  55.         break;
    ' Y, P7 X# D% B5 F
  56. ) z4 V/ h% U. Q. e( _" s
  57.     default:
    , Z3 w' t7 z6 i' \; M* e/ ]' q
  58.         break;
    4 _$ T% E: U+ t: x% e
  59.     }
    / r$ d& Z; }  X+ n9 B- C" g6 s: v
  60.     ) g, m9 ^- Q+ F- P+ |
  61.     return ESP_OK;( @( q+ \) {+ \0 ?1 X& B+ d
  62. }. ~$ I" I; y5 Z; Y2 A/ [0 R7 F

  63. - H/ }) e6 v1 M  y
  64. /**
    # L3 X  @4 D* z' G: k
  65.     * @brief  no .    " z9 v; K6 f3 M2 |7 D" o2 [: D- D5 g6 \
  66.     * @note   no.- K( e( R% @) O( ?) i/ y
  67.     * @param  no.
    6 R4 b/ `9 _/ Z- g" l! y
  68.     * @retval no.
    0 K* g1 h9 e6 h. A& L$ V. U5 M
  69.     */: i6 D% W; t3 ]  X$ J" E7 O; P
  70. void led_init( void )
    ) P* o# L% w4 J8 a' y
  71. {, \0 B6 B5 `5 M
  72.     gpio_set_direction( LED_GPIO_NUM , GPIO_MODE_OUTPUT );0 E7 ~- _9 t) c* W7 V( j# a# v2 [
  73. }
    ! C  K5 C; c& H( Y6 F( I: }) g
  74. 5 {( o& P7 ~# Q* e) i: l
  75. /**7 @1 ]0 [0 V7 }; G3 L. S1 }
  76.     * @brief  no .    ; j. [: L( `7 j# B& |& l0 H# i
  77.     * @note   no.
    7 m( _9 u& {* F- K* ?4 ~
  78.     * @param  no.+ T# c: L; L/ ^4 k; {
  79.     * @retval no.2 p- a; i2 w: {  i
  80.     */; H2 M8 g+ L" Z3 W  Q
  81. void led_task( void *pvParameters )  O2 `2 M0 `: @. x0 U/ ]
  82. {
    8 y. o& q$ `* ^4 C7 o& ]+ ~. [
  83.     int level = 0;# s$ c" Y+ r8 e3 J4 R( W6 u
  84.    
    " J9 k+ x& ~5 f
  85.     for( ;; )( @& }" V$ B( V- g
  86.     {( ?) D  [) D. j8 O$ N! y
  87.         gpio_set_level( LED_GPIO_NUM , level);9 Q% }% U: K1 |1 Y' f8 A
  88.         level = !level;
    $ r8 m' j* r2 R" O+ N" A
  89.         vTaskDelay(300 / portTICK_PERIOD_MS);1 H$ C. E# V0 A9 @  F
  90.     }
    ! l: ?0 U4 k, n1 u7 b/ ]
  91. }- Y: q/ s& Q8 r* Z% A" h: [
  92. 3 L+ w$ r( G- e2 K; `" Q, C/ E
  93. void app_main(void)
    / r5 V0 r8 u4 s# ]6 S
  94. {
    5 P) L# Y- M( {& _5 O
  95.     nvs_flash_init();//初始化NVS内存
    ) W$ N3 c- W- h7 a8 H& s! q
  96.     led_init();) `: w- y. j) v1 w" P
  97.     tcpip_adapter_init();//tcp/IP配置
    6 u% q% _! G1 o1 y# ?
  98.     ESP_ERROR_CHECK( esp_event_loop_init(event_handler, NULL) );//回调,当ESP32检测到某些类型的WiFi相关事件时调用。
    6 W9 l: _$ p  q/ O- W- ]! }
  99.     wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();//定义一个名为cfg的wifi_init_config_t结构体。wifi_init_config_t中的参数可由menuconfig配置, G7 [0 d2 V  D8 k! [
  100.     ESP_ERROR_CHECK( esp_wifi_init(&cfg) );! }) B( m! d6 d# s3 {3 U2 t
  101.     ESP_ERROR_CHECK( esp_wifi_set_storage(WIFI_STORAGE_RAM) );//指示ESP32将这些设置记录到闪存
    % g7 q5 B! i* ~3 U5 G! X. @
  102.     ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_AP) );//模式设置为AP/ Y1 ?, s& @9 H- }) O4 Y; n) Y1 v
  103. 4 a2 ^0 j/ P( g4 s+ X- ]$ V& ^
  104.     esp_wifi_get_mac( ESP_IF_WIFI_AP , ApMac );//获取DHCP分配的IP接口的mac。1 v! i7 ?+ ]% S
  105.    
    6 X) h" ?/ h( K9 r$ u
  106.     wifi_config_t ap_config = {
    ' K" {) n8 D, p
  107.         .ap = {
    % i/ c$ r; t" L# I
  108. //            .ssid = ssid,9 E9 l3 l7 Z0 t+ T, z
  109.             .password = CONFIG_AP_PASSWORD,6 q) Z2 A* X' R5 l
  110.             .ssid_len = 0,7 A$ D# H0 K6 u
  111.             .max_connection = 4,
    8 l0 o* k0 B! X3 {/ p/ i
  112.             .authmode = WIFI_AUTH_WPA_PSK4 c' v% x( k9 }% Y7 R" @
  113.         }+ l, w. v4 w: a5 g
  114.     };//ap接入点参数配置。3 K( g$ i: m1 Y  m6 m" W( k: {$ S
  115.   g0 G5 H) _' W" [6 T9 ^
  116.     sprintf( (char *)ap_config.ap.ssid , "%s_%02X%02X" , CONFIG_AP_SSID , ApMac[4] , ApMac[5] );
    % ~! Y8 Q0 L! O! u8 e: g

  117. # I. Q8 `4 J/ Y, \' {! R
  118.     esp_err_t tmp =  esp_wifi_set_config(WIFI_IF_AP, &ap_config);+ g: e4 }/ J* r/ W; O: W! w
  119.     ESP_ERROR_CHECK(esp_wifi_start());2 n, x8 P) q+ U4 T
  120.     esp_wifi_connect();
    ) l( e, V/ r3 _( c! o! a. c2 ~
  121.     6 }/ H. b, W/ x, _2 o" a! ]' B) W
  122.     xTaskCreate( &led_task, "led task", 512, NULL, 3, NULL );
    + O& ]: N" n: r1 T3 H5 C
  123. 8 \' \3 d. f5 Z; p! |7 I' t+ x& w
  124. }
复制代码
实验现象:
9 m2 K' a0 \# y5 u" w( O# B4 E) x5 D( a1 Y
打开minicom可以看到输出:
% C/ J( j! |$ D
8 x9 L( d9 Q6 x
1.png
4 ?8 }- N6 U+ e' s; }( p( \6 V
打开手机WIFI,可以看到名为ESP32_44F1的WIFI热点,打开热点,输入设置的PASSWORD:12345678即可连接成功,说明AP接口设置. k- D7 F  i, I. n: n, a
+ h8 |1 z# _& n
2.png
# Z2 d, M4 Z, ^# r! z5 v
编程讲解:
. v1 _+ t; O# l5 {7 e! U8 O! n* q* F0 _- Q
使用连接站
2 q& E2 W% P1 |
1 S$ O& ]+ {, X3 I/ f/ ^9 ]当我们的ESP32是接入点时,我们说我们希望允许电台( p. E6 W$ v- o/ U; c8 Y
7 V  y" {+ I4 z6 n0 i- i
合作 nnect它。 这带来了管理这些电台的故事。 常见的事情2 u6 x( @$ O) d7 `! a
% X) w! L+ }+ P7 l
我们可能想做的是:1 F! A6 C5 T, w7 a+ z8 z3 [

* [# ~2 @9 F, A2 |4 k, K8 Q6 V* D•     确定新车站何时连接/ A8 I& z7 s* V& }/ V5 k

) I- F+ X- w5 B8 a5 J- D•     确定以前连接的电台何时离开
, s; o4 B( R: x3 X# J0 P. ~4 Z' q' x. A. y; H& R9 L" F0 J
•     列出当前连接的电台" p" M6 {6 v+ I0 ]8 V& {

! }& B2 T5 w2 ]& R•     断开ÒNE 或多个当前连接的站! M- i5 ?! r2 y8 D8 k; r. S
  O% \( [# N" s6 \% r2 Q
我们可以注册一个事件处理程序来检测新站连接和与现有站断开。 当我们成为接入点时,会产生ESP32 WiFi事件SYSTEM_EVENT_AP_START。当一个站连接时,ESP32西港岛线提高 SYSTEM_EVENT_AP_STACONNECTED事件。 当一个站断开,我们将看到 SYSTEM_EVENT_AP_DISCONNECTED事件。: i6 j8 l( c7 v5 }9 U

! |0 }/ j& }3 v4 X0 U9 x$ ^我们可以使esp_wifi_get_station_list()函数获取当前连接的电台,函数返回站的链表。 这个列表的存储被分配给我们,我们应该调用 esp_wifi_free_station_list()释放它当我们不再存在需要它时 。5 P2 C1 n1 ^/ g& q4 n% _0 s( m
, |* e" b3 S. G/ k7 G" \+ f
从ESP32中,我们可以判断很多为static项,比如当前连接数通过调用 wifi_softap_get_station_num()。 如果我们想找到那些站的细节,我们可以调用 wifi_softap_get_station_info(),它将返回链接列表wifi_sta_list_t,所以 我们必须调用wifi_softap_free_station_info()明确地释放此调用与分配的存储。5 ?3 O/ z4 V% [+ l

) R  [! Q# K2 Z1 {0 h! j以下是一个代码段的示例,其中列出了连接站的详细信息:% d5 k; l/ b' B$ D- l; U: w
  1. uint8 stationCount = wifi_softap_get_station_num();0 c2 [( F; G& T: N7 r6 F
  2. os_printf("stationCount = %d\n", stationCount);" w- m- c. R9 i2 ?7 K. T* r
  3. wifi_sta_list_t *stationInfo = wifi_softap_get_station_info();
    + Z4 p6 k" i0 x3 M' r- x
  4. if (stationInfo != NULL) {
    6 Q$ S/ [+ Q- [" f4 K
  5.    while (stationInfo != NULL) {+ D( n2 y' y7 |( [9 M
  6.       os_printf("Station IP: %d.%d.%d.%d\n", IP2STR(&(stationInfo->ip)));. P' K* s/ l- O! r4 n* }
  7.       stationInfo = STAILQ_NEXT(stationInfo, next);, b; P$ ?( \3 b5 C7 ?
  8.    }0 Y+ I8 j7 l" @2 b/ y8 p2 Z
  9.    wifi_softap_free_station_info();
    7 D0 h$ R% G0 |; D
  10. }
复制代码
如果由于某种原因,我们环境中的程序想强制断开当前的连接的station,我们可以使用 esp_wifi_kick_station()来断开。
4 x% m' j: S5 K0 S+ `
5 o- _7 B9 J: n* Z0 BWiFi在启动时) F& q7 \3 S; J% x4 @' g7 u
* T- a4 A: b2 O8 y4 S
ESP32可以将WiFi启动信息存储在闪存中。 这允许它在启动时执行其功能,而无需向用户询问任何特殊的或附加信息。这种能力由函数esp_wifi_set_auto connect()和esp_wifi_get_auto_connect()完成。它们被用来自动连接的设置值和读取保存在闪存中的值,设置赋值的函数为esp_wifi_set_config(),存储方法通过esp_wifi_set_storage()来设置WiFi API配置存储类型。% v, p5 k& v7 |2 l, s, n

! p& v) M; _* a6 ~' |3 p2 u首先讲解DHCP前需要了解什么是DHCP,DHCP即动态主机配置协议,它的作用是集中分配IP地址给主机,使网络环境中的主机可以动态的获得IP地址.如果想详细了解,可以看如下链接' n0 V/ I. ~+ v4 n

& p! C$ e  d+ \. khttp://baike.baidu.com/item/DHCP/218195?fr=aladdin
  j" ]5 V, H% C& h! q/ V; @5 P
: K' o# }2 i' q# j* M& i本文这里重点讲解其在ESP32中的应用和配置。
# r$ E( s, S9 Z8 ^" L& I
7 e1 u8 Q9 j* O' W& Z, {3 lDHCP客户端) Q) T- T% z0 w* }

; o/ w/ |5 g, t0 W) p9 Y6 M5 D当ESP32作为站点连接到接入点时,它还运行DHCP客户端连接到它在接入点的DHCP服务器。 在那里,站点提供其IP地址,网关地址和网络掩码, 我们可以这样做:调用 tcpip_adapter_set_ip_info()在程序编写时。 * M% @6 \, K1 `) L4 i0 z6 w
$ X$ W$ q- J" k1 m! w  B* b
函数逻辑如下+ _# U  H% H: K, t7 i/ A5 @
  1. tcpip_adapter_init();- R7 C9 U% J. r5 ^& s5 `; x1 T
  2. tcpip_adapter_dhcpc_stop();
    6 r  r0 d& }3 \7 g
  3. tcpip_adapter_set_ip_info();+ E, g; M2 m6 \! z% z% D
  4. esp_wifi_init();9 T' D! m8 U' S0 C  v
  5. esp_wifi_set_mode();
    , V! ~: }) ?- c8 n1 I
  6. esp_wifi_set_config();
    ( u5 f, Y& f9 @: m, U
  7. esp_wifi_start();; G! J$ v; ~( h/ u: r! g
  8. esp_wifi_config();
复制代码
但是当我们想为这些数据设置我们自己的值时。调用的tcpip_adapter_set_ip_info()时需要的参数可以按如下方法设置( P% _. U2 x+ Q/ p4 A
tcpip_adapter_ip_info_t ipInfo;
, H; B3 @- M8 Y0 ]+ BIP4_ADDR(&ipInfo.ip, 192,168,1,99);0 z3 i. F+ \! K' z# S- {
IP4_ADDR(&ipInfo.gw, 192,168,1,1);
0 V, I9 D, r5 r/ _IP4_ADDR(&ipInfo.netmask, 255,255,255,0);! \) N& _% e. q; c
tcpip_adapter_set_ip_info(TCPIP_ADAPTER_IF_STA, &ipInfo);
$ Y4 C) k" b+ O, l1 ]
3 E( l; w2 U$ x或者用字符串表示
/ k" T% W5 U) h; ~0 E/ {! s6 G1 f: E* y! p' s6 |& y% }
tcpip_adapter_ip_info_t ipInfo;9 W- H% L, c6 T  |
inet_pton(AF_INET,“192.168.1.99”,&ipInfo.ip);4 `9 @' E2 q& W; ~2 _( k
inet_pton(AF_INET,“192.168.1.1”,&ipInfo.gw);' e3 @5 S9 y, A3 w+ c1 G
inet_pton(AF_INET,“255.255.255.0”,&ipInfo.netmask);
) p& {) T* u4 j: Htcpip_adapter_set_ip_info(TCPIP_ADAPTER_IF_STA,&ipInfo);
/ f* C2 s9 h2 g" G
& C. e0 `6 C% b- j% c( p5 B" yDHCP服务器# t8 H) z: X1 s, S" b) i9 E9 w. A

! X$ A2 A2 A3 }当ESP32作为接入点时,可能需要它作为DHCP服务器,以便连接站将能够自然而然的分配IP地址,并获得他们的子网掩码和网关。DHCP服务器可以启动和使用API​​调用设备中停止wifi_softap_dhcps_start() 和 wifi_softap_dhcps_stop(),当前DHCP服务器的状态(启动或停止),可以通过调用5 q9 v+ K2 h3 I  F- P  f: n

" G1 J% W0 B  E; r" n4 u& V  G8 gwifi_softap_dhcps_status()查看。
+ K( |6 d. h- H3 J+ J9 i( i' W
9 F% C- I2 Q8 ?由DHCP服务器提供的IP地址的默认范围是192.168.4.1向上。第一个地址成为分配给ESP32本身。我们需要注意的是它的地址和我们工作的LAN范围是不一样。即他形成了自己的网络地址空间,它们也许是一相同种类的网络IP(192.168.XX)出现的。当我们连接到它时,我们可以在PC上PING到它。
: d; G+ r3 f$ O, d. Y4 g: o3 ~' c$ O; v# ]
当前的IP地址,子网掩码和网关* c  m6 T$ t# t! u8 q$ I8 d

  J5 v1 H. F# d& ?) d- h当我们需要知道,当前环境中我们的ESP32中的IP地址,子网掩码和网关时,我们已经知道这些值是由DHCP服务器设置的,我们可以调用tcpip_adapter_get_ip_info()得到这些值,因为,由于ESP32可以有两个IP接口(一个用于接入点和一个用于站),我们需要通过参数使程序知道我们想要检索的接口。
3 n& i# p" c! O7 j( u+ a. l  A' l3 b" K% B
WiFi保护设置 - WPS(定义)2 [6 d( s( N5 {

. |: J) r& S3 P: L7 Y该ESP32支持在站模式下的WiFi保护设置,这意味着,如果接入点支持,ESP32可以连接到接入点不呈现出密码。目前支持的只有“按钮模式”实现。利用这种机制,一个物理按钮被按下接入点,并且,对于一个周期的两分钟,在范围内的任何站可以使用加入网络WPS协议。官方给出了一个实际的应用例子是,当我们按下WPS的按键后,ESP32将调用wifi_wps_enable()和wifi_wps_start(),ESP32即可成功的连入计入端。
$ }! T( n( X, r3 W% ]5 s% `/ ]* `4 ~* X& n7 f, Y

" L  ~3 \3 H& O
/ x; Y" a; c- d$ f- f( d8 A* v7 u6 ^9 q/ n
转载自noticeable
2 q$ S3 b6 J5 B) b* d7 ^
+ y8 ]7 C  V. F$ W* K- b
收藏 评论2 发布时间:2018-5-31 10:16

举报

2个回答
wolfgang 回答时间:2018-5-31 14:05:37
不错,介绍很详细,有具体的电路连接方式就更好了~~
木森林的年轮 回答时间:2018-6-1 08:12:03
那么强大的esp32就这么使用不浪费吗

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版