关注嘉友创科技公众号

学习目的及目标

  1. 掌握WIFI的状态机结构
  2. 掌握乐鑫新建热点(AP)的程序

ESP32的WiFi特点

WiFi可作为AP、STA、AP+STA三种模式

作为AP时,可以被4个STA连接

AP 是 (Wireless) AccessPoint 的缩写,即 (无线) 访问接入点。简单来讲就像是无线路由器一样,设备打开后进入 AP 模式,在手机的网络列表里面,可以搜索到类似 TPLINK_XXX 的名字(SSID)

STA是每一个连接到无线网络中的终端(如笔记本电脑、手机、PAD及其它可以联网的用户设备)都可称为一个站点,STA本身并不接受无线的接入,它可以连接到AP。

软件设计

代码逻辑(来自网络

ESP32的I2C master接口介绍(来自网络

esp32wifi底层驱动是不开源的,以下是esp32 wifi状态机工作原理的流程图

ESP32的WIFI状态机总结

初始化wifi配置后,程序会根据WIFI的实时状态,在回调函数中给出状态返回,所以只需要在回调中进行相关操作,接下来讲解状态机的解析。

状态机解析

回调原型

static esp_err_t event_handler

(

void *ctx,

system_event_t *event

)

函数功能

WIFI状态机回调函数

参数

[in] event:

typedef struct {

system_event_id_t event_id; /*事件ID*/

system_event_info_t event_info; /*事件信息*/

} system_event_t;

//事件ID取值

typedef enum {

SYSTEM_EVENT_WIFI_READY = 0,           /*WiFi准备好*/

SYSTEM_EVENT_SCAN_DONE,                /*扫描AP完成*/

SYSTEM_EVENT_STA_START,                /*作为STA开始工作*/

SYSTEM_EVENT_STA_STOP,                 /*作为STA结束工作*/

SYSTEM_EVENT_STA_CONNECTED,            /*作为STA连接上AP*/

SYSTEM_EVENT_STA_DISCONNECTED,         /*作为STA断开AP*/

SYSTEM_EVENT_STA_AUTHMODE_CHANGE,      /*作为STA连接的AP改变了*/

SYSTEM_EVENT_STA_GOT_IP,               /*作为STA从AP获取了IP*/

SYSTEM_EVENT_STA_LOST_IP,              /*作为STA丢掉了IP,也就是错了*/

SYSTEM_EVENT_STA_WPS_ER_SUCCESS,    /*wps succeeds in enrollee mode */

SYSTEM_EVENT_STA_WPS_ER_FAILED,    /* wps fails in enrollee mode */

SYSTEM_EVENT_STA_WPS_ER_TIMEOUT,    /* wps timeout in enrollee mode */

SYSTEM_EVENT_STA_WPS_ER_PIN,        /*wps pin code in enrollee mode */

SYSTEM_EVENT_AP_START,                 /*AP开始*/

SYSTEM_EVENT_AP_STOP,                  /*AP结束*/

SYSTEM_EVENT_AP_STACONNECTED,          /*有STA连上SP32的AP*/

SYSTEM_EVENT_AP_STADISCONNECTED,       /*有STA断开ESP32的AP*/

SYSTEM_EVENT_AP_PROBEREQRECVED,        /*从AP中接收包*/

SYSTEM_EVENT_GOT_IP6,                  /*获取IPv6*/

SYSTEM_EVENT_ETH_START,                /*有线开始*/

SYSTEM_EVENT_ETH_STOP,                 /*有线停止*/

SYSTEM_EVENT_ETH_CONNECTED,            /*有线上线*/

SYSTEM_EVENT_ETH_DISCONNECTED,         /*有线掉线*/

SYSTEM_EVENT_ETH_GOT_IP,               /*有线获取了IP*/

SYSTEM_EVENT_MAX

} system_event_id_t;

返回值

ESP_OK:成功

ESP_ERR_INVALID_ARG : 参数错误

WiFi初始化API介绍

设置WiFi回调函数esp_event_loop_init();

回调原型

esp_err_t esp_event_loop_init

(

)

函数功能

设置WiFi回调函数

参数

[in] cb:回调函数指针

[in] ctx:保留

返回值

ESP_OK:成功

other: 失败

初始化WiFi设置函数WIFI_INIT_CONFIG_DEFAULT();

设置WiFi工作模式函数esp_err_t esp_wifi_set_mode();

回调原型

esp_err_t esp_wifi_set_mode

(

wifi_mode_t mode

)

函数功能

设置WiFi工作模式函数

参数

[in] mode:wifi工作模式

返回值

ESP_OK:成功

other: 失败

启动WiFi函数:esp_err_t esp_wifi_start(void);

更多更详细接口请参考官方指南

WiFi初始化编写

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

void app_main()

{

ESP_ERROR_CHECK( 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));

wifi_config_t wifi_config = {

.ap = {

.ssid = "Helon_test",

.ssid_len = 0,

/* 最多只能被4个station同时连接,这里设置为只能被一个station连接 */

.max_connection = 1,

.password = "20180604",

.authmode = WIFI_AUTH_WPA_WPA2_PSK,

},

};

ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_AP));

ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_AP, &wifi_config));

ESP_ERROR_CHECK(esp_wifi_start());

}

作为AP的回调函数解析

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

static esp_err_t event_handler(void *ctx, system_event_t *event)

{

switch (event->event_id)

{

case SYSTEM_EVENT_AP_START:

printf("\nwifi_softap_start\n");

break;

case SYSTEM_EVENT_AP_STACONNECTED:

printf("\nwifi_softap_connectted\n");

break;

case SYSTEM_EVENT_AP_STADISCONNECTED:

printf("\nwifi_softap_disconnectted\n");

break;

default:

break;

}

return ESP_OK;

}

效果展示

WiFi总结

  • 乐鑫采用了大众的,初始化+回调的状态机结构,逻辑清晰简单,方便学习和使用。
  • 源码地址:https://github.com/xiaolongba/wireless-tech

点我->更多ESP32开发指南系列目录

第十四章 ESP32 新建一个WIFI热点相关推荐

  1. 鸟哥的Linux私房菜(服务器)- 第十四章、账号控管: NIS 服务器

    第十四章.账号控管: NIS 服务器 最近更新日期:2011/07/28 有没有想过,如果我有十部 Linux 主机,这十部主机仅负责不同的功能,事实上,所有的主机账号与对应的密码都相同! 那么我是将 ...

  2. 鸟哥的Linux私房菜(基础篇)- 第二十四章、 X Window 配置介绍

    第二十四章. X Window 配置介绍 最近升级日期:2009/08/07 在 Linux 上头的图形介面我们称之为 X Window System,简称为 X 或 X11 罗!为何称之为系统呢?这 ...

  3. [转]Windows Shell 编程 第十四章【来源:http://blog.csdn.net/wangqiulin123456/article/details/7988010】...

    第十四章 设计Shell集成应用 有一些工具可以使应用程序更紧密地与Shell和底层系统进行集成.也就是说,用户可以象处理系统文档和程序那样处理你的文档和程序.例如,右击文件来显示可用功能列表等.Wi ...

  4. 《深入理解 Spring Cloud 与微服务构建》第十四章 服务链路追踪 Spring Cloud Sleuth

    <深入理解 Spring Cloud 与微服务构建>第十四章 服务链路追踪 Spring Cloud Sleuth 文章目录 <深入理解 Spring Cloud 与微服务构建> ...

  5. 《Dreamweaver CS6 完全自学教程》笔记 第十四章:使用 CSS 设计网页

    文章目录 第十四章:使用 CSS 设计网页 14.1 CSS 样式表简介 14.2 CSS 的基本语法 14.3 伪类.伪元素以及样式表的层叠顺序 14.3.1 伪类和伪元素 14.3.2 样式表的层 ...

  6. 第十一、十二、十三、十四章 网络配置管理、归档和远程复制同步文件、软件包管理、创建访问linux文件系统

    第十一章 网络配置管理 网络地址获取方式: 1)DHCP自动获取 2)手动配置 1.网卡配置文件: /etc/sysconfig/network-scripts/ [root@server0 Desk ...

  7. 【正点原子Linux连载】第四十四章 设备树下的LED驱动实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

  8. 天堂向左,深圳往右 第十三章第十四章

    天堂向左,深圳往右 第十三章第十四章[@more@] 第十三章 周振兴是肖然见过的最严谨的人.此人一年四季打着领带,头发永远硬硬地顶在头上,绝不会有一根错乱,每天上班后都有个固定的程序:上厕所.擦桌子 ...

  9. 使用ArchR分析单细胞ATAC-seq数据(第十四章)

    本文首发于我的个人博客, http://xuzhougeng.top/ 往期回顾: 使用ArchR分析单细胞ATAC-seq数据(第一章) 使用ArchR分析单细胞ATAC-seq数据(第二章) 使用 ...

  10. 第二十四章、 X Window 配置介绍

    好文章 第二十四章. X Window 配置介绍 http://vbird.dic.ksu.edu.tw/linux_basic/0590xwindow.php 最近升级日期:2009/08/07 在 ...

最新文章

  1. linux系统空间不足,lsof看到异常的delete状态的文件。
  2. pongo - 字符串消除
  3. 11深入理解C指针之---指针和常量
  4. boost::coroutine2模块实现协程的测试程序
  5. java mina unix client
  6. 【干货】卷积神经网络Alex-Net、VGG-Nets、Network-In-Network案例分析
  7. 远程控制软件 mRemoteNG,管理多台虚拟机
  8. 计算机在输电线路设计中的应用研究,计算机在输电线路基础设计中的应用原稿(电子版)...
  9. matlab数控加工,关于MATLAB复杂型面数控加工编程.pdf
  10. 海思视频码率参数解析
  11. java-阴历日期和阳历日期互相转换
  12. linux定时脚本编写,如何实现Linux定时任务
  13. 关于OC中委托(代理人)的理解
  14. linux同步clock和date,liunx时钟与同步
  15. uni-app 表单验证
  16. CSS3新特性-变量
  17. 【Autosar Can网络远程唤醒】
  18. 小傻蛋的妹妹跟着小甲鱼学习Python的第七节007
  19. 启用DWA R8.02 Lite模式
  20. eclipse使用代码质量管理审查工具整理sonarlint(第一篇)

热门文章

  1. 2020 SSR落地开花的三大机遇
  2. 170313-pyGUI爬虫和正则回溯陷阱
  3. Centos 6.6安装chrome 谷歌浏览器
  4. 4.2 Branching Strategies
  5. 重磅!首届倍增科学技术研究院高级研究员研讨会胜利召开
  6. checkbox如何默认选中
  7. PHP工程师接私单操作流程
  8. 来自腾讯的高性能服务器架构思路
  9. 麦吉尔大学计算机科学申请,三大权威榜单为你诠释:加拿大计算机科学哪家强?...
  10. 电脑网络中看到不工作组计算机,win7系统看不到工作组计算机怎么办?win7系统看不到工作组计算机解决方法...