Initial commit (secrets isolated)

This commit is contained in:
2026-09-25 20:39:33 +10:00
commit c900c80afb
74 changed files with 3094 additions and 0 deletions

172
src/main.cpp Executable file
View File

@@ -0,0 +1,172 @@
#include "secrets.h"
#include <WiFi.h>
#include "esp_camera.h"
#include <esp32cam_rtsp.h> // Include esp32cam-rtsp library
// WiFi Credentials
const char* ssid = SECRET_WIFI_SSID;
const char* password = SECRET_WIFI_PASS;
// MQTT Broker
const char* mqtt_server = "192.168.20.30";
const char* mqtt_user = SECRET_MQTT_USER;
const char* password = SECRET_WIFI_PASS;
// MQTT Topic
const char* mqtt_topic = "homeassistant/camera_1/control";
// Camera Pins (AI Thinker ESP32-CAM)
#define PWDN_GPIO_NUM 32
#define RESET_GPIO_NUM -1
#define XCLK_GPIO_NUM 0
#define SIOD_GPIO_NUM 26
#define SIOC_GPIO_NUM 27
#define Y9_GPIO_NUM 35
#define Y8_GPIO_NUM 34
#define Y7_GPIO_NUM 39
#define Y6_GPIO_NUM 36
#define Y5_GPIO_NUM 21
#define Y4_GPIO_NUM 19
#define Y3_GPIO_NUM 18
#define Y2_GPIO_NUM 5
#define VSYNC_GPIO_NUM 25
#define HREF_GPIO_NUM 23
#define PCLK_GPIO_NUM 22
WiFiClient espClient;
PubSubClient mqttClient(espClient);
RTSPServer rtspServer; // RTSP server instance
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void setupCamera() {
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_sccb_sda = SIOD_GPIO_NUM;
config.pin_sccb_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 (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;
}
esp_err_t err = esp_camera_init(&config);
if (err != ESP_OK) {
Serial.printf("Camera init failed with error 0x%x", err);
return;
}
Serial.println("Camera initialized");
}
void startRTSPStream() {
// Initialize RTSP server
rtspServer.begin();
Serial.println("RTSP server started");
}
void stopRTSPStream() {
// Stop the RTSP server
rtspServer.end();
Serial.println("RTSP server stopped");
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived on topic: ");
Serial.print(topic);
Serial.print(". Message: ");
String messageTemp;
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
messageTemp += (char)payload[i];
}
Serial.println();
// Handle incoming MQTT messages to control the camera
if (String(topic) == mqtt_topic) {
if (messageTemp == "turn_on_camera") {
setupCamera();
startRTSPStream();
Serial.println("Camera turned on");
} else if (messageTemp == "turn_off_camera") {
esp_camera_deinit();
stopRTSPStream();
Serial.println("Camera turned off");
}
}
}
void reconnect() {
while (!mqttClient.connected()) {
Serial.print("Attempting MQTT connection...");
if (mqttClient.connect("ESP32CAMClient", mqtt_user, mqtt_password)) {
Serial.println("connected");
mqttClient.subscribe(mqtt_topic);
} else {
Serial.print("failed, rc=");
Serial.print(mqttClient.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
void setup() {
Serial.begin(115200);
setup_wifi();
mqttClient.setServer(mqtt_server, 1883);
mqttClient.setCallback(callback);
reconnect();
// Automatically start the camera and RTSP server
setupCamera();
startRTSPStream();
Serial.println("Camera and RTSP server started");
}
void loop() {
if (!mqttClient.connected()) {
reconnect();
}
mqttClient.loop();
rtspServer.handleClient(); // Handle RTSP clients
}