From 17cb95ef1b09c9eee2b4359f7e61fba570755f7a Mon Sep 17 00:00:00 2001 From: chenxu Date: Mon, 16 Mar 2026 09:54:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=9D=9E=E9=98=BB=E5=A1=9E=E6=A3=80?= =?UTF-8?q?=E6=9F=A5=E7=BD=91=E7=BB=9C=E6=B3=A8=E5=86=8C=E7=8A=B6=E6=80=81?= =?UTF-8?q?=EF=BC=8C=E4=BC=98=E5=8C=96=E7=BD=91=E7=BB=9C=E6=B3=A8=E5=86=8C?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/code.ino | 42 +++++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/code/code.ino b/code/code.ino index fd32d4b4b..06fc1498f 100644 --- a/code/code.ino +++ b/code/code.ino @@ -81,7 +81,10 @@ WebServer server(80); bool configValid = false; // 配置是否有效 bool timeSynced = false; // NTP时间是否已同步 +bool networkRegistered = false; // 网络是否已注册 unsigned long lastPrintTime = 0; // 上次打印IP的时间 +unsigned long lastCeregCheck = 0; // 上次检查网络注册的时间 +#define CEREG_CHECK_INTERVAL 5000 // 网络注册检查间隔(毫秒) #define SERIAL_BUFFER_SIZE 500 #define MAX_PDU_LENGTH 300 @@ -2532,14 +2535,8 @@ void setup() { } Serial.println("PDU模式设置完成"); - //等待网络注册(LTE/4G) - while (!waitCEREG()) { - Serial.println("等待网络注册..."); - blink_short(); - } - Serial.println("网络已注册"); - // ========== 模组初始化完成 ========== - + // ========== 模组AT初始化完成 ========== + // 连接WiFi(支持隐藏SSID) // 参数: ssid, password, channel(0=自动), bssid(nullptr=自动), connect(true=连接隐藏网络) WiFi.begin(WIFI_SSID, WIFI_PASS, 0, nullptr, true); @@ -2584,8 +2581,17 @@ void setup() { ssl_client.setInsecure(); digitalWrite(LED_BUILTIN, LOW); + // 非阻塞检查网络注册状态(不再阻塞等待,改为loop中周期性检查) + networkRegistered = waitCEREG(); + if (networkRegistered) { + Serial.println("网络已注册"); + } else { + Serial.println("网络尚未注册,将在后台继续检查..."); + } + lastCeregCheck = millis(); + // 如果配置有效,发送启动通知 - if (configValid) { + if (configValid && networkRegistered) { Serial.println("配置有效,发送启动通知..."); String subject = "短信转发器已启动"; String body = "设备已启动\n设备地址: " + getDeviceUrl(); @@ -2597,6 +2603,24 @@ void loop() { // 处理HTTP请求 server.handleClient(); + // 周期性检查网络注册状态 + if (!networkRegistered && millis() - lastCeregCheck >= CEREG_CHECK_INTERVAL) { + lastCeregCheck = millis(); + networkRegistered = waitCEREG(); + if (networkRegistered) { + Serial.println("网络已注册"); + // 网络刚注册成功,发送启动通知 + if (configValid) { + Serial.println("配置有效,发送启动通知..."); + String subject = "短信转发器已启动"; + String body = "设备已启动\n设备地址: " + getDeviceUrl(); + sendEmailNotification(subject.c_str(), body.c_str()); + } + } else { + Serial.println("等待网络注册..."); + } + } + // 如果配置无效,每秒打印一次IP地址 if (!configValid) { if (millis() - lastPrintTime >= 1000) {