変更点はIO33につながってる赤色LEDを使えるようにWifiマネージャーのサンプルを移植。そしてmDNSで2台目つないだときにかぶらないように対策したぐらい。2台以降用に色々いじってみたものの変数をMDNS.begin()に入れるとうまく設定できなかったので…
WiFiマネージャーで設定したときに接続できないのもソフトリセットで対応…
本体のストリームもAsync対応させたいなぁ
以下サンプル編集したやつ。どこ編集したかわからなくなったのでメインのスケッチだけコピペしておいた。
#include "esp_camera.h" #include <WiFi.h> #include <ESPmDNS.h>//追加 #include <ESPAsyncWebServer.h>//追加 #include <ESPAsyncWiFiManager.h>//追加 AsyncWebServer server(80); DNSServer dns; //for LED status #include <Ticker.h> Ticker ticker; #define BUILTIN_LED 33 boolean nwset = false; void tick() { //toggle state int state = digitalRead(BUILTIN_LED); // get the current state of GPIO1 pin digitalWrite(BUILTIN_LED, !state); // set pin to the opposite state } //gets called when WiFiManager enters configuration mode void configModeCallback (AsyncWiFiManager *myWiFiManager) { Serial.println("Entered config mode"); Serial.println(WiFi.softAPIP()); //if you used auto generated SSID, print it Serial.println(myWiFiManager->getConfigPortalSSID()); //entered config mode, make led toggle faster ticker.attach(0.2, tick); nwset = true; } // // 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 #include "camera_pins.h" //const char* ssid = "*********"; //const char* password = "*********"; void startCameraServer(); void setup() { //WiFi.mode(WIFI_STA); //WiFi.disconnect(true,true); Serial.begin(115200); Serial.setDebugOutput(true); Serial.println(); //set led pin as output pinMode(BUILTIN_LED, OUTPUT); // start ticker with 0.5 because we start in AP mode and try to connect ticker.attach(0.6, tick); AsyncWiFiManager wifiManager(&server,&dns); wifiManager.setBreakAfterConfig(true); wifiManager.setAPCallback(configModeCallback); if (!wifiManager.autoConnect("ESP32-CAM")) { Serial.println("failed to connect and hit timeout"); //reset and try again, or maybe put it to deep sleep ESP.restart(); delay(1000); } if(nwset == true){ ESP.restart(); } 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(); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } ticker.detach(); //keep LED on digitalWrite(BUILTIN_LED, HIGH); MDNS.begin("esp32"); int num = 0; IPAddress ip = MDNS.queryHost("cam"); if(ip[0] == 0){ MDNS.end(); MDNS.begin("cam"); }else{ MDNS.end(); MDNS.begin("cam1"); } Serial.println(""); Serial.println("WiFi connected"); startCameraServer(); Serial.print("Camera Ready! Use 'http://"); Serial.print(WiFi.localIP()); Serial.println("' to connect"); } void loop() { // put your main code here, to run repeatedly: delay(10000); }
0 件のコメント:
コメントを投稿