kopia lustrzana https://github.com/alanesq/esp32cam-demo
improved pwm
rodzic
b74b4d77b5
commit
036e62ccff
|
@ -2,6 +2,8 @@
|
||||||
*
|
*
|
||||||
* ESP32Cam development board demo sketch using Arduino IDE
|
* ESP32Cam development board demo sketch using Arduino IDE
|
||||||
* Github: https://github.com/alanesq/ESP32Cam-demo
|
* Github: https://github.com/alanesq/ESP32Cam-demo
|
||||||
|
*
|
||||||
|
* Tested with ESP32 board manager version 1.0.6
|
||||||
*
|
*
|
||||||
* Starting point sketch for projects using the esp32cam development board with the following features
|
* Starting point sketch for projects using the esp32cam development board with the following features
|
||||||
* web server with live video streaming and RGB data from camera demonstrated.
|
* web server with live video streaming and RGB data from camera demonstrated.
|
||||||
|
@ -53,9 +55,11 @@
|
||||||
|
|
||||||
// Wifi Settings
|
// Wifi Settings
|
||||||
|
|
||||||
const char *SSID = "your_wifi_ssid";
|
#include <wifiSettings.h> // delete this line, un-comment the below two lines and enter your wifi details
|
||||||
|
|
||||||
const char *PWD = "your_wifi_pwd";
|
//const char *SSID = "your_wifi_ssid";
|
||||||
|
|
||||||
|
//const char *PWD = "your_wifi_pwd";
|
||||||
|
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------------------------------------
|
||||||
|
@ -68,7 +72,7 @@ const char *PWD = "your_wifi_pwd";
|
||||||
// ---------------------------------------------------------------
|
// ---------------------------------------------------------------
|
||||||
|
|
||||||
const char* stitle = "ESP32Cam-demo"; // title of this sketch
|
const char* stitle = "ESP32Cam-demo"; // title of this sketch
|
||||||
const char* sversion = "13Aug21"; // Sketch version
|
const char* sversion = "08Oct21"; // Sketch version
|
||||||
|
|
||||||
bool sendRGBfile = 0; // if set '/rgb' will send the rgb data as a file rather than display some on a HTML page
|
bool sendRGBfile = 0; // if set '/rgb' will send the rgb data as a file rather than display some on a HTML page
|
||||||
|
|
||||||
|
@ -91,7 +95,12 @@ const char *PWD = "your_wifi_pwd";
|
||||||
|
|
||||||
const int indicatorLED = 33; // onboard small LED pin (33)
|
const int indicatorLED = 33; // onboard small LED pin (33)
|
||||||
|
|
||||||
const int brightLED = 4; // onboard Illumination/flash LED pin (4)
|
// Bright LED
|
||||||
|
const int brightLED = 4; // onboard Illumination/flash LED pin (4)
|
||||||
|
int brightLEDbrightness = 0; // initial brightness (0 - 255)
|
||||||
|
const int ledFreq = 5000; // PWM settings
|
||||||
|
const int ledChannel = 15; // needs to be 14 or 15 with esp32cam (timer3?)
|
||||||
|
const int ledRresolution = 8;
|
||||||
|
|
||||||
const int iopinA = 13; // general io pin 13
|
const int iopinA = 13; // general io pin 13
|
||||||
const int iopinB = 12; // general io pin 12 (must not be high at boot)
|
const int iopinB = 12; // general io pin 12 (must not be high at boot)
|
||||||
|
@ -182,6 +191,7 @@ void setup() {
|
||||||
|
|
||||||
if (serialDebug) {
|
if (serialDebug) {
|
||||||
Serial.begin(serialSpeed); // Start serial communication
|
Serial.begin(serialSpeed); // Start serial communication
|
||||||
|
// Serial.setDebugOutput(true);
|
||||||
|
|
||||||
Serial.println("\n\n\n"); // line feeds
|
Serial.println("\n\n\n"); // line feeds
|
||||||
Serial.println("-----------------------------------");
|
Serial.println("-----------------------------------");
|
||||||
|
@ -253,6 +263,7 @@ void setup() {
|
||||||
ESP.restart(); // restart and try again
|
ESP.restart(); // restart and try again
|
||||||
delay(5000);
|
delay(5000);
|
||||||
} else {
|
} else {
|
||||||
|
// SPIFFS.format(); // wipe spiffs
|
||||||
if (serialDebug) {
|
if (serialDebug) {
|
||||||
Serial.print(("SPIFFS mounted successfully: "));
|
Serial.print(("SPIFFS mounted successfully: "));
|
||||||
Serial.printf("total bytes: %d , used: %d \n", SPIFFS.totalBytes(), SPIFFS.usedBytes());
|
Serial.printf("total bytes: %d , used: %d \n", SPIFFS.totalBytes(), SPIFFS.usedBytes());
|
||||||
|
@ -317,17 +328,27 @@ void setup() {
|
||||||
// read pin state with mcp.digitalRead(8)
|
// read pin state with mcp.digitalRead(8)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
illuminationSetup(); // configure PWM for the illumination/flash LED
|
// set up bright LED (flash)
|
||||||
|
ledcSetup(ledChannel, ledFreq, ledRresolution);
|
||||||
|
ledcAttachPin(brightLED, ledChannel);
|
||||||
|
brightLed(0); // change bright LED
|
||||||
|
|
||||||
// startup complete
|
// startup complete
|
||||||
if (serialDebug) Serial.println("\nSetup complete...");
|
if (serialDebug) Serial.println("\nSetup complete...");
|
||||||
illuminationBrightness(100); // turn flash on
|
brightLed(64); // change bright LED
|
||||||
delay(200);
|
delay(200);
|
||||||
illuminationBrightness(0); // turn flash off
|
brightLed(0); // change bright LED
|
||||||
|
|
||||||
} // setup
|
} // setup
|
||||||
|
|
||||||
|
|
||||||
|
// change bright LED illumination level
|
||||||
|
void brightLed(byte ledBrightness){
|
||||||
|
brightLEDbrightness = ledBrightness; // store setting
|
||||||
|
ledcWrite(ledChannel, ledBrightness); // change LED brightness (0 - 255)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// ******************************************************************************************************************
|
// ******************************************************************************************************************
|
||||||
|
|
||||||
|
|
||||||
|
@ -500,54 +521,11 @@ bool cameraImageSettings() {
|
||||||
// ******************************************************************************************************************
|
// ******************************************************************************************************************
|
||||||
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------
|
|
||||||
// Set up pwm for the illumination led
|
|
||||||
// ----------------------------------------------------------------
|
|
||||||
// configure PWM for brightness control of the illumination led
|
|
||||||
// Note: Using this more long winded pwm setup as timer0 is already used by the camera (and channel 0)
|
|
||||||
// more info: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/ledc.html
|
|
||||||
|
|
||||||
void illuminationSetup() {
|
|
||||||
|
|
||||||
// set up the timer
|
|
||||||
ledc_timer_config_t timer_conf;
|
|
||||||
timer_conf.duty_resolution = LEDC_TIMER_8_BIT; // 8 bits gives a brightness range of 0 to 255
|
|
||||||
timer_conf.freq_hz = 1000; // frequency of the pwm
|
|
||||||
timer_conf.speed_mode = LEDC_HIGH_SPEED_MODE;
|
|
||||||
timer_conf.timer_num = LEDC_TIMER_3; // which timer to use (0 to 3)
|
|
||||||
ledc_timer_config(&timer_conf);
|
|
||||||
|
|
||||||
// set up the channel
|
|
||||||
ledc_channel_config_t ledc_conf;
|
|
||||||
ledc_conf.channel = LEDC_CHANNEL_5; // led channel to use (0 to 15)
|
|
||||||
// ledc_conf.duty = 0; // 0=off, 255=fully on
|
|
||||||
ledc_conf.gpio_num = brightLED; // gpio pin
|
|
||||||
ledc_conf.intr_type = LEDC_INTR_DISABLE;
|
|
||||||
ledc_conf.speed_mode = LEDC_HIGH_SPEED_MODE;
|
|
||||||
ledc_conf.timer_sel = LEDC_TIMER_3; // timer to use (0 to 3)
|
|
||||||
ledc_channel_config(&ledc_conf);
|
|
||||||
|
|
||||||
illuminationBrightness(0); // set brightness to off
|
|
||||||
|
|
||||||
} // illuminationSetup
|
|
||||||
|
|
||||||
|
|
||||||
// ******************************************************************************************************************
|
|
||||||
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------
|
// ----------------------------------------------------------------
|
||||||
// Misc small procedures
|
// Misc small procedures
|
||||||
// ----------------------------------------------------------------
|
// ----------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
// Set the illumination LED brightness (PWM)
|
|
||||||
void illuminationBrightness(uint32_t duty) {
|
|
||||||
ledc_set_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_5, duty);
|
|
||||||
ledc_update_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL_5);
|
|
||||||
illuminationLEDstatus = duty; // store current brightness
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// returns the current real time as a String
|
// returns the current real time as a String
|
||||||
// see: https://randomnerdtutorials.com/esp32-date-time-ntp-client-server-arduino/
|
// see: https://randomnerdtutorials.com/esp32-date-time-ntp-client-server-arduino/
|
||||||
String localTime() {
|
String localTime() {
|
||||||
|
@ -592,10 +570,10 @@ byte storeImage() {
|
||||||
fs::FS &fs = SD_MMC; // sd card file system
|
fs::FS &fs = SD_MMC; // sd card file system
|
||||||
|
|
||||||
// capture the image from camera
|
// capture the image from camera
|
||||||
int currentBrightness = illuminationLEDstatus;
|
int currentBrightness = brightLEDbrightness;
|
||||||
if (flashRequired) illuminationBrightness(255); // turn flash on
|
if (flashRequired) brightLed(255); // change LED brightness (0 - 255)
|
||||||
camera_fb_t *fb = esp_camera_fb_get(); // capture image frame from camera
|
camera_fb_t *fb = esp_camera_fb_get(); // capture image frame from camera
|
||||||
if (flashRequired) illuminationBrightness(currentBrightness); // return flash to previous state
|
if (flashRequired) brightLed(currentBrightness); // change LED brightness back to previous state
|
||||||
if (!fb) {
|
if (!fb) {
|
||||||
if (serialDebug) Serial.println("Error: Camera capture failed");
|
if (serialDebug) Serial.println("Error: Camera capture failed");
|
||||||
flashLED(3); // stop and display error code on LED
|
flashLED(3); // stop and display error code on LED
|
||||||
|
@ -704,9 +682,10 @@ void handleRoot() {
|
||||||
|
|
||||||
// if button3 was pressed (toggle flash LED)
|
// if button3 was pressed (toggle flash LED)
|
||||||
if (server.hasArg("button3")) {
|
if (server.hasArg("button3")) {
|
||||||
if (illuminationLEDstatus == 0) illuminationBrightness(30); // turn led on dim
|
if (brightLEDbrightness == 0) brightLed(10); // turn led on dim
|
||||||
else if (illuminationLEDstatus == 30) illuminationBrightness(255); // turn led on full
|
else if (brightLEDbrightness == 10) brightLed(40); // turn led on medium
|
||||||
else illuminationBrightness(0); // turn led off
|
else if (brightLEDbrightness == 40) brightLed(255); // turn led on full
|
||||||
|
else brightLed(0); // turn led off
|
||||||
if (serialDebug) Serial.println("Button 3 pressed");
|
if (serialDebug) Serial.println("Button 3 pressed");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1088,7 +1067,7 @@ bool getNTPtime(int sec) {
|
||||||
time(&now);
|
time(&now);
|
||||||
localtime_r(&now, &timeinfo);
|
localtime_r(&now, &timeinfo);
|
||||||
Serial.print(".");
|
Serial.print(".");
|
||||||
delay(10);
|
delay(100);
|
||||||
} while (((millis() - start) <= (1000 * sec)) && (timeinfo.tm_year < (2016 - 1900)));
|
} while (((millis() - start) <= (1000 * sec)) && (timeinfo.tm_year < (2016 - 1900)));
|
||||||
if (timeinfo.tm_year <= (2016 - 1900)) return false; // the NTP call was not successful
|
if (timeinfo.tm_year <= (2016 - 1900)) return false; // the NTP call was not successful
|
||||||
Serial.print("now "); Serial.println(now);
|
Serial.print("now "); Serial.println(now);
|
||||||
|
|
Ładowanie…
Reference in New Issue