1. 完成了ota功能的基本测试,测试通过

2. 封装了一个模板线程类,支持创建来自单例类的成员函数线程,普通类的线程,普通函数线程
3. 封装了一个Wifi模块类,支持Wifi的各种基本配置
This commit is contained in:
Misaki
2025-09-05 01:09:12 +08:00
parent 5d79f88918
commit 28ceb0caf5
24 changed files with 824 additions and 91 deletions
@@ -0,0 +1,74 @@
//
// Created by misaki on 2025/9/4.
//
#include "WifiConnectors.h"
#include "Wireless.h"
WifiConnectors* WifiConnectors::WifiConnectorsInstance = nullptr; /// 单例实例
std::mutex WifiConnectors::m_mutex;
WifiConnectors *WifiConnectors::getInstance() {
// 双检锁(DCLP),C++11 起 atomic+mutex 组合保证线程安全
WifiConnectors* tmp = WifiConnectorsInstance;
if (tmp == nullptr) {
std::lock_guard<std::mutex> lock(m_mutex);
tmp = WifiConnectorsInstance;
if (tmp == nullptr) {
tmp = new WifiConnectors();
WifiConnectorsInstance = tmp;
}
}
return tmp;
}
WifiConnectors::WifiConnectors() {
// 在此处调用底层的Wifi初始化驱动,这样Wifi就只会被初始化一次
Wireless_Init();
WIFI_Init(nullptr);
ESP_LOGI("WifiConnectors", "WifiConnectors getInstance");// 在此处调用底层的Wifi初始化驱动,这样Wifi就只会被初始化一次
}
// 析构函数
WifiConnectors::~WifiConnectors() {
}
// 连接Wifi
bool WifiConnectors::connectWifi(const std::string &ssid, const std::string &password, uint8_t max_retry) {
ESP_LOGI("WifiConnectors", "WifiConnectors connectWifi");
ESP_LOGI("WifiConnectors", "Now Try to connect %s", ssid.c_str());
if (WiFi_AutoConnect(ssid.c_str(), password.c_str(), max_retry)) {
ESP_LOGI("WifiConnectors", "WifiConnectors 连接WIFI %s 成功!!!", ssid.c_str());
this->isConnected = true; // 设置已连接
return true;
}
ESP_LOGI("WifiConnectors", "WifiConnectors 连接Wifi失败!!!");
return false;
}
// 断开Wifi
bool WifiConnectors::disconnectWifi() {
if (WiFi_Disconnect() == ESP_OK) {
ESP_LOGI("WifiConnectors", "WifiConnectors disconnectWifi");
this->isConnected = false; // 设置未连接
return true;
}
return false;
}
bool WifiConnectors::isWifiConnect() {
return this->isConnected;
}
void WifiConnectors::log() {
ESP_LOGI("WifiConnectors", "WifiConnectors log");
WIFI_Scan();
}
@@ -0,0 +1,48 @@
//
// Created by misaki on 2025/9/4.
//
#pragma once
#include <string>
#include <mutex>
class WifiConnectors{
// 显然,Wifi连接必须是单例的,否则必然出现冲突
public:
// 获取单例的静态方法
static WifiConnectors* getInstance();
public:
void log();
/**
* 连接Wifi
* 注意:此处只是对连接wifi接口做了C++封装,实际调用的时候需要为连接Wifi创建一个线程,不要让其阻塞主线程
* @param ssid Wifi名称
* @param password Wifi密码
* @param max_retry 最大重连次数
* @return 最终是否连接成功
*/
bool connectWifi(const std::string& ssid, const std::string& password, uint8_t max_retry = 3);
/**
*
* @return 是否成功断开连接
*/
bool disconnectWifi();
bool isWifiConnect();
private:
explicit WifiConnectors(); // 构造函数私有化
~WifiConnectors(); // 析构函数私有化
WifiConnectors(const WifiConnectors&) = delete; // 禁止拷贝
WifiConnectors& operator=(const WifiConnectors&) = delete; // 禁止赋值
private:
static WifiConnectors *WifiConnectorsInstance; /// 单例实例指针
static std::mutex m_mutex; /// 互斥锁以确保线程安全
bool isConnected = false; /// 当前Wifi是否连接成功
};