拓 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相关推荐

  1. Web主机管理器(WHM)中如何安装SSL证书

    Web主机管理器(WHM)使用一个基于Web的应用程序,可帮助管理Web服务器上的托管账户.在Web主机管理器中如何安装SSL证书? 这里需要先购买SSL证书,选择受信任的CA机构(Digicert. ...

  2. 【oracle】配置恢复管理器Configuring Recovery Manager

    第1章 配置恢复管理器Configuring Recovery Manager 组成:GUI或者命令行.可选的恢复目录.RMAN命令和脚本,以及磁带媒介连接 考虑事项:RMAN是一种物理备份方法.其他 ...

  3. Delphi Project 之工程管理器(Project Manager)

    工程(Project)可以说是Delphi的生命.不可能创建一个没有工程的程序.利用工程可以把全部工作组合到一起,从而创建出可以执行的应用程序. 一般来说,每个工程都需要管理.也许要增加一个新的单元到 ...

  4. Python Django,模型,模型管理器类(models.Manager)(与数据库交互的接口),自定义模型管理器类

    模型类.objects.all() ---> objects是Django自动生成的管理器对象,通过这个管理器对象可以实现与数据库的交互. 定义模型类时可以为模型类指定自定义的管理类对象,指定后 ...

  5. WiFi资源管理器:WiFi Explorer Pro for Mac

    WiFi Explorer Pro for Mac是一款运行在Mac平台上的WiFi资源管理器专业版,WiFi Explorer Pro Mac版可以帮助用户监控和排除无线网络故障,还具备信息元素解码 ...

  6. 逻辑卷管理器-LVM-Logical Volume Manager 基本操作

    LVM重点在于:可以弹性地调整文件系统的容量,而并不在于性能和数据安全上. LVM功能在于:可以整合多个物理分区,使得这些分区看起来像是一个磁盘,未来可以在LVM管理的磁盘中新增或删除其他物理分区. ...

  7. 192.168.1.1随身wifi登录器

    192.168.1.1随身wifi登录器是一款方便携带的无线路由器,用于连接公共wifi并提供安全的私人wifi网络.在使用该设备时,用户需要先通过登录管理界面进行设置.本文将介绍如何使用192.16 ...

  8. 查看虚拟机cpu型号_虚拟机管理器(Virtual Machine Manager)简介 | Linux 中国

    virt-manager 为 Linux 虚拟化提供了全方位的选择.-- Alan Formy-duval 在我关于 GNOME Boxes 的系列文章中,我已经解释了 Linux 用户如何能够在他们 ...

  9. android wifi布局,Android使用 WiFi 建立 P2P 连接

    Wi-Fi 点对点(P2P)API 允许应用程序在无需连接到网络和热点的情况下连接到附近的设备.(Android Wi-Fi P2P 使用 Wi-Fi Direct™ 验证程序进行编译).Wi-Fi ...

最新文章

  1. xpath定位中starts-with、contains和text()的用法
  2. 以太坊和区块链实战技术分析详解
  3. vc中调用其他应用程序的方法(函数) winexec,shellexecute ,createprocess
  4. 关于计算机网络拓扑说法正确,计算机网络试题库 - 谢希仁(第六版)(答案解析)...
  5. 1089 狼人杀-简单版 (20分)
  6. laravel框架常用目录路径
  7. vim---C++开发环境搭建
  8. oracle优化查询前几条,一个查询优化的分析调整全过程!很值得一看
  9. 2016年PMP项目管理知识体系精髓总结
  10. VIM插件——vimplus安装(centos 7)
  11. python项目练手(一)------飞船大战游戏
  12. 信号灯绿波服务器,主干道绿波与红波控制策略
  13. 亚马逊商品详情API接口(item_get-获得AMAZON商品详情接口),亚马逊API接口
  14. JS判断当前手机类型
  15. t检验,单因素方差和相似非参数检验-IBM SPSS 第六版第9章译文
  16. S32K144调试记录(一)
  17. Tomcat:The valid characters are defined in RFC 7230 and RFC 3986 问题处理
  18. 陕西万德软件有限公司
  19. <学习笔记>从零开始自学Python-之-常用库篇(十一)正则表达式re库
  20. 2020百度大数据竞赛-Top3 故事分享(开源连接)新手入门

热门文章

  1. 电气工程和计算机科学与技术专业就业前景,电气工程与自动化专业就业前景以及就业方向...
  2. linux下pppoe服务器搭建
  3. java毕业生设计预约健身私教网站计算机源码+系统+mysql+调试部署+lw
  4. 成功解决keil识别不到单片机芯片,下载不了程序
  5. 解决UnicodeDecodeError: 'gbk' codec can't decode byte 0xaa in position 212: illegal multibyte sequence
  6. String字符串类型
  7. i春秋 WEB fuzzing
  8. JDBC(数据库和Java)
  9. 基于DS1820与DS1302的控制装置(窗帘控制)
  10. 新电脑重装系统好吗?电脑重装系统的好坏