首页 > 其他分享 >Wi-Fi配置

Wi-Fi配置

时间:2024-02-06 10:45:38浏览次数:29  
标签:配置 Wi 二维码 tft TFT Fi 连接

ESP8266-ESP32 Adruino Wi-Fi配置

需求

  • 在设备启动后,若无法连接Wi-Fi时,需要按AP模式​创建热点,随后根据热点ssid​与password​生成二维码,让用户可以连接到热点。在连接热点后,提供界面让用户输入可用的Wi-Fi信息,随后重启
  • 在设备后,如果未进行参数配置则根据设备后台管理地址生成二维码,让用户可以进入后台设置参数

软件实现

依赖项

  • 屏幕驱动: bodmer/TFT_eSPI​​

    • 框架:adruino​​
    • 平台: Raspberry Pi Pico (RP2040), STM32, ESP8266 and ESP32
    • 驱动:
  • 二维码生成:https://github.com/peteha99/esp_gen_qr

  • Wi-Fi 管理模块:https://github.com/tzapu/WiFiManager

任务拆分

  1. 屏幕驱动
  2. 二维码生成
  3. 提供Wi-Fi配置界面

具体实现

1. 屏幕驱动

生成二维码使用peteha99/esp_gen_qr​,需要依赖TFT_eSPI​库。该库用SPI方式驱动TFT屏幕,支持多款驱动(包括本项目使用的ST7789),和多个32位处理平台(针对ESP32、ESP8266、STM32FXXX、Rasp2040进行过专门的优化),同时针对部分型号MCU支持使用屏幕并口输出、DMA等特性。

除此之外,还提供一个配套的GUI库TFT_eWidget

配置

使用TFT_eSPI​前需要按照自己的电路对库中一些宏定义进行修改,主要有两种方式完成设置:

用户配置文件

在依赖的库目录下(PIO项目:.pio/libdeps/you-env-name/TFT_eSPI)新建TFT_eSPI_Setups​文件夹用于存放修改后的用户配置文件User_Setup.h​,随后设置User_Setup_Select.h​指向我们修改后的配置文件例如:

#include <../TFT_eSPI_Setups/my_custom_setup.h>
在PIO中设置编译变量

我们还可以在platformio.ini中进行配置,本项目使用本方式进行配置,具体配置参数如下

build_flags =
  ;###############################################################
  ; TFT_eSPI library setting here (no need to edit library files):
  ;###############################################################
  -D USER_SETUP_LOADED=1      ; Set this settings as valid
  -D SMOOTH_FONT=1            ; needed to work with TFT-eFEX
  -D ST7789_DRIVER=1          ; Select driver
; -D TFT_INVERSION_ON=1
  -D TFT_WIDTH=240            ; Set TFT size
  -D TFT_HEIGHT=240
; -D TFT_RGB_ORDER=TFT_RGB    ; Colour order Red-Green-Blue
; -D TFT_RGB_ORDER=TFT_BGR    ; Colour order Blue-Green-Red
; -D LOAD_GLCD=1              ; Load Fonts
; -D LOAD_FONT2=1             ; Load Fonts
; -D LOAD_FONT4=1             ; Load Fonts
; -D LOAD_FONT7=1             ; Load Fonts
  -D TFT_MOSI=PIN_D7
  -D TFT_SCLK=PIN_D5
  -D TFT_CS=-1
  -D TFT_DC=PIN_D3            ; Data/Comand pin
  -D TFT_RST=PIN_D4           ; Reset pin
  -D SPI_FREQUENCY=40000000   ;27000000   ; Set SPI frequency
  -D SWAP_BYTES=1             ; For JPEG Decoder
  -D WM_DEBUG_LEVEL=DEBUG_NOTIFY ; WifiManager debug level DEBUG_MAX
  -D COIN_THING_SERIAL=0      ; Serial debugging
宏定义
宏定义 含义
USER_SETUP_LOADED 使用用户配置标志 1
ST7789_DRIVER ST7789屏幕驱动,只能选择一个驱动 1
TFT_WIDTH 屏幕宽度 240
TFT_HEIGHT 屏幕高度 240
TFT_MOSI SPI信号线,主出从入 PIN_D7
TFT_SCLK SPI时钟线 PIN_D5
TFT_CS 片选引脚 -1
TFT_DC 数据/命令引脚 PIN_D3
TFT_RST 复位引脚 PIN_D4
SPI_FREQUENCY SPI时钟频率 40000000
TFT_INVERSION_ON 屏幕上下翻转 默认值

示例

  • 显示文字

    • // 加载文体
      xTft.loadFont(F("NotoSans-Regular20"));
      
      String msg = F("Hello World!");
      // 设置文字位置
      xTft.setCursor(5, 5);
      // 显示文字
      xTft.print(msg);
      // 卸载文体
      xTft.unloadFont();
      

2. 二维码生成

使用https://github.com/peteha99/esp_gen_qr.git​模块,提供字符串转二维码的功能

示例

  • 显示Wi-Fi连接信息

    • #include <Arduino.h>
      #include <TFT_eSPI.h>
      #include <ESP_QRcode.h>
      
      void setup(){
      	// 初始化tft_espi
      	TFT_eSPI xTft;
      	xTft.begin();
      	//设置黑色背景
      	XTft.fillScreen(TFT_BLACK);
      
      	// String类不同于std::string 其值
      	String qrText(F("!"));
      	ESP_QRcode tftQR(&xTft);
      	// 内容 x坐标 y坐标 宽度 二维码版本
      	tftQR.qrcode(qrText.c_str(), 20, 50, 200, 3);
      }
      
      void loop(){}
      

3. 提供Wi-Fi配置界面

使用wnatth3/WiFiManager​库来进行esp8266/esp32Wi-Fi配置,该库提供一个优雅的Wi-Fi配置web界面,支持在Wi-Fi连接成功或者连接失败后,执行用户自定义任务。

WiFiManager​在成功设置Wi-Fi连接后,会调用esp8266/esp32的adruino的sdk存储Wi-Fi连接信息,再次启动后调用wifi_station_get_config_default()​接口来获取Wi-Fi连接信息。因此,在使用该库时,不需要存储Wi-Fi配置信息。

.pio/libdeps/develop/WiFiManager/WiFiManager.cpp:981
https://github.com/barn53/WiFiManager/blob/eb8f77e756fe36c7d731dbab78753a6466daba67/WiFiManager.cpp#L981

在尝试连接Wi-Fi失败时,按照wifiManager.autoConnect("AutoConnectAP", "password")​设置的ssid与密码开启一个热点,在用户连接热点

示例

以下示例使用了TFT屏幕,实现了二维码辅助配置Wi-Fi manager完整流程,首次启动需要用户扫描二维码配置Wi-Fi,之后就会根据之前保存的信息自动连接Wi-Fi。


void setup(){
  auto sp_tft = std::make_shared<TFT_eSPI>();
  // 初始化屏幕
  sp_tft->begin();
  sp_tft->fillScreen(TFT_BLACK);
  sp_tft->setTextColor(TFT_WHITE);

  auto espGenQrDemo = EspGenQrDemo(sp_tft);

  // 拼接Wi-Fi连接信息
  String qr_msg = (F("WIFI:T:WPA;S:"));
  qr_msg += WIFI_SSID;
  qr_msg += F(";P:");
  qr_msg += WIFI_PASSWD;
  qr_msg += F(";H:;");

  // 0. 声明Wi-Fi Manager
  WiFiManager wifiManager;
  // 1. 设置Wi-Fi为STA模式
  WiFi.mode(WIFI_STA);  // explicitly set mode, esp defaults to STA+AP
                        // it is a good practice to make sure your code sets
                        // wifi mode how you want it.

  // 2. 配置自动连接失败回调函数注册
  // 回调函数当设备在 WiFi 连接尝试失败后进入配置模式时执行
  wifiManager.setAPCallback([&](WiFiManager* wifimanager) {
    LOG_I_PRINTLN(F("Wi-Fi自动连接失败, 显示热点二维码"));
    // 连接失败时显示热点二维码
    espGenQrDemo.ShowQrCode(qr_msg.c_str(), 20, 20, 200, 3);
  });

  // 3. Wi-Fi成功连接,保存配置后回调函数注册
  wifiManager.setSaveConfigCallback([&]() {
    LOG_I_PRINTLN("Wi-Fi配置成功, 即将重启设备");
    delay(5000);
    ESP.reset();
  });
  LOG_I_PRINTLN("尝试自动重连Wi-Fi");
  wifiManager.autoConnect(String(WIFI_SSID).c_str(),
                          String(WIFI_PASSWD).c_str());

  sp_tft->setTextSize(3);
  sp_tft->setCursor(0, 5);
  sp_tft->println(F("IP:"));
  sp_tft->setCursor(0, 40);
  sp_tft->println(WiFi.localIP().toString());

  LOG_I_PRINTLN("Wi-Fi自动连接成功");
  Serial.println(F("\nInitialisation done."));
  Serial.print(F("IP: "));
  Serial.println(WiFi.localIP().toString());
}

void loop(){}

参考资料

二维码(QR Code)的生成原理及解析http://t.csdnimg.cn/zPRXa

标签:配置,Wi,二维码,tft,TFT,Fi,连接
From: https://www.cnblogs.com/Biiigwang/p/18009325/wifi-configuration-1bg408

相关文章

  • Windows下如何使用 Sublime Text 4 配置 C/C++ 环境(使用LSP-clangd)
    1软件安装1.1SublimeText4安装及PackageControl安装略,请自行百度/必应/谷歌。1.2Clang环境安装1.2.1Clang下载在LLVMMinGW下载最新版Clang编译器,此处应根据个人电脑系统及版本选择,本文选择llvm-mingw-20231128-ucrt-x86_64.zip,后续文件名将以此为例。各版本......
  • org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named '
    开发遇到一个问题:org.springframework.beans.factory.NoSuchBeanDefinitionException:Nobeannamed'ckhSynCardNumToMbhkJob'available这个报错可能是因为:1.spring的xml配置文件Bean中的id和getBean的id不一致2.是否是忘记加注解了,3.启动类包扫描路径是否正确经过测试发......
  • DevExpress WinForms中文教程 - 如何创建可访问的WinForms应用?(二)
    为用户创建易访问的WindowsForms应用程序不仅是最佳实践的体现,还是对包容性和以用户为中心的设计承诺。在应用程序开发生命周期的早期考虑与可访问性相关的需求可以节省长期运行的时间(因为它将决定设计决策和代码实现)。一个可访问的WinForms应用程序提供了各种好处,包括:扩大......
  • 使用ocelot 配置网关
    3.1场景描述建3个站点,2个微服务站点,1个网关微服务1:https://localhost:7227/微服务2:https://localhost:7019/网关:https://localhost:7055/在浏览器里访问 https://localhost:7227/api/Product/test1会输出test1在浏览器里访问https://localhost:7019/api/order/test2会输......
  • K8S前置配置
    安装基础软件0.不能联网处理重启网络服务servicenetworkrestart查看报错信息,如果正常就pingwww.baidu.com看是否通,如果通了不用管journalctl-xe0.将networkmanager服务停了systemctlstopNetworkManagersystemctldisableNetworkManager再次重启服务servic......
  • Nginx配置TCP/UDP流量转发
    #usernobody;worker_processes1;#error_loglogs/error.log;#error_loglogs/error.lognotice;#error_loglogs/error.loginfo;#pidlogs/nginx.pid;events{worker_connections1024;}stream{log_formatmain'$remote_addr[$tim......
  • windows下部署Blynk服务器部署最新教学
    目录Step1.下载链接Step2.部署Step2.1软件安装及载入工程1.安装Intellij社区版正常安装即可2.下载maven并将其添加进环境变量Step1.下载链接链接:https://pan.baidu.com/s/1ysbAYhyxUGx1ZG3xNMdsAw?pwd=1fel提取码:1felStep2.部署Step2.1软件安装及载入工程1.安装Intel......
  • Ubuntu 配置samba
     参考链接:[shared]comment=SharedFolderpath=/home/user/sharebrowseable=yesreadonly=noguestok=yescreatemask=0755directorymask=0755 关键点:1.配置samba用户和密码2.配置共享路径3.samb.conf中的内容按上面的填写就行。4.可以使用......
  • 禁用Win10自动更新——改域名
    禁用Win10自动更新——改域名第一步:打开【组策略】第二步:定位到第三步:改为【已启用】第四步:将服务器地址全部设为【127.0.0.1】(这是你的本地IP地址,这可以让windows无法找到正确的更新服务器地址,从而阻止更新)第五步:【确定】,重启电脑▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰......
  • Profinet转CANopen主站网关与堡盟编码器通讯案例
    Profinet转CANopen主站网关与堡盟编码器通讯案例Profinet转CANopen主站网关(XD-COPNm20)为CPU与堡盟编码器的通讯提供了CANopen协议向Profinet协议转换互通的桥梁。CANopen是一种基于CAN总线的通讯协议,它被广泛应用于工业自动化领域,而Profinet是一种以太网协议,其优点是高速传输和......