Add files via upload

master
Alan 2020-09-27 07:21:17 +01:00 zatwierdzone przez GitHub
rodzic f2ad802580
commit 5c1dc98509
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
1 zmienionych plików z 72 dodań i 27 usunięć

Wyświetl plik

@ -6,8 +6,8 @@
* Starting point sketch for projects using the esp32cam development board with the following features
* web server with live video streaming
* sd card support (using 1bit mode to free some io pins)
* io pins available for use are 13, 12(must be low at boot)
* flash led is still available for use on pin 4
* io pins available for use are 13 and 12 (12 must be low at boot)
* flash led is still available for use on pin 4 and does not flash when accessing sd card
*
*
* - created using the Arduino IDE with ESP32 module installed (https://dl.espressif.com/dl/package_esp32_index.json)
@ -17,7 +17,9 @@
*
* Info on the esp32cam board: https://randomnerdtutorials.com/esp32-cam-video-streaming-face-recognition-arduino-ide/
*
*
* To see a more advanced sketch along the same format as this one have a look at https://github.com/alanesq/CameraWifiMotion
* which includes email support, FTP, OTA updates, time from NTP servers and motion detection
*
*
*******************************************************************************************************************/
@ -32,8 +34,8 @@
// ---------------------------------------------------------------
// Wifi settings (enter your wifi network details)
const char* ssid = "<your wifi network name here>";
const char* password = "<your wifi password here>";
const char* ssid = "<your wifi network name here>";
const char* password = "<your wifi password here>";
const String stitle = "ESP32Cam-demo"; // title of this sketch
const String sversion = "26Sep20"; // Sketch version
@ -61,7 +63,7 @@
WebServer server(80); // serve web pages on port 80
#include "soc/soc.h" // Used to disable brownout detection on 5v power feed
#include "soc/soc.h" // Used to disable brownout detection
#include "soc/rtc_cntl_reg.h"
#include "SD_MMC.h" // sd card - see https://randomnerdtutorials.com/esp32-cam-take-photo-save-microsd-card/
@ -72,11 +74,11 @@ WebServer server(80); // serve web pages on port 80
// Define global variables:
uint32_t lastStatus = millis(); // last time status light changed status (to flash all ok led)
bool sdcardPresent; // flag if an sd card is detected
int imageCounter; // image file name counter
int imageCounter; // image file name on sd card counter
// camera type settings (CAMERA_MODEL_AI_THINKER)
#define CAMERA_MODEL_AI_THINKER
#define PWDN_GPIO_NUM 32 // power to camera enable
#define PWDN_GPIO_NUM 32 // power to camera on/off
#define RESET_GPIO_NUM -1 // -1 = not used
#define XCLK_GPIO_NUM 0
#define SIOD_GPIO_NUM 26 // i2c sda
@ -93,7 +95,7 @@ WebServer server(80); // serve web pages on port 80
#define HREF_GPIO_NUM 23 // href_pin
#define PCLK_GPIO_NUM 22 // pixel_clock_pin
camera_config_t config;
camera_config_t config;
@ -117,7 +119,14 @@ void setup() {
// Turn-off the 'brownout detector'
WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);
// Define io pins
pinMode(indicatorLED, OUTPUT);
digitalWrite(indicatorLED,HIGH);
pinMode(brightLED, OUTPUT);
digitalWrite(brightLED,LOW);
// Connect to wifi
digitalWrite(indicatorLED,LOW); // small indicator led on
Serial.println();
Serial.println();
Serial.print("Connecting to ");
@ -132,19 +141,15 @@ void setup() {
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
server.begin();
digitalWrite(indicatorLED,HIGH); // small indicator led off
// define web pages (call procedures when url requested)
// define web pages (call procedures when url is requested)
server.on("/", handleRoot); // root page
server.on("/stream", handleStream); // stream live video
server.on("/photo", handlePhoto); // capture image and save to sd card
server.on("/photo", handlePhoto); // save image to sd card
server.on("/img", handleImg); // show image from sd card
server.onNotFound(handleNotFound); // invalid url requested
// Define io pins
pinMode(indicatorLED, OUTPUT);
digitalWrite(indicatorLED,HIGH);
pinMode(brightLED, OUTPUT);
digitalWrite(brightLED,LOW);
// set up camera
Serial.print(("Initialising camera: "));
if (setupCameraHardware()) Serial.println("OK");
@ -164,7 +169,7 @@ void setup() {
Serial.println("SD Card type detect failed");
sdcardPresent = 0; // flag no sd card available
} else {
sdcardPresent = 1; // valid sd card found
// valid sd card detected
uint16_t SDfreeSpace = (uint64_t)(SD_MMC.totalBytes() - SD_MMC.usedBytes()) / (1024 * 1024);
Serial.println("SD Card found, free space = " + String(SDfreeSpace) + "MB");
sdcardPresent = 1; // flag sd card available
@ -217,10 +222,13 @@ void loop() {
server.handleClient(); // handle any web page requests
// If not in triggered state flash status light to show sketch is running ok
// flash status light to show sketch is running
if ((unsigned long)(millis() - lastStatus) >= TimeBetweenStatus) {
lastStatus = millis(); // reset timer
digitalWrite(indicatorLED,!digitalRead(indicatorLED)); // flip indicator led status
@ -234,10 +242,11 @@ void loop() {
// ----------------------------------------------------------------
// Flash indicator LED
// Misc small procedures
// ----------------------------------------------------------------
// flash led 'reps' number of times
void flashLED(int reps) {
for(int x=0; x < reps; x++) {
digitalWrite(indicatorLED,LOW);
@ -248,6 +257,7 @@ void flashLED(int reps) {
}
// critical error - stop sketch and continually flash error status
void showError(int errorNo) {
while(1) {
@ -261,11 +271,10 @@ void showError(int errorNo) {
// ----------------------------------------------------------------
// save live camera image to sd card
// Capture image from camera and save to sd card
// iTitle = file name to use
// ----------------------------------------------------------------
void storeImage(String iTitle) {
if (debugInfo) Serial.println("Storing image #" + String(imageCounter) + " to sd card");
@ -273,7 +282,6 @@ void storeImage(String iTitle) {
fs::FS &fs = SD_MMC; // sd card file system
// capture live image from camera
// cameraImageSettings(); // apply camera sensor settings (in camera.h)
if (flashRequired) digitalWrite(brightLED,HIGH); // turn flash on
camera_fb_t *fb = esp_camera_fb_get(); // capture image frame from camera
digitalWrite(brightLED,LOW); // turn flash off
@ -308,10 +316,9 @@ void storeImage(String iTitle) {
// ----------------------------------------------------------------
// Set up the camera
// Configure the camera
// ----------------------------------------------------------------
bool setupCameraHardware() {
config.ledc_channel = LEDC_CHANNEL_0;
@ -370,6 +377,8 @@ void handleRoot() {
// html body
client.write("<p>Hello from esp32cam</p>\n");
if (sdcardPresent) client.write("<p>SD Card available</p>\n");
else client.write("<p>No SD Card detected</p>\n");
// end html
client.write("</body></htlm>\n");
@ -405,7 +414,7 @@ void handlePhoto() {
// note: if the line of html is not just plain text it has to be first put in to 'tstr' then sent in this way
// I find it easier to use strings then convert but this is probably frowned upon ;-)
tstr = "<p>Image saved to sd card as image number " + String(imageCounter) + "</p>\n";
client.write(tstr.c_str());
client.write(tstr.c_str());
// end html
client.write("</body></htlm>\n");
@ -415,6 +424,42 @@ void handlePhoto() {
} // handlePhoto
// ----------------------------------------------------------------
// -show image from sd card i.e. http://x.x.x.x/img?img=x
// ----------------------------------------------------------------
// default image = most recent
void handleImg() {
WiFiClient client = server.client(); // open link with client
int imgToShow = imageCounter; // default to showing most recent file
// get image number from url parameter
if (server.hasArg("img")) {
String Tvalue = server.arg("img"); // read value
imgToShow = Tvalue.toInt(); // convert string to int
if (imgToShow < 1 || imgToShow > imageCounter) imgToShow = imageCounter; // validate image number
}
if (debugInfo) Serial.println("Displaying image #" + String(imgToShow) + " from sd card");
String tFileName = "/img/" + String(imgToShow) + ".jpg";
fs::FS &fs = SD_MMC; // sd card file system
File timg = fs.open(tFileName, "r");
if (timg) {
size_t sent = server.streamFile(timg, "image/jpeg");
timg.close();
} else {
if (debugInfo) Serial.println("Error: image file not found");
}
} // handleImg
// ******************************************************************************************************************