ESP32 web WiFi 管理器esp32-wifi-manager
拓 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_DONE与wifi_event_sta_scan_done_t*对象一起发送。
WM_EVENT_STA_DISCONNECTED与wifi_event_sta_disconnected_t*对象一起发送。
WM_EVENT_STA_GOT_IP与ip_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对象来访问分配给esp32的ip地址。
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几乎永远不会等待。
ESP32 web WiFi 管理器esp32-wifi-manager相关推荐
- Web主机管理器(WHM)中如何安装SSL证书
Web主机管理器(WHM)使用一个基于Web的应用程序,可帮助管理Web服务器上的托管账户.在Web主机管理器中如何安装SSL证书? 这里需要先购买SSL证书,选择受信任的CA机构(Digicert. ...
- 【oracle】配置恢复管理器Configuring Recovery Manager
第1章 配置恢复管理器Configuring Recovery Manager 组成:GUI或者命令行.可选的恢复目录.RMAN命令和脚本,以及磁带媒介连接 考虑事项:RMAN是一种物理备份方法.其他 ...
- Delphi Project 之工程管理器(Project Manager)
工程(Project)可以说是Delphi的生命.不可能创建一个没有工程的程序.利用工程可以把全部工作组合到一起,从而创建出可以执行的应用程序. 一般来说,每个工程都需要管理.也许要增加一个新的单元到 ...
- Python Django,模型,模型管理器类(models.Manager)(与数据库交互的接口),自定义模型管理器类
模型类.objects.all() ---> objects是Django自动生成的管理器对象,通过这个管理器对象可以实现与数据库的交互. 定义模型类时可以为模型类指定自定义的管理类对象,指定后 ...
- WiFi资源管理器:WiFi Explorer Pro for Mac
WiFi Explorer Pro for Mac是一款运行在Mac平台上的WiFi资源管理器专业版,WiFi Explorer Pro Mac版可以帮助用户监控和排除无线网络故障,还具备信息元素解码 ...
- 逻辑卷管理器-LVM-Logical Volume Manager 基本操作
LVM重点在于:可以弹性地调整文件系统的容量,而并不在于性能和数据安全上. LVM功能在于:可以整合多个物理分区,使得这些分区看起来像是一个磁盘,未来可以在LVM管理的磁盘中新增或删除其他物理分区. ...
- 192.168.1.1随身wifi登录器
192.168.1.1随身wifi登录器是一款方便携带的无线路由器,用于连接公共wifi并提供安全的私人wifi网络.在使用该设备时,用户需要先通过登录管理界面进行设置.本文将介绍如何使用192.16 ...
- 查看虚拟机cpu型号_虚拟机管理器(Virtual Machine Manager)简介 | Linux 中国
virt-manager 为 Linux 虚拟化提供了全方位的选择.-- Alan Formy-duval 在我关于 GNOME Boxes 的系列文章中,我已经解释了 Linux 用户如何能够在他们 ...
- android wifi布局,Android使用 WiFi 建立 P2P 连接
Wi-Fi 点对点(P2P)API 允许应用程序在无需连接到网络和热点的情况下连接到附近的设备.(Android Wi-Fi P2P 使用 Wi-Fi Direct™ 验证程序进行编译).Wi-Fi ...
最新文章
- xpath定位中starts-with、contains和text()的用法
- 以太坊和区块链实战技术分析详解
- vc中调用其他应用程序的方法(函数) winexec,shellexecute ,createprocess
- 关于计算机网络拓扑说法正确,计算机网络试题库 - 谢希仁(第六版)(答案解析)...
- 1089 狼人杀-简单版 (20分)
- laravel框架常用目录路径
- vim---C++开发环境搭建
- oracle优化查询前几条,一个查询优化的分析调整全过程!很值得一看
- 2016年PMP项目管理知识体系精髓总结
- VIM插件——vimplus安装(centos 7)
- python项目练手(一)------飞船大战游戏
- 信号灯绿波服务器,主干道绿波与红波控制策略
- 亚马逊商品详情API接口(item_get-获得AMAZON商品详情接口),亚马逊API接口
- JS判断当前手机类型
- t检验,单因素方差和相似非参数检验-IBM SPSS 第六版第9章译文
- S32K144调试记录(一)
- Tomcat:The valid characters are defined in RFC 7230 and RFC 3986 问题处理
- 陕西万德软件有限公司
- <学习笔记>从零开始自学Python-之-常用库篇(十一)正则表达式re库
- 2020百度大数据竞赛-Top3 故事分享(开源连接)新手入门
热门文章
- 电气工程和计算机科学与技术专业就业前景,电气工程与自动化专业就业前景以及就业方向...
- linux下pppoe服务器搭建
- java毕业生设计预约健身私教网站计算机源码+系统+mysql+调试部署+lw
- 成功解决keil识别不到单片机芯片,下载不了程序
- 解决UnicodeDecodeError: 'gbk' codec can't decode byte 0xaa in position 212: illegal multibyte sequence
- String字符串类型
- i春秋 WEB fuzzing
- JDBC(数据库和Java)
- 基于DS1820与DS1302的控制装置(窗帘控制)
- 新电脑重装系统好吗?电脑重装系统的好坏