IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> ESP32-WIFI -> 正文阅读

[网络协议]ESP32-WIFI

1. AP(接入点)模式:

可以理解为一个无法访问外网的局域网WIFI路由器节点,可以接受各类设备的连接请求,并且可以与连接的设备进行TCP,UDP连接,实现数据流。

实现步骤:

  1. 初始化flash(我也不太明白,可能是flash中有关于wifi的配置吧)
  2. 初始化LwIP
  3. 创建系统事件任务并初始化应用程序事件的回调函数
  4. 创建具有TCP / IP堆栈的默认网络接口实例绑定AP
  5. 初始化WIFI
  6. 配置WIFI
  7. 启动WIFI
#include <stdio.h>
#include "esp_system.h"
#include "esp_spi_flash.h"
#include "esp_wifi.h"
#include "esp_event.h"
#include "esp_log.h"
#include "esp_err.h"
#include "nvs_flash.h"
#include "esp_event.h"

static void event_hander(void* event_handler_arg,
                                        esp_event_base_t event_base,
                                        int32_t event_id,
                                        void* event_data)
{
	 switch (event_id)
    {
		//AP开始
    case SYSTEM_EVENT_AP_START:
        printf("\nwifi_softap_start\n");
        break;
		//有STA连接上ESP32的AP
    case SYSTEM_EVENT_AP_STACONNECTED:
        printf("\nwifi_softap_connectted\n");
        break;
		//有STA断开ESP32的AP
    case SYSTEM_EVENT_AP_STADISCONNECTED:
        printf("\nwifi_softap_disconnectted\n");
        break;
    default:
        break;
    }
}
void app_main(void) {	

	//初始化NVS(ESP_ERROR_CHECK()检查函数的返回值错误)
	ESP_ERROR_CHECK( nvs_flash_init() );
	//初始化lwip相关
	esp_netif_init();
	//创建系统事件任务并初始化应用程序事件的回调函数
	ESP_ERROR_CHECK(esp_event_loop_create_default());
	//创建具有TCP/IP堆栈的默认网络接口实例
	esp_netif_create_default_wifi_ap();

	//创建wifi初始化参数结构体,获取默认配置
	wifi_init_config_t wifi_init =  WIFI_INIT_CONFIG_DEFAULT();
	//初始wifi资源
	ESP_ERROR_CHECK(esp_wifi_init(&wifi_init));
	//注册wifi事件到默认事件循环
	ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT,ESP_EVENT_ANY_ID,&event_hander,NULL,NULL));
	//定义wifi配置参数
	wifi_config_t wificonfig = {
		.ap = {
			.ssid = "esp32",
			.ssid_len = 0,//SSID长度
			.max_connection = 1,//能连接的最大节点数
			.password = "12345678",
			.authmode = WIFI_AUTH_WPA_WPA2_PSK,//授权模式
		},
	};

	//设置wifi模式
	ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_AP));
	//使能wifi
	ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_AP,&wificonfig));
	//启动wifi
	ESP_ERROR_CHECK(esp_wifi_start());
}


以下为关于WIFI的事件

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*/

2.STA(基站)模式

将ESP32连接至附近的AP

实现步骤:

  1. 初始化flash(我也不太明白,可能是flash中有关于wifi的配置吧)
  2. 初始化LwIP
  3. 创建系统事件任务并初始化应用程序事件的回调函数
  4. 创建具有TCP / IP堆栈的默认网络接口实例绑定AP
  5. 初始化WIFI
  6. 配置WIFI
  7. 启动WIFI
void event_hander(void* event_handler_arg,
                                        esp_event_base_t event_base,
                                        int32_t event_id,
                                        void* event_data)
{
	ip_event_got_ip_t *ip = event_data;
	if(event_base == WIFI_EVENT){
		 switch (event_id)
    	{
			//STA开始
			case WIFI_EVENT_STA_START:
				//连接AP
				esp_wifi_connect();
				printf("\nwifi_sta_start\n");
				break;
				//连接失败
			case WIFI_EVENT_STA_DISCONNECTED:
				printf("\nwifi_sta_fail\n");
				esp_wifi_connect();
				break;
    	}

	}else if (event_base == IP_EVENT)
	{
		if(event_id == IP_EVENT_STA_GOT_IP){
			//获取当前连接ap的ip地址,并打印出来
			printf("content : "IPSTR"\n" , IP2STR(&ip->ip_info.ip));
		}
	}
	
}
void app_main(void) {	

	//初始化NVS(ESP_ERROR_CHECK()检查函数的返回值错误)
	ESP_ERROR_CHECK( nvs_flash_init() );
	//初始化lwip相关
	esp_netif_init();
	//创建系统事件任务并初始化应用程序事件的回调函数
	ESP_ERROR_CHECK(esp_event_loop_create_default());
	//创建具有TCP/IP堆栈的默认网络接口实例
	esp_netif_create_default_wifi_sta();

	//创建wifi初始化参数结构体,获取默认配置
	wifi_init_config_t wifi_init =  WIFI_INIT_CONFIG_DEFAULT();
	//初始wifi资源
	ESP_ERROR_CHECK(esp_wifi_init(&wifi_init));
	//注册wifi和ip地址事件到默认事件循环
	ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT,ESP_EVENT_ANY_ID,&event_hander,NULL,NULL));
	ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT,IP_EVENT_STA_GOT_IP,&event_hander,NULL,NULL));
	//定义wifi配置参数
	wifi_config_t wificonfig = {
		.ap = {
			.ssid = "dream",
			.password = "88886666",
		},
	};

	//设置wifi模式
	ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
	//使能wifi
	ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA,&wificonfig));
	//启动wifi
	ESP_ERROR_CHECK(esp_wifi_start());
}


  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-10-19 12:16:09  更:2021-10-19 12:17:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年7日历 -2024/7/1 11:43:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码