Bin inzwischen ganz angetan von dieser kleinen 8,- Euro cam. (Preis beim Chinesen)
Sie lief hier die ganze Nacht störungsfrei durch. Der Sendebetrieb verbraucht so um den einen Watt. Da liegt es nahe, so ein Teil zum Beispiel in ein Vogelhaus zu montieren, oder auf das Dach um den Amazonzulieferer früher "online" sehen zu können. Natürlich nachhaltig mit Sonnenkraft betrieben: Ein kleines 6V 5W Sonnenpanel, ein Solarwandler für 3,7V LiPo Akku 2000 mAh, dann noch ein Stromwandler 3,7V zu 5V.... fertig ist es (ca. 20,-EUR). Die Kamera mit Chip würde ich in ein Bad aus 3D Drucker Harz legen, so das nur das Objektiv rausschaut - kurz mit UV Belichten, fertig wäre eine Wasserdichte Minikamera.
Es gibt für die Cam auch ein neues Skript, da sendet die Kamera direkt an "Telegram", damit wäre der Wirkungskreis noch wesentlich höher als nur im eigenen Netz.
wenn wir schon beim Skript sind, ich habe es leicht geändert, damit klappt es etwas sicherer, hier kommt erst die Netzverbindung, dann die Kamera. Außerdem vergißt die Kamera nicht ihre IP Adresse nach dem ausschalten, wichtig bei Solarbetrieb in der Nacht!
Code: Alles auswählen
#include "esp_camera.h"
#include <WiFi.h>
//
// WARNING!!! Make sure that you have either selected ESP32 Wrover Module,
// or another board which has PSRAM enabled
//
// Select camera model
//#define CAMERA_MODEL_WROVER_KIT
//#define CAMERA_MODEL_ESP_EYE
//#define CAMERA_MODEL_M5STACK_PSRAM
//#define CAMERA_MODEL_M5STACK_WIDE
#define CAMERA_MODEL_AI_THINKER
#include "camera_pins.h"
const char* ssid = "WiFi Name";
const char* password = "WiFi Passwort hier rein";
IPAddress local_IP(192, 168, 88, 9); // hier die eigene IP angeben
IPAddress gateway(192, 168, 88, 1); // hier die IP des Router
IPAddress subnet(255, 255, 255, 0);
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;
//init with high specs to pre-allocate larger buffers
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 blightness 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)
s->set_vflip(s, 1);
s->set_hmirror(s, 1);
#endif
if(!WiFi.config(local_IP, gateway, subnet))
{Serial.println("Fehler beim IP-Adresse zuweisen!");}
WiFi.begin(ssid, password);
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() {
// put your main code here, to run repeatedly:
delay(10000);
}