增加4G扩展 (#653)

在不影响wifi原版功能的基础上,方便想增加4G功能的朋友通过内置的fpc座子连接4G模块;
默认开机是wifi模式,在联网成功前,双击主按钮,可以进行WIFI和4G网络切换;
若在wifi模式,在成功连接前,可单击主按钮可以进行重新配网;
This commit is contained in:
MakerM0
2025-05-21 22:19:25 +08:00
committed by GitHub
parent 0183830915
commit 9874a1b009
4 changed files with 59 additions and 17 deletions

View File

@@ -47,4 +47,9 @@
#define DISPLAY_BACKLIGHT_PIN GPIO_NUM_13
#define DISPLAY_BACKLIGHT_OUTPUT_INVERT true
#define ML307_RX_PIN GPIO_NUM_42
#define ML307_TX_PIN GPIO_NUM_44
#define ML307_POWER_PIN GPIO_NUM_40
#define ML307_POWER_OUTPUT_INVERT false
#endif // _BOARD_CONFIG_H_

View File

@@ -1,4 +1,4 @@
#include "wifi_board.h"
#include "dual_network_board.h"
#include "display/lcd_display.h"
#include "audio_codecs/es8311_audio_codec.h"
#include "application.h"
@@ -20,6 +20,7 @@
#include "power_manager.h"
#include "power_save_timer.h"
#include "esp_wifi.h"
#define TAG "magiclick_2p5"
@@ -73,7 +74,7 @@ static const gc9a01_lcd_init_cmd_t gc9107_lcd_init_cmds[] = {
{0xba, (uint8_t[]){0xFF, 0xFF}, 2, 0},
};
class magiclick_2p5 : public WifiBoard {
class magiclick_2p5 : public DualNetworkBoard {
private:
i2c_master_bus_handle_t codec_i2c_bus_;
Button main_button_;
@@ -116,6 +117,19 @@ private:
power_save_timer_->SetEnabled(true);
}
void Enable4GModule() {
// enable the 4G module
gpio_reset_pin(ML307_POWER_PIN);
gpio_set_direction(ML307_POWER_PIN, GPIO_MODE_OUTPUT);
gpio_set_level(ML307_POWER_PIN, ML307_POWER_OUTPUT_INVERT ? 0 : 1);
}
void Disable4GModule() {
// enable the 4G module
gpio_reset_pin(ML307_POWER_PIN);
gpio_set_direction(ML307_POWER_PIN, GPIO_MODE_OUTPUT);
gpio_set_level(ML307_POWER_PIN, ML307_POWER_OUTPUT_INVERT ? 1 : 0);
}
void InitializeCodecI2c() {
// Initialize I2C peripheral
i2c_master_bus_config_t i2c_bus_cfg = {
@@ -133,11 +147,37 @@ private:
ESP_ERROR_CHECK(i2c_new_master_bus(&i2c_bus_cfg, &codec_i2c_bus_));
}
void CheckNetType() {
if (GetNetworkType() == NetworkType::WIFI) {
Disable4GModule();
} else if (GetNetworkType() == NetworkType::ML307) {
Enable4GModule();
}
}
void InitializeButtons() {
main_button_.OnClick([this]() {
auto& app = Application::GetInstance();
if (app.GetDeviceState() == kDeviceStateStarting && !WifiStation::GetInstance().IsConnected()) {
ResetWifiConfiguration();
if (GetNetworkType() == NetworkType::WIFI) {
if (app.GetDeviceState() == kDeviceStateStarting && !WifiStation::GetInstance().IsConnected()) {
// cast to WifiBoard
auto& wifi_board = static_cast<WifiBoard&>(GetCurrentBoard());
wifi_board.ResetWifiConfiguration();
Disable4GModule();
}
} else if(GetNetworkType() == NetworkType::ML307) {
Enable4GModule();
// stop WiFi
esp_wifi_stop();
}
});
main_button_.OnDoubleClick([this]() {
auto& app = Application::GetInstance();
if (app.GetDeviceState() == kDeviceStateStarting || app.GetDeviceState() == kDeviceStateWifiConfiguring) {
SwitchNetworkType();
}
});
main_button_.OnPressDown([this]() {
@@ -149,11 +189,7 @@ private:
});
left_button_.OnClick([this]() {
power_save_timer_->WakeUp();
auto& app = Application::GetInstance();
if (app.GetDeviceState() == kDeviceStateStarting && !WifiStation::GetInstance().IsConnected()) {
ResetWifiConfiguration();
}
power_save_timer_->WakeUp();
auto codec = GetAudioCodec();
auto volume = codec->output_volume() - 10;
if (volume < 0) {
@@ -253,11 +289,12 @@ private:
}
public:
magiclick_2p5() :
magiclick_2p5() : DualNetworkBoard(ML307_TX_PIN, ML307_RX_PIN, 4096, 0),
main_button_(MAIN_BUTTON_GPIO),
left_button_(LEFT_BUTTON_GPIO),
right_button_(RIGHT_BUTTON_GPIO) {
InitializeLedPower();
CheckNetType();
InitializePowerManager();
InitializePowerSaveTimer();
InitializeCodecI2c();
@@ -305,7 +342,7 @@ public:
if (!enabled) {
power_save_timer_->WakeUp();
}
WifiBoard::SetPowerSaveMode(enabled);
DualNetworkBoard::SetPowerSaveMode(enabled);
}
};