第15篇ESP32 idf框架 wifi联网_WiFi AP模式_手机连接到esp32开发板

第1篇:Arduino与ESP32开发板的安装方法

第2篇:ESP32 helloword第一个程序示范点亮板载LED

第3篇:vscode搭建esp32 arduino开发环境

第4篇:vscode+platformio搭建esp32 arduino开发环境

​​​​​​第5篇:doit_esp32_devkit_v1使用pmw呼吸灯实验

第6篇:ESP32连接无源喇叭播放音乐《涛声依旧》

第7篇:ESP32连接按钮点亮LED无源喇叭播放声音

​​​​​​第8篇:ESP32连接超声波HC-SR04测距点亮LED无源喇叭播放声音

第9篇:ESP32超声波HC-SR04Arduino类库编写

第10篇:ESP32外部中断功能的使用

第11篇:ESP32vscode_platformio_idf框架helloworld点亮LED

第12篇:ESP32模拟SPI驱动12864LCD_ST7920显示屏

第13篇:ESP32 idf wifi联网使用SNTP同步网络时间LCD ST7920液晶屏显示
第14篇ESP32 idf wifi联网_WiFi STA 模式(连接到WIFI)LCD ST7920液晶屏显示

ESP32 的 Wi-Fi 可以工作在以下几种工作状态:

  • Station 模式(STA):在这种模式下,ESP32 连接到一个已经存在的无线网络,类似于一台普通的 Wi-Fi 客户端设备。
  • Access Point 模式(AP):在这种模式下,ESP32 自己作为一个 Wi-Fi 热点,并接受其他 Wi-Fi 客户端设备的连接,类似于一个路由器。
  • Station + Access Point 模式(STA+AP):在这种模式下,ESP32 同时工作在 Station 和 Access Point 两种模式下,既可以连接到已有的 Wi-Fi 网络,也可以提供 Wi-Fi 热点。
  • Wi-Fi Direct 模式(P2P):在这种模式下,ESP32 作为 Wi-Fi Direct 设备,可以直接和其他 Wi-Fi Direct 设备进行通信,不需要使用路由器。
  • Promiscuous 模式:在这种模式下,ESP32 可以在监听所有 Wi-Fi 数据包,而不仅仅是与它连接的 AP 或者 P2P 设备相关的数据包。

前面文章介绍了ESP32作为 Station的工作模式,今天使用其(SoftAP模式)Access Point模式。

第14篇ESP32 idf wifi联网_WiFi STA 模式(连接到WIFI)LCD ST7920液晶屏显示

在WIFI示例中我们可以看到有默认的event loop,event loop 我的理解就是任务事件,就是当我们注册回调函数之后,在执行wifi初始化之后,就会执行wifi任务,然后wifi任务有事件产生之后就会有一个类似于中断事件在回调事件中产生。其中注册函数如下:

ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT,ESP_EVENT_ANY_ID,&wifi_event_handler,NULL,NULL));

 WIFI_EVENT是一个字符串,就是我们event loop基础事件,后续event loop发送到那个组件都是根据这个参数确定的,ESP_EVENT_ANY_ID是指在发送event loop 事件的时候,只要是WIFI_EVENT这个基础事件的数据都会调用我们的回调函数,当我们使用ESP_EVENT_ANY_BASE的时候这个时候就是发送除了WIFI_EVENT这个基础事件之外的其他任何基础事件都会调用这个我们注册的回调函数,当我们使用指定ID的时候,这个时候就只会当有这个ID事件触发的时候才会调用我们注册的回调函数,例如我们注册ID为WIFI_EVENT_AP_STACONNECTED的时候,这个时候只要有WIFI_EVENT_AP_STACONNECTED的事件触发的时候才会触发执行我们的回调函数wifi_event_handler,其他的WIFI_EVENT_AP_STADISCONNECTED、WIFI_EVENT_AP_START事件产生的时候不会调用我们注册的回调函数。
  WIFI的认证模式有以下几种,我们默认基本上都是WIFI_AUTH_WPA_WPA2_PSK。

typedef enum {WIFI_AUTH_OPEN = 0,         /**< authenticate mode : open */WIFI_AUTH_WEP,              /**< authenticate mode : WEP */WIFI_AUTH_WPA_PSK,          /**< authenticate mode : WPA_PSK */WIFI_AUTH_WPA2_PSK,         /**< authenticate mode : WPA2_PSK */WIFI_AUTH_WPA_WPA2_PSK,     /**< authenticate mode : WPA_WPA2_PSK */WIFI_AUTH_WPA2_ENTERPRISE,  /**< authenticate mode : WPA2_ENTERPRISE */WIFI_AUTH_WPA3_PSK,         /**< authenticate mode : WPA3_PSK */WIFI_AUTH_WPA2_WPA3_PSK,    /**< authenticate mode : WPA2_WPA3_PSK */WIFI_AUTH_WAPI_PSK,         /**< authenticate mode : WAPI_PSK */WIFI_AUTH_MAX
} wifi_auth_mode_t;

当我们设置热点的密码长度为0的时候,我们就需要设置加密方式为WIFI_AUTH_OPEN 开放。

1.wifi_config_t结构体

示例代码设置 ESP32 的 Wi-Fi 模块工作在 AP 模式下,同时配置 Wi-Fi AP 热点的一些参数,方便客户端连接

// 设置为AP模式,配置名称,密码,频道,最大连接数,认证模式    
wifi_config_t wifi_config = { .ap = { .ssid = EXAMPLE_ESP_WIFI_SSID, .ssid_len = strlen(EXAMPLE_ESP_WIFI_SSID),                   .channel = EXAMPLE_ESP_WIFI_CHANNEL,                   .password = EXAMPLE_ESP_WIFI_PASS,                   .max_connection = EXAMPLE_MAX_STA_CONN,                  .authmode = WIFI_AUTH_WPA_WPA2_PSK           },    
};    
ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_AP, &wifi_config));

2.wifi_event_handler事件

(1)esp_event_handler_instance_register注册事件

示例:

//wifi相关设置初始化   ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT,             //检查                                                        ESP_EVENT_ANY_ID,                                                        &wifi_event_handler,                                                        NULL,                                                        NULL));

esp_event_handler_instance_register用于在事件循环中注册事件处理程序,其参数解释:

  • WIFI_EVENT:事件的基础类型,该函数将向WiFi事件注册处理程序。
  • ESP_EVENT_ANY_ID:这是事件ID,这里使用ESP_EVENT_ANY_ID表示注册所有WiFi事件。
  • &wifi_event_handler:这是事件处理程序的指针,它将在WiFi事件发生时被调用。
  • NULL:这是事件处理程序的参数,这里没有使用参数,因此将其设置为NULL。
  • NULL:这是事件处理程序的实例,这里没有使用多个实例,因此将其设置为NULL。

(2)system_event_sta_connected_t结构体

在ESP-IDF中,当一个设备通过WiFi连接到ESP32的WiFi热点时,ESP32会触发一个连接事件。这个事件会包含一个结构体system_event_sta_connected_t,其中包含连接设备的MAC地址(event->mac)和连接设备在该AP热点下的AID(event->aid)。

其中,event->aid代表的是连接设备在AP热点下的AID(Association ID),AID是一个整数值,表示AP热点中连接的设备的编号。
在802.11标准中,AID是一个由AP热点指派的,可以被用来唯一标识一个STA(Station)设备的值。在ESP-IDF中,AID的范围是1~16,代表连接的设备数量。

3. 关闭SoftAP

ESP_LOGI(TAG, "Max clients reached, shutting down AP");    
// 关闭 softAP    
esp_wifi_stop();    
esp_wifi_deinit();    
esp_netif_deinit();    
vTaskDelete(NULL);

三、示例

ESP32可以通过Wi-Fi芯片在AP(接入点)模式下运行,当热点。下面是开启ESP32热点的示范代码:

#include "driver/gpio.h"
#include <stdio.h>
#include "unistd.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/event_groups.h"
#include <stddef.h>
#include <time.h>#include <string.h>
#include <time.h>
#include <sys/time.h>
#include "esp_system.h"
#include "esp_event.h"
#include "esp_log.h"
#include "esp_attr.h"
#include "esp_sleep.h"
#include "nvs_flash.h"
#include "esp_sntp.h"
#include "esp_wifi.h"
#include "lcd12864st7920idf.h"#include "lwip/err.h"
#include "lwip/sys.h" 
/* The examples use WiFi configuration that you can set via project configuration menu.If you'd rather not, just change the below entries to strings withthe config you want - ie #define EXAMPLE_WIFI_SSID "mywifissid"* 头文件包含 */// 联网相关的宏
//#define EXAMPLE_ESP_WIFI_SSID      "xx"               // 账号
//#define EXAMPLE_ESP_WIFI_PASS      "@xx68"          // 密码
#define EXAMPLE_ESP_WIFI_SSID "ESP32_AP_t" // WIFI名字
#define EXAMPLE_ESP_WIFI_PASS "12345678"   // WIFI密码
#define EXAMPLE_ESP_WIFI_CHANNEL 1         //
#define EXAMPLE_MAX_STA_CONN 2             //
#define MAC2STR(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
#define MACSTR "%02X:%02X:%02X:%02X:%02X:%02X"//转换后的格式,可按需求修改#define EXAMPLE_ESP_MAXIMUM_RETRY 5 // wifi连接失败以后可以重新连接的次数
#define WIFI_CONNECTED_BIT BIT0     // wifi连接成功标志位
#define WIFI_FAIL_BIT BIT1          // wifi连接失败标志位
#define AR_SIZE(a) sizeof(a) / sizeof(a[0])unsigned char show1[] = {0xB0, 0xA2, 0xCE, 0xE4, 0xBF, 0xC6, 0xBC, 0xBC}; //阿武科技unsigned char show_we_chat1[] = "wechat:";
unsigned char show_nick1[] = "txwtech";
unsigned char show_wifi_connecting[] = "wifi_connecting...";
unsigned char show_wifi_reconnect[] = "wifi_reconnecting...";
unsigned char show_wifi_connected[] = "wifi_connected";// 联网相关的变量
static EventGroupHandle_t s_wifi_event_group; // 事件组,用于对wifi响应结果进行标记
static int s_retry_num = 0;                   // 记录wifi重新连接尝试的次数static const char *TAG = "esp32idf_title_txwtech";// void app_main()
// {
//     Initialise();
//     DisplayString(0, 0, show_wifi_connecting, AR_SIZE(show_wifi_connecting));//     int mLevel = 0;
//     int temp = 0;//     esp_err_t ret = nvs_flash_init();
//     if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND)
//     {
//         ESP_ERROR_CHECK(nvs_flash_erase());
//         ret = nvs_flash_init();
//     }
//     ESP_ERROR_CHECK(ret);
//     //CLEAR();
//     // 连wifi
//     //ESP_LOGI(TAG, "ESP_WIFI_MODE_STA");
//     ESP_LOGI(TAG, "ESP_WIFI_MODE_AP");
//      wifi_init_sta();//      CLEAR();
//      DisplayString(1, 0, show_wifi_connected, AR_SIZE(show_wifi_connected));
//     while (false)
//     {
//         time_t timer; // time_t就是long int 类型
//       //  DisplayString(0, 1, show1, AR_SIZE(show1)); //第一行第三格开始
//        // DisplayString(3, 2, show_wifi_connected, AR_SIZE(show_wifi_connected));       //
//        DisplayString(1, 0, show_wifi_connected, AR_SIZE(show_wifi_connected));
//         usleep(1000 * 1000 * 1);                                    //微秒,1000微秒=1毫秒,1000毫秒=1秒
//     }
// }/*  WiFi softAP ExampleThis example code is in the Public Domain (or CC0 licensed, at your option.)Unless required by applicable law or agreed to in writing, thissoftware is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES ORCONDITIONS OF ANY KIND, either express or implied.*/// static const char *TAG = "wifi softAP";
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;ESP_LOGI(TAG, "station "MACSTR" join, AID=%d",MAC2STR(event->mac), event->aid);}else if (event_id == WIFI_EVENT_AP_STADISCONNECTED){wifi_event_ap_stadisconnected_t *event = (wifi_event_ap_stadisconnected_t *)event_data;//   ESP_LOGI(TAG, "station "MACSTR" leave, AID=%d",MAC2STR(event->mac), event->aid);}
}
void wifi_init_softap(void)
{ESP_ERROR_CHECK(esp_netif_init());ESP_ERROR_CHECK(esp_event_loop_create_default());esp_netif_create_default_wifi_ap();wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();ESP_ERROR_CHECK(esp_wifi_init(&cfg));ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &wifi_event_handler, NULL, NULL));wifi_config_t wifi_config ={.ap ={.ssid = EXAMPLE_ESP_WIFI_SSID,.ssid_len = strlen(EXAMPLE_ESP_WIFI_SSID),.channel = EXAMPLE_ESP_WIFI_CHANNEL,.password = EXAMPLE_ESP_WIFI_PASS,.max_connection = EXAMPLE_MAX_STA_CONN,.authmode = WIFI_AUTH_WPA_WPA2_PSK},};if (strlen(EXAMPLE_ESP_WIFI_PASS) == 0){wifi_config.ap.authmode = WIFI_AUTH_OPEN;}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());ESP_LOGI(TAG, "wifi_init_softap finished. SSID:%s password:%s channel:%d", EXAMPLE_ESP_WIFI_SSID, EXAMPLE_ESP_WIFI_PASS, EXAMPLE_ESP_WIFI_CHANNEL);
}
void app_main(void)
{ // Initialize NVSesp_err_t ret = nvs_flash_init();if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND){ESP_ERROR_CHECK(nvs_flash_erase());ret = nvs_flash_init();}ESP_ERROR_CHECK(ret);ESP_LOGI(TAG, "ESP_WIFI_MODE_AP");wifi_init_softap();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/86627.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django之初入门

一&#xff09;Django简介 1.简介 Django是一个开源的Python Web框架&#xff0c;它以简洁高效的方式帮助开发者构建复杂的Web应用程序。Django采用了MVC&#xff08;Model-View-Controller&#xff09;的架构模式&#xff0c;通过强大的工具和功能&#xff0c;提供了一套完整…

js网络编程

目录 AJAXXHR创建AJAX请求GET和POST传递参数XHR的state其他事件监听响应数据和响应类型http的状态码超时时间封装自己AJAX函数 Axios创建Axios请求实例请求和响应拦截器 FetchFetch与XHR的区别Fetch数据的响应发送Fetch请求 封装Axios AJAX AJAX即异步的JavaScript 和 XML&…

Spring面试题11:什么是Spring的依赖注入

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:说一说Spring的依赖注入 依赖注入(Dependency Injection)是Spring框架的一个核心特性,它是指通过外部容器将对象的依赖关系注入到对象中,从而…

M-LAG协议交互原理

介绍M-LAG的实现原理。 基于M-LAG组成的双活系统提供了设备级的可靠性&#xff0c;那么M-LAG是如何建立的&#xff1f;如图1所示&#xff0c;M-LAG的建立过程有如下几个步骤&#xff1a; DFS Group配对 当M-LAG两台设备完成配置后&#xff0c;设备首先通过peer-link链路发送DF…

论文阅读-Group-based Fraud Detection Network on e-Commerce Platforms

目录 摘要 1 Introduction 2 BACKGROUND AND RELATED WORK 2.1 Preliminaries 2.2 Related Works 3 MODEL 3.1 Structural Feature Initialization 3.2 Fraudster Community Detection 3.3 Training Objective 4 EXPERIMENT 4.1 Experimental Setup 4.2 Prediction …

laravel 阿里云短信发送

示例 一、安装 安装&#xff1a;composer require mrgoon/aliyun-sms dev-master 二、打开config/app.php&#xff0c;添加配置代码 1、‘providers’ 配置组下添加 Mrgoon\Aliyunsms\AliyunsmsServiceProvider::class, 2、‘aliases’ 配置组下添加 Aliyunsms>Mrgoon…

【力扣】13. 罗马数字转整数

题目描述 罗马数字包含以下七种字符: I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符数值I1V5X10L50C100D500M1000 例如&#xff0c; 罗马数字 2 写做 II &#xff0c;即为两个并列的 1 。12 写做 XII &#xff0c;即为 X II 。 27 写…

OpenWrt 学习记录

OpenWrt 学习记录 ssh settingCodePathreview MakefileCURDIRMAKEFILE_LIST ssh setting keygenssh-keygen -t rsa -C "hughwin10WLS.com"copy rsa_pub to gitee sshcat id_rsa id_rsa.pub打开gitee仓库&#xff0c;点击头像、点击设置&#xff0c;点击SSH公钥&…

基于C/C++的共享内存的创建和使用(Linux)

流程&#xff1a; 生成一个key值(函数&#xff1a;ftok)创建共享内存&#xff0c;返回一个共享内存id(函数&#xff1a;shmget)映射共享内存&#xff0c;关联的到当前进程&#xff0c;得到虚拟地址(函数&#xff1a;shmat)使用内存&#xff0c;此时操作shmat函数返回的指针就是…

记一次STM32F4 HAL IAP开发过程踩坑

第一次在HAL库上做IAP&#xff0c;不太熟悉库结构&#xff0c;被坑了一早上… MCU上做了一个shell&#xff0c;实现了goto命令跳转到APP区执行&#xff08;只是为了开发时方便&#xff09;。跳转到APP前和以前一样清理了所有初始化过的外设&#xff0c;也对中断进行了处理&…

Qt5开发及实例V2.0-第十九章-Qt.QML编程基础

Qt5开发及实例V2.0-第十九章-Qt.QML编程基础 第19章 QML编程基础19.1 QML概述19.1.1 第一个QML程序19.1.2 QML文档构成19.1.3 QML基本语法 19.2 QML可视元素19.2.1 Rectangle&#xff08;矩形&#xff09;元素19.2.2 Image&#xff08;图像&#xff09;元素19.2.3 Text&#xf…

spring和springmvc常用注解

1.Spring常用注解&#xff1a; 1&#xff09;Repository将DAO类声明为Bean 2&#xff09;Service用于修饰service层的组件 3&#xff09;Controller通常作用在控制层&#xff0c;将在Spring MVC中使用 4&#xff09;Component是一个泛化的概念&#xff0c;仅仅表示spring中的一…

机器人如何有效采摘苹果?

摘要&#xff1a;本文利用动捕数据构建拟人运动模型&#xff0c;对比观察两种苹果采摘模式&#xff0c;并对系统性能进行全面评估&#xff0c;为提高机器人采摘效率提供创新方法。 近期&#xff0c;一项关于苹果采摘机器人的有趣研究—— "Design and evaluation of a rob…

linux 编译安装 opencv 和指定 opencv_contrib 库

1. 下载 opencv 和对应版本的 opencv_contrib 库 opencv&#xff1a;https://opencv.org/releases/opencv_contrib&#xff1a;https://github.com/opencv/opencv_contrib 2. 使用 cmake 编译 opencv 和指定 opencv_contrib 库 # 在 opencv 源码文件夹下创建并进入 build 文…

rust学习-rpc

使用框架rpcx-rs rpcx-rs 0.2.2 版本,使用Rust访问rpcx服务,支持 JSON 和 MessagePack 两种序列化方式。 protobuf序列化的支持、服务治理各种功能(路由、失败处理、重试、熔断器、限流)、监控(metrics、trace)、注册中心(etcd、consul)等众多的功能 cat ../Cargo.toml [pa…

MR混合现实情景实训教学

MR混合现实技术是一种将虚拟现实与现实场景相融合的创新技术&#xff0c;可以广泛应用于各个领域。其中&#xff0c;混合现实情景实训教学是MR技术的一个重要应用场景。 在医学专业方面&#xff0c;医学生常常需要通过实际操作来提升自己的技能水平&#xff0c;然而传统的实训方…

Vue 使用SignalR.JS与Microsoft.AspNetCore.SignalR实时通讯

针对于Web与其他应用的的通讯&#xff0c;在.Net中&#xff0c;SignalR是一个不错的选择&#xff0c;在前后端没有分离的时候&#xff0c;直接引用对应的signalr.js文件即可&#xff1b; 这里主要记录Vue与Asp.netcore 前后端分离通过signalR通讯实践&#xff1b; 服务端即Asp.…

【完美解决】GitHub连接超时问题 Recv failure: Connection was reset

问题&#xff1a; 已经开了梯子但是在Idea中使用git&#xff08;GitHub&#xff09;还是连接超时Recv failure: Connection was reset。此时需要让git走代理。 解决方案&#xff1a; 1.对右下角网络点击右键 -> 打开网络和Internet设置 2.代理 -> 查看到地址和端口号…

图像处理之《基于语义对象轮廓自动生成的生成隐写术》论文精读

一、相关知识 首先我们需要了解传统隐写和生成式隐写的基本过程和区别。传统隐写需要选定一幅封面图像&#xff0c;然后使用某种隐写算法比如LSB、PVD、DCT等对像素进行修改将秘密嵌入到封面图像中得到含密图像&#xff0c;通过信道传输后再利用算法的逆过程提出秘密信息。而生…

React中的受控组件(controlled component)和非受控组件(uncontrolled component)

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 组件⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是…