Initial commit (secrets isolated)
This commit is contained in:
172
src/main.cpp
Executable file
172
src/main.cpp
Executable 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
|
||||
}
|
||||
Reference in New Issue
Block a user