ESP32 web WiFi 管理器esp32-wifi-manager

news2025/1/20 14:50:58

拓 2023/04/09-2022/04/11

1. 简介

  • github仓库

https://github.com/tonyp7/esp32-wifi-manager

  • 说明

esp32-wifi-manager是esp32的纯C esp-idf组件,可通过门户网站轻松管理wifi网络。

esp32-wifi-manager是一个集所有功能于一身的wifi扫描仪、http服务器和dns守护程序,尽可能地使用最少的RAM。

esp32-wifi-manager将在启动时自动尝试重新连接到以前保存的网络,如果找不到保存的wifi,它将启动自己的接入点,您可以通过该接入点管理和连接到wifi网络。连接成功后,软件将在一段时间后(默认为1分钟)自动关闭接入点。

esp32-wifi-manager与esp idf 4.2及更高版本一起编译

2. 开发环境

《Ubuntu构建ESP32 ESP-IDF开发环境(简约版)》

https://blog.csdn.net/chentuo2000/article/details/128034585?spm=1001.2014.3001.5501

3. 构建项目

3.1 复制代码

  • 进入项目目录

cd ~/esp442

  • 复制代码

进入https://github.com/tonyp7/esp32-wifi-manager

 

点击Latest进入最新发布版本:

 

右击Source code(tar.gz),复制链接地址。

下载v3.3.1.tar.gz

wget https://github.com/tonyp7/esp32-wifi-manager/archive/refs/tags/v3.3.1.tar.gz

 

  • 改名

mv mv v3.3.1.tar.gz esp32-wifi-manager.tar.gz

  • 解压

tar -zxvf esp32-wifi-manager.tar.gz

 

3.2 构建项目

  • 进入example目录

cd ~/esp442/esp32-wifi-manager-3.3.1/examples/

 

  • 进入default_demo目录

 

  • 刷新esp-idf环境

get_idf

  • 设定目标芯片

idf.py set-target esp32

  • 配置项目

idf.py menuconfig

1) 将闪存设置为4MB

 

2) AP设置

 

可以在这里更改AP的SSID、Password以及其他参数。强烈建议保留默认值。

保存,退出。

  • 编译项目

idf.py build

 

  • 烧写项目

查看USB转串口的设备:

 

修改/dev/ttyUSB0设备权限:

sudo chmod 777 /dev/ttyUSB0

 

烧写:

idf.py -p /dev/ttyUSB0 -b 115200 flash

 

  • 启用监视器

idf.py monitor -p /dev/ttyUSB0

当示例正常运行时,将观察到以下输出:

 

4. 测试

现在,使用任何具有wifi功能的设备,PC、平板、手机,您都会看到一个名为esp32的新wifi接入点。使用默认密码esp32pwd连接到它。您也可以访问wifi管理器的默认IP地址:http://10.10.0.1.

下面我用Win10 PC测试。

  • 找到AP接入点

SSID为esp32

 

  • 连接到esp32

密码:

esp32pwd

 

访问http://10.10.0.1

 

显示WiFi SSID列表。

  • 选择要连接的SSID

 

  • 输入Password,点击Join:

 

如果停在这里,或出现连接错误

 

把ESP32板子与WiFi路由器靠近一些试试。

  • 等待连接

 

设置成功。

断开PC的esp32连接,连接的局域网WiFi上。

在串口上可以看到相应的操作信息:

 

STA的地址为:192.168.0.102。

一旦STA设置成功AP自动关闭。

如果STA连接失败,比如换了WiFi,AP自动打开。

  • 通过WiFi连接ESP32

在浏览器输入STA地址就可以连接ESP32了:

 

5. 将esp32-wifi-manager作为组件添加到代码中

为了在esp-idf项目中有效地使用esp32-wifi-manager,请将整个esp32 wifi管理器存储库复制到组件子文件夹中。

您的项目应该是这样的:

  • project_folder
    • build
    • components
      • esp32-wifi-manager
    • main
      • main.c

完成后,您需要编辑项目根目录下的CMakeLists.txt文件来注册组件文件夹。这是通过添加以下行来完成的:

set(EXTRA_COMPONENTS_DIRS components/)

一个典型的CmakeLists.txt文件应该如下所示:

cmake_minimum_required(VERSION 3.5)
set(EXTRA_COMPONENT_DIRS components/)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(name_of_your_project)

完成后,您现在可以在用户代码中添加头文件:

#include "wifi_manager.h"

您现在所需要做的就是调用wifi_manager_start();在您的代码中。如果您不确定,请参阅examples/default_demo。

6. 与esp32-wifi-manager互动

  • 事件回调

典型的用例是在wifi管理程序最终连接到接入点时收到通知。为了做到这一点,您可以定义一个回调函数:

void cb_connection_ok(void *pvParameter){
	ESP_LOGI(TAG, "I have a connection!");
}

然后进行回调注册:

wifi_manager_set_callback(WM_EVENT_STA_GOT_IP, &cb_connection_ok);

现在,每当事件被触发时,它都会调用这个函数。examples/default_demo包含了使用回调的示例代码。

  • 事件列表

可以添加到回调函数的可能事件列表由wifi_manager.h中的message_code_t定义。它们如下:

WM_ORDER_START_HTTP_SERVER

WM_ORDER_STOP_HTTP_SERVER

WM_ORDER_START_DNS_SERVICE

WM_ORDER_STOP_DNS_SERVICE

WM_ORDER_START_WIFI_SCAN

WM_ORDER_LOAD_AND_RESTORE_STA

WM_ORDER_CONNECT_STA

WM_ORDER_DISCONNECT_STA

WM_ORDER_START_AP

WM_EVENT_STA_DISCONNECTED

WM_EVENT_SCAN_DONE

WM_EVENT_STA_GOT_IP

WM_ORDER_STOP_AP

在实践中,跟踪WM_EVENT_STA_GOT_IP和WM_EVENT_STA_DISCONNECTED是了解您的esp32是否有连接的关键。在使用esp32-wifi-manager的典型应用程序中,大多数情况下可以忽略其他消息。

  • 事件参数

回调签名包括一个void*指针。对于大多数事件,此附加参数为空,并作为NULL值发送。一些选择事件具有用户代码可以利用的附加数据。它们如下所示:

WM_EVENT_SCAN_DONEwifi_event_sta_scan_done_t*对象一起发送。

WM_EVENT_STA_DISCONNECTEDwifi_event_sta_disconnected_t*对象一起发送。

WM_EVENT_STA_GOT_IPip_event_got_ip_t*对象一起发送。

这些对象是标准的esp-idf结构,并在官方文档中进行了相应的说明。请参考:

https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/network/esp_wifi.html

https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-reference/network/esp_wifi.html

examples/default_demo演示了如何读取ip_event_got_ip_t对象来访问分配给esp32ip地址。

7. 与http服务器交互

由于esp32-wifi-manager有自己的http服务器,您可能需要扩展此服务器,以便在应用程序中为自己的页面提供服务。可以使用标准的esp_http_server签名注册您自己的URL处理程序:

esp_err_t my_custom_handler(httpd_req_t *req){

然后注册处理程序:

http_app_set_handler_hook(HTTP_GET, &my_custom_handler);

examples/http_hook包含一个在/helloworld注册网页的示例

8. 线程安全和访问NVS

esp32-wifi-manager访问非易失性存储器进行存储,并将其配置加载到专用命名空间“espwifimgr”中。如果您想确保对NVS的并发访问永远不会发生冲突,可以包含NVS_sync.h并使用对NVS_sync_lock和NVS_sync_unlock的调用。

nvs_handle handle;

if(nvs_sync_lock( portMAX_DELAY )){  
    if(nvs_open(wifi_manager_nvs_namespace, NVS_READWRITE, &handle) == ESP_OK){
        /* do something with NVS */
	nvs_close(handle);
    }
    nvs_sync_unlock();
}

nvs_sync_lock等待作为参数发送给它的tick计数,以获取互斥。建议使用portMAX_DELAY。在实践中,nvs_sync_lock几乎永远不会等待。

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

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

相关文章

2022年第十三届蓝桥杯题解(全)C/C++

A题就是一个简单的进制转化&#xff0c;代码实现如下&#xff1a; #include <bits/stdc.h>using namespace std;const int N 1e5 10;int main() {int x 2022;int a 1;int res 0;while(x) {res (x % 10) * a;a a * 9;x / 10;}cout << res;return 0; } B题有…

【论文阅读笔记】COFFEE: A Contrastive Oracle-Free Framework for Event Extraction

论文题目&#xff1a;COFFEE: A Contrastive Oracle-Free Framework for Event Extraction 论文来源&#xff1a; 论文链接&#xff1a;https://arxiv.org/pdf/2303.14452.pdf 代码链接&#xff1a; 0 摘要 事件抽取是一项复杂的信息抽取任务&#xff0c;它涉及到从非结构…

【AIGC】7、CLIP | OpenAI 出品使用 4 亿样本训练的图文匹配模型

文章目录一、背景二、方法2.1 使用自然语言来监督训练2.2 建立一个超大数据集2.3 选择预训练模型2.4 模型缩放和选择三、效果论文&#xff1a;Learning Transferable Visual Models From Natural Language Supervision 代码&#xff1a;https://github.com/OpenAI/CLIP 官网&…

DJ3-5 死锁概述

目录 3.5 死锁概述 3.5.2 计算机系统中的死锁 1. 竞争资源 2. 进程推进顺序不当 3.5.3 死锁的必要条件和处理方法 1. 死锁的必要条件 2. 处理死锁的方法 3.6 预防死锁 3.6.1 摒弃 “请求和保持” 条件 3.6.2 摒弃 “不剥夺” 条件 3.6.3 摒弃 “环路等待” 条…

企业在数字化建设中,BI 处于什么位置?

对市场异常敏感的商业世界自然不会放过获取数字经济的机会&#xff0c;在众多企业开始进行数字化转型&#xff0c;通过信息化建设&#xff0c;部署BI来完成转型工作。 很多人都听说过BI&#xff0c; 但是并不太清楚BI 在IT信息化中到底处于一个什么位置&#xff1f;有很多的疑…

APIs --- DOM基础事件

1. 事件 事件是编程时系统内发生的动作或者发生的事情&#xff0c;它是用来描述程序的行为或状态的&#xff0c;一旦行为或状态发生改变&#xff0c;便立即调用一个函数。 例如&#xff1a;用户使用【鼠标点击】网页中的一个按钮、用户使用【鼠标拖拽】网页中的一张图片 事件…

【MySQL】外键约束和外键策略

一、什么是外键约束&#xff1f; 外键约束&#xff08;FOREIGN KEY&#xff0c;缩写FK&#xff09;是用来实现数据库表的参照完整性的。外键约束可以使两张表紧密的结合起来&#xff0c;特别是针对修改或者删除的级联操作时&#xff0c;会保证数据的完整性。 外键是指表…

ElasticSearch——详细看看ES集群的启动流程

参考&#xff1a;一起看看ES集群的启动流程 本文主要从流程上介绍整个集群是如何启动的&#xff0c;集群状态如何从Red变成Green&#xff0c;然后分析其他模块的流程。 这里的集群启动过程指集群完全重启时的启动过程&#xff0c;期间要经历选举主节点、主分片、数据恢复等重…

java中的SPI机制

文章目录SPI 介绍何谓 SPI?SPI 和 API 有什么区别&#xff1f;实战演示Service Provider InterfaceService Provider效果展示ServiceLoaderServiceLoader 具体实现自己实现一个 ServiceLoader总结在面向对象的设计原则中&#xff0c;一般推荐模块之间基于接口编程&#xff0c;…

测试开发备战秋招面试3

努力了那么多年,回头一望,几乎全是漫长的挫折和煎熬。对于大多数人的一生来说,顺风顺水只是偶尔,挫折、不堪、焦虑和迷茫才是主旋律。我们登上并非我们所选择的舞台,演出并非我们所选择的剧本。继续加油吧&#xff01; 目录 1.讲一下redis和mySQL的区别&#xff1f; 2.讲一下…

ChatGPT让现在的软件都土掉渣了

我们家有两个娃&#xff0c;每次我们想要出去时订个酒店时都好麻烦。我在某程上找&#xff0c;我先看有没有家庭房&#xff0c;但家庭房很少&#xff0c;而且有些家庭房实际上只能睡得下两大一小。普通房间能不能睡得下四个人&#xff0c;那可是得查看很多信息&#xff0c;如床…

Redis队列Stream、Redis多线程详解(一)

Redis队列与Stream Redis5.0 最大的新特性就是多出了一个数据结构 Stream&#xff0c;它是一个新的强大的支持多播的可持久化的消息队列&#xff0c;作者声明Redis Stream地借鉴了 Kafka 的设计。 Redis Stream 的结构如上图所示,每一个Stream都有一个消息链表&#xff0c;将所…

Pandas 学习手册中文第二版:1~5

原文&#xff1a;Learning pandas 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 一、Pandas 与数据分析 欢迎来到《Pandas 学习手册》&#xff01; 在本书中&#xff0c;我们将进行一次探索我们学习 Pandas 的旅程&#xff0c;这是一种用于 Python 编程语言的开源数…

Android:启动流程

Android启动流程 第一步&#xff1a;启动电源以及系统启动 当电源按下&#xff0c;引导芯片代码开始从预定义的地方(固化在ROM)开始执行。加载引导程序到RAM&#xff0c;然后 执行 第二步&#xff1a;引导程序 引导程序是在Android操作系统开始运行前的一个小程序。引导程序…

如何防止设备被重复控制

1. 引言 在一个物联网的系统中&#xff0c;主要有三部分组成&#xff1a;云端、WiFi、电控。当用户在APP上控制设备时&#xff0c;其控制下发链路是&#xff1a;云端>>WIFI>> 电控。当电控收到控制指令后&#xff0c;执行设备控制&#xff0c;控制成功后&#xff…

如何使用Midjourney辅助建筑平面设计,常用的建筑平面效果图提示和使用效果展示(内附Midjourney提示词网站)

文章目录一、室内建筑平面设计1.AutoCAD图纸&#xff08;别墅首层图&#xff09;2.平面效果图3.三维平面透视图二、建筑室内设计1.现代简约2.波西米亚风格3.工业风格4.沿海风格5.法国风格6.现代风格7.提示增加颜色倾向8.提示中增加设计师9.其它一些尝试三、好用的Midjourney提示…

Redis 6.x哨兵模式部署(五)

目录 一、主从复架构搭建 二、哨兵模式搭建 2.1背景 2.2哨兵模式介绍 2.3 Sentinel三大工作任务 1监控&#xff08;Monitoring&#xff09; 2提醒&#xff08;Notification&#xff09; 3自动故障迁移&#xff08;Automatic failover&#xff09; 4核心流程 2.4 安装…

企业如何实现数字化转型?

企业如何实现数字化转型&#xff1f; 首先&#xff0c;我需要先跟各位明确&#xff0c;企业数字化转型中很重要的3个“先行”条件&#xff1a; 第一、企业一把手的眼光和格局 一把手的视野、格局、定力是最重要的因素&#xff0c;没有之一。能不能放下自己过去的执念与经验&a…

信息与计算科学有哪些SCI期刊推荐? - 易智编译EaseEditing

以下是信息与计算科学领域的一些知名SCI期刊推荐&#xff1a; Information Sciences&#xff1a; 该期刊是信息科学领域的重要期刊&#xff0c;涵盖了信息科学、计算科学、人工智能、数据挖掘、模式识别、多媒体技术、网络通信、智能系统等方面的研究。 IEEE Transactions on…

电子文件的线上存储工具,你了解多少?

信息化时代的来临&#xff0c;企业也纷纷跟随时代步伐进入现代化办公。信息时代最显著的特征就是纸质文件到电子文件的转变。企业一天的办公中&#xff0c;可能就会产出无数的电子文件&#xff0c;其中很多文件都是珍贵的业务经验&#xff0c;因此线上存储是企业需要考虑的问题…