Pārlūkot izejas kodu

新增 'esp32&m5_wifi_connect/esp32&m5_wifi_connect_2'

fatwolf 1 gadu atpakaļ
vecāks
revīzija
d8d754d40b
1 mainītis faili ar 198 papildinājumiem un 0 dzēšanām
  1. 198 0
      esp32&m5_wifi_connect/esp32&m5_wifi_connect_2

+ 198 - 0
esp32&m5_wifi_connect/esp32&m5_wifi_connect_2

@@ -0,0 +1,198 @@
+#include "esp_camera.h"
+#include <WiFi.h>
+#include <HTTPClient.h>
+
+//
+// WARNING!!! PSRAM IC required for UXGA resolution and high JPEG quality
+//            Ensure ESP32 Wrover Module or other board with PSRAM is selected
+//            Partial images will be transmitted if image exceeds buffer size
+//
+
+// Select camera model
+//#define CAMERA_MODEL_WROVER_KIT // Has PSRAM
+//#define CAMERA_MODEL_ESP_EYE // Has PSRAM
+//#define CAMERA_MODEL_M5STACK_PSRAM // Has PSRAM
+//#define CAMERA_MODEL_M5STACK_V2_PSRAM // M5Camera version B Has PSRAM
+#define CAMERA_MODEL_M5STACK_WIDE // Has PSRAM
+//#define CAMERA_MODEL_M5STACK_ESP32CAM // No PSRAM
+//#define CAMERA_MODEL_AI_THINKER // Has PSRAM
+//#define CAMERA_MODEL_TTGO_T_JOURNAL // No PSRAM
+WiFiClient client;
+
+
+#include "camera_pins.h"
+
+//const char* ssid = "goldin_lab1";
+//const char* password = "goldin53743001";
+
+const char* ssid = "Fatwolf";
+const char* password = "08250825";
+const char* backupSsid = "goldin_lab1";
+const char* backupPassword = "goldin53743001";
+int connectionAttempts = 0;
+
+unsigned long previousMillis = 0;
+unsigned long interval = 30000;
+
+void startCameraServer();
+
+void setup() {
+  Serial.begin(115200);
+  Serial.setDebugOutput(true);
+  Serial.println();
+
+  camera_config_t config;
+  config.ledc_channel = LEDC_CHANNEL_0;
+  config.ledc_timer = LEDC_TIMER_0;
+  config.pin_d0 = Y2_GPIO_NUM;
+  config.pin_d1 = Y3_GPIO_NUM;
+  config.pin_d2 = Y4_GPIO_NUM;
+  config.pin_d3 = Y5_GPIO_NUM;
+  config.pin_d4 = Y6_GPIO_NUM;
+  config.pin_d5 = Y7_GPIO_NUM;
+  config.pin_d6 = Y8_GPIO_NUM;
+  config.pin_d7 = Y9_GPIO_NUM;
+  config.pin_xclk = XCLK_GPIO_NUM;
+  config.pin_pclk = PCLK_GPIO_NUM;
+  config.pin_vsync = VSYNC_GPIO_NUM;
+  config.pin_href = HREF_GPIO_NUM;
+  config.pin_sscb_sda = SIOD_GPIO_NUM;
+  config.pin_sscb_scl = SIOC_GPIO_NUM;
+  config.pin_pwdn = PWDN_GPIO_NUM;
+  config.pin_reset = RESET_GPIO_NUM;
+  config.xclk_freq_hz = 20000000;
+  config.pixel_format = PIXFORMAT_JPEG;
+  
+  // if PSRAM IC present, init with UXGA resolution and higher JPEG quality
+  //                      for larger pre-allocated frame buffer.
+  if(psramFound()){
+    config.frame_size = FRAMESIZE_UXGA;
+    config.jpeg_quality = 10;
+    config.fb_count = 2;
+  } else {
+    config.frame_size = FRAMESIZE_SVGA;
+    config.jpeg_quality = 12;
+    config.fb_count = 1;
+  }
+
+#if defined(CAMERA_MODEL_ESP_EYE)
+  pinMode(13, INPUT_PULLUP);
+  pinMode(14, INPUT_PULLUP);
+#endif
+
+  // camera init
+  esp_err_t err = esp_camera_init(&config);
+  if (err != ESP_OK) {
+    Serial.printf("Camera init failed with error 0x%x", err);
+    return;
+  }
+
+  sensor_t * s = esp_camera_sensor_get();
+  // initial sensors are flipped vertically and colors are a bit saturated
+  if (s->id.PID == OV3660_PID) {
+    s->set_vflip(s, 1); // flip it back
+    s->set_brightness(s, 1); // up the brightness just a bit
+    s->set_saturation(s, -2); // lower the saturation
+  }
+  // drop down frame size for higher initial frame rate
+  s->set_framesize(s, FRAMESIZE_QVGA);
+
+#if defined(CAMERA_MODEL_M5STACK_WIDE) || defined(CAMERA_MODEL_M5STACK_ESP32CAM)
+  s->set_vflip(s, 1);
+  s->set_hmirror(s, 1);
+#endif
+
+  //WiFi.begin(ssid, password);
+  //WiFi.begin(primarySsid, primaryPassword);
+
+  //while (WiFi.status() != WL_CONNECTED) {
+  //  delay(500);
+  //  Serial.print(".");
+  //}
+  //Serial.println("");
+  //Serial.println("WiFi connected");
+
+  //startCameraServer();
+
+  //Serial.print("Camera Ready! Use 'http://");
+  //Serial.print(WiFi.localIP());
+  //Serial.println("' to connect");
+
+} 
+
+
+
+void loop() {
+  static bool wifiConnected = false;
+  static bool usingBackupWiFi = false;
+  static int connectionAttempts = 0;
+  unsigned long currentMillis = millis();
+
+  // 检查是否需要重新连接 Wi-Fi
+  if (!wifiConnected && (WiFi.status() != WL_CONNECTED) && (currentMillis - previousMillis >= interval)) {
+    Serial.print(millis());
+    Serial.println(" Reconnecting to WiFi...");
+
+    // 如果当前未使用备用 Wi-Fi,尝试连接主要 Wi-Fi
+    if (!usingBackupWiFi) {
+      WiFi.disconnect();
+      WiFi.begin(ssid, password);
+    }
+    // 如果当前使用备用 Wi-Fi,尝试连接备用 Wi-Fi
+    else {
+      WiFi.disconnect();
+      WiFi.begin(backupSsid, backupPassword);
+    }
+
+    previousMillis = currentMillis;
+    connectionAttempts++;
+  }
+
+  // 检查 Wi-Fi 连接状态
+  if (WiFi.status() == WL_CONNECTED) {
+    wifiConnected = true;
+    if (!usingBackupWiFi) {
+      Serial.println("");
+      Serial.println("Wi-Fi connected");
+      Serial.print("SSID: ");
+      Serial.println(WiFi.SSID());
+      Serial.print("IP: ");
+      Serial.println(WiFi.localIP());
+    } else {
+      Serial.println("");
+      Serial.println("Backup Wi-Fi connected");
+      Serial.print("SSID: ");
+      Serial.println(WiFi.SSID());
+      Serial.print("IP: ");
+      Serial.println(WiFi.localIP());
+
+      // 检测主要 Wi-Fi
+      int numNetworks = WiFi.scanNetworks();
+      for (int i = 0; i < numNetworks; i++) {
+        if (WiFi.SSID(i) == ssid) {
+          Serial.println("");
+          Serial.println("Detected main Wi-Fi");
+          Serial.print("SSID: ");
+          Serial.println(WiFi.SSID(i));
+
+          // 断开备用 Wi-Fi
+          WiFi.disconnect();
+          usingBackupWiFi = false;
+          break;
+        }
+      }
+    }
+  } else {
+    wifiConnected = false;
+
+    // 如果已经尝试连接 3 次且仍未连接成功,切换到备用 Wi-Fi
+    if (connectionAttempts >= 3) {
+      usingBackupWiFi = true;
+      connectionAttempts = 0;
+      Serial.println("");
+      Serial.println("Switching to backup Wi-Fi");
+    }
+  }
+
+  delay(1000);
+}