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

news2024/11/18 9:49:23

第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 NVS
    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);
    ESP_LOGI(TAG, "ESP_WIFI_MODE_AP");
    wifi_init_softap();
}

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

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

相关文章

Haproxy集群调度器与部署

目录 一、Haproxy介绍&#xff1a; 1.Haproxy应用分析&#xff1a; 2.Haproxy的特性&#xff1a; 3.Haproxy常见的调度算法&#xff1a; 4.LVS、Nginx、HAproxy的区别&#xff1a; 4.1 Haproxy与lvs对比&#xff1a; 4.2 Haproxy与nginx对比&#xff1a; 5. Haproxy优点&#x…

设计模式之十:状态模式

状态模式通过改变对象内部的状态来帮助对象控制自己的行为。 这是一张状态图&#xff0c;其中每个圆圈都是一个状态。 最简单&#xff0c;第一反应的实现就是使用一个变量来控制状态值&#xff0c;并在方法内书写条件代码来处理不同情况。 package headfirst.designpatterns.…

微服务架构介绍

系统架构的演变 1、技术架构发展历史时间轴 ①单机垂直拆分&#xff1a;应用间进行了解耦&#xff0c;系统容错提高了&#xff0c;也解决了独立应用发布的问题&#xff0c;存在单机计算能力瓶颈。 ②集群化负载均衡可有效解决单机情况下并发量不足瓶颈。 ③服务改造架构 虽然系…

操作系统备考学习 day3 (2.1.1 - 2.1.6)

操作系统备考学习 day3 二、进程与线程2.1 进程与线程2.1.1 进程的概念和特征2.1.2 进程的状态与转换2.1.3 进程的组织2.1.4 进程控制2.1.5 进程间通信&#xff08;IPC&#xff09;2.1.6 线程和多线程模型 二、进程与线程 2.1 进程与线程 2.1.1 进程的概念和特征 进程&#…

通达OA漏洞检查工具V1.3

​注意 注意&#xff1a;通达OAv11.6前台任意文件删除任意文件上传漏洞会删除auth.inc.php&#xff0c;这可能会损坏OA系统谨慎操作 工具更新 本工具webshell采用蚁剑连接&#xff0c;密码均为x TongdaOATool本工具支持以下漏洞的验证和利用&#xff1a; 1、通达OA任意用户…

Vue通过ref修改 <el-input-number> 增减按钮的样式

Vue 为一个 <el-input-number> 设置了ref为‘inputNumberRef’, 通过这个ref获取<el-input-number>组件中的增、减按钮所在的<i>标签&#xff0c;并将它们的class分别改为el-icon-plus 和 el-icon-minus。 可以通过以下代码实现&#xff1a; <template&g…

Long类型雪花算法ID返回前端后三位精度缺失问题解决

目录 一、问题描述二、问题复现1.Maven依赖2.application.yml 配置3.DemoController.java4.snowflakePage.html 页面5.DemoControllerAdvice.java 监听6.问题复现 三、原因分析四、问题解决方案一方案二 一、问题描述 Java 后端使用雪花算法生成 Long 类型的主键 ID&#xff0…

【Unity】万人同屏, 从入门到放弃之——Entities 1.0.16性能测试

当前测试使用的Entities版本为1.0.16 Unity Entities 1.0.16使用方法&#xff1a; Create a component for the spawner example | Entities | 1.0.16 1. 创建SubScene 2. 在SubScene下创建挂载Authoring脚本&#xff1a; Authoring是MonoBehaviour脚本&#xff0c;主要用来…

网页的快捷方式打开自动全屏--Chrome、Firefox 浏览器相关设置

Firefox 的全屏方式与 Chrome 不同&#xff0c;Chrome 自带全屏模式以及APP模式&#xff0c;通过简单的参数即可设置&#xff0c;而Firefox暂时么有这个功能&#xff0c;Firefox 的全屏功能可以通过全屏插件实现。 全屏模式下&#xff0c;按 F11 不会退出全屏&#xff0c;鼠标…

【微信小程序】文章样式,标题样式,及设置背景~

| background-size 设置背景图片大小。图片可以保有其原有的尺寸&#xff0c;或者拉伸到新的尺寸&#xff0c;或者在保持其原有比例的同时缩放到元素的可用空间的尺寸。 | background-size: cover;适配屏幕大小 文章样式&#xff0c;标题样式&#xff0c;及设置背景~ index.w…

AGV小车、机械臂协同作业实战02-开源opentcs 项目调研

这个项目是从0到1 的一个过程&#xff0c;碰到这种项目给我的第一反应就是先查查有没有轮子&#xff0c;往往站在巨人的肩膀上 事情就会变得简单多了。各种搜索后发现网站这类的项目少之又少&#xff0c;唯一一个值得参考的项目 就是Opentcs 了&#xff0c;而且这个项目最近也在…

echarts-图表(非常规图开发记录)

echarts-图表&#xff08;非常规图开发记录&#xff09; 环形刻度图横向左右柱形图3D饼图渐变柱子-柱状图3D柱状图雷达图动态滚动图-并加图片 以下图表数据源&#xff0c;allData.value 均为如下格式 [{"id": "1","name": "在职在岗",…

企业邮箱功能详解:提升办公效率的多面手

企业邮箱是一种专为企业打造的电子邮件服务&#xff0c;它可以帮助企业提高工作效率、加强内部沟通和保护企业信息安全。本文将介绍企业邮箱的一些主要功能和优势。 一、邮件收发 企业邮箱提供了一个专门的电子邮件账户&#xff0c;员工可以通过这个账户收发工作相关的邮件。相…

基于SSM的校园自助洗衣系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

GIS跟踪监管系统电子围栏

GIS跟踪监管系统电子围栏 &#xff08;1&#xff09;电子围栏展示。① 显示&#xff1a;② 隐藏&#xff1a;&#xff08;2&#xff09;电子围栏修改。① 新增电子围栏。② 修改电子围栏。工具箱&#xff08;1&#xff09;测量。① 测量距离&#xff1a;② 测量面积&#xff1a…

洛科威多功能岩棉板助力节能减碳战略,推动碳达峰目标实现

国家相关部门提出了要“协同推进降碳、减污、扩绿、增长&#xff0c;推进生态优先、节约集约、绿色低碳发展”的总要求&#xff0c;未来相当长的时间里&#xff0c;降碳都将是一项重要工作&#xff0c;节能降碳是实现碳达峰碳中和的有效途径&#xff0c;也是着力解决资源环境约…

基于springboot+vue的企业面试预约管理系统

基于springbootvue的企业面试预约管理系统 预约面试管理系统&#xff0c;可以通过学生&#xff0c;企业角色进行登录 登录后可以查看发布的岗位&#xff0c;发布人&#xff0c;发布时间&#xff0c;面试时间&#xff0c;招聘时间&#xff0c;招聘单位简介等 查看用户管理信息

云组网案例分享

最近遇到了一个客户场景&#xff0c;是个非常典型的跨云组网场景&#xff0c;我们梳理了下这个客户的需求以及我们提供的解决方案&#xff0c;出于保密要求&#xff0c;文章不会涉及任何客户信息。如果您想体验我们的产品&#xff0c;可以登录我们的控制台免费使用&#xff0c;…

【Axure原型素材】扫一扫

今天和粉丝们免费分享扫一扫的原型素材&#xff0c;"扫一扫"是一项常见的移动应用功能&#xff0c;通常通过手机或平板电脑上的摄像头来扫描二维码或条形码以实现各种功能。下面是和大家分享扫一扫的常用素材~~~ 【原型效果】 【Axure原型素材】扫一扫 【原型预览】…

石油天然气工程用热轧型钢

声明 本文是学习GB-T 42678-2023 石油天然气工程用热轧型钢. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件规定了石油天然气工程用热轧型钢的订货内容、牌号表示方法、尺寸、外形、重量、技术要求、 试验方法、检验规则、包装、标志…