mirror of
https://github.com/easytarget/esp32-cam-webserver.git
synced 2024-02-16 18:18:24 +08:00
Framebuffer fix (#199)
* Slightly longer flash delay, #188 * Framebuffer delayed frames * Fix Travis, again * show XCLK in dump output * comment on slow XCLK for slow clones * pump up the wifi watchdog default * latest IDE and esp core
This commit is contained in:
12
.travis.yml
12
.travis.yml
@ -15,15 +15,15 @@ branches:
|
||||
before_script:
|
||||
- "export DISPLAY=:99.0"
|
||||
- sleep 3 # give xvfb some time to start
|
||||
- wget https://downloads.arduino.cc/arduino-1.8.18-linux64.tar.xz
|
||||
- tar xf arduino-1.8.18-linux64.tar.xz
|
||||
- mv arduino-1.8.18 $HOME/arduino_ide
|
||||
- wget https://downloads.arduino.cc/arduino-1.8.19-linux64.tar.xz
|
||||
- tar xf arduino-1.8.19-linux64.tar.xz
|
||||
- mv arduino-1.8.19 $HOME/arduino_ide
|
||||
- cd $HOME/arduino_ide/hardware
|
||||
- mkdir esp32
|
||||
- cd esp32
|
||||
- wget https://github.com/espressif/arduino-esp32/archive/refs/tags/2.0.1.tar.gz
|
||||
- tar -xzf 2.0.1.tar.gz
|
||||
- mv arduino-esp32-2.0.1/ esp32
|
||||
- wget https://github.com/espressif/arduino-esp32/archive/refs/tags/2.0.2.tar.gz
|
||||
- tar -xzf 2.0.2.tar.gz
|
||||
- mv arduino-esp32-2.0.2/ esp32
|
||||
- cd esp32/tools
|
||||
- python --version
|
||||
- python get.py
|
||||
|
@ -63,6 +63,7 @@ extern int sketchSpace;
|
||||
extern String sketchMD5;
|
||||
extern bool otaEnabled;
|
||||
extern char otaPassword[];
|
||||
extern unsigned long xclkFreqHz;
|
||||
|
||||
typedef struct {
|
||||
httpd_req_t *req;
|
||||
@ -140,9 +141,10 @@ void serialDump() {
|
||||
int upSec = sec % 60;
|
||||
int McuTc = (temprature_sens_read() - 32) / 1.8; // celsius
|
||||
int McuTf = temprature_sens_read(); // fahrenheit
|
||||
float xclk = xclkFreqHz/1000000;
|
||||
Serial.printf("System up: %" PRId64 ":%02i:%02i:%02i (d:h:m:s)\r\n", upDays, upHours, upMin, upSec);
|
||||
Serial.printf("Active streams: %i, Previous streams: %lu, Images captured: %lu\r\n", streamCount, streamsServed, imagesServed);
|
||||
Serial.printf("Freq: %i MHz\r\n", ESP.getCpuFreqMHz());
|
||||
Serial.printf("CPU Freq: %i MHz, Xclk Freq: %.1f MHz\r\n", ESP.getCpuFreqMHz(), xclk);
|
||||
Serial.printf("MCU temperature : %i C, %i F (approximate)\r\n", McuTc, McuTf);
|
||||
Serial.printf("Heap: %i, free: %i, min free: %i, max block: %i\r\n", ESP.getHeapSize(), ESP.getFreeHeap(), ESP.getMinFreeHeap(), ESP.getMaxAllocHeap());
|
||||
if(psramFound()) {
|
||||
@ -172,7 +174,10 @@ static esp_err_t capture_handler(httpd_req_t *req){
|
||||
esp_err_t res = ESP_OK;
|
||||
|
||||
Serial.println("Capture Requested");
|
||||
if (autoLamp && (lampVal != -1)) setLamp(lampVal);
|
||||
if (autoLamp && (lampVal != -1)) {
|
||||
setLamp(lampVal);
|
||||
delay(75); // coupled with the status led flash this gives ~150ms for lamp to settle.
|
||||
}
|
||||
flashLED(75); // little flash of status LED
|
||||
|
||||
int64_t fr_start = esp_timer_get_time();
|
||||
@ -198,12 +203,16 @@ static esp_err_t capture_handler(httpd_req_t *req){
|
||||
Serial.println("Capture Error: Non-JPEG image returned by camera module");
|
||||
}
|
||||
esp_camera_fb_return(fb);
|
||||
fb = NULL;
|
||||
|
||||
int64_t fr_end = esp_timer_get_time();
|
||||
if (debugData) {
|
||||
Serial.printf("JPG: %uB %ums\r\n", (uint32_t)(fb_len), (uint32_t)((fr_end - fr_start)/1000));
|
||||
}
|
||||
imagesServed++;
|
||||
if (autoLamp && (lampVal != -1)) setLamp(0);
|
||||
if (autoLamp && (lampVal != -1)) {
|
||||
setLamp(0);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
@ -557,10 +566,11 @@ static esp_err_t dump_handler(httpd_req_t *req){
|
||||
int upSec = sec % 60;
|
||||
int McuTc = (temprature_sens_read() - 32) / 1.8; // celsius
|
||||
int McuTf = temprature_sens_read(); // fahrenheit
|
||||
float xclk = xclkFreqHz/1000000;
|
||||
|
||||
d+= sprintf(d,"Up: %" PRId64 ":%02i:%02i:%02i (d:h:m:s)<br>\n", upDays, upHours, upMin, upSec);
|
||||
d+= sprintf(d,"Active streams: %i, Previous streams: %lu, Images captured: %lu<br>\n", streamCount, streamsServed, imagesServed);
|
||||
d+= sprintf(d,"Freq: %i MHz<br>\n", ESP.getCpuFreqMHz());
|
||||
d+= sprintf(d,"CPU Freq: %i MHz, Xclk Freq: %.1f MHz<br>\n", ESP.getCpuFreqMHz(), xclk);
|
||||
d+= sprintf(d,"<span title=\"NOTE: Internal temperature sensor readings can be innacurate on the ESP32-c1 chipset, and may vary significantly between devices!\">");
|
||||
d+= sprintf(d,"MCU temperature : %i °C, %i °F</span>\n<br>", McuTc, McuTf);
|
||||
d+= sprintf(d,"Heap: %i, free: %i, min free: %i, max block: %i<br>\n", ESP.getHeapSize(), ESP.getFreeHeap(), ESP.getMinFreeHeap(), ESP.getMaxAllocHeap());
|
||||
|
@ -95,7 +95,7 @@ extern void serialDump();
|
||||
#endif
|
||||
|
||||
#if !defined(WIFI_WATCHDOG)
|
||||
#define WIFI_WATCHDOG 8000
|
||||
#define WIFI_WATCHDOG 15000
|
||||
#endif
|
||||
|
||||
// Number of known networks in stationList[]
|
||||
@ -137,7 +137,9 @@ char myVer[] PROGMEM = __DATE__ " @ " __TIME__;
|
||||
// Originally: config.xclk_freq_hz = 20000000, but this lead to visual artifacts on many modules.
|
||||
// See https://github.com/espressif/esp32-camera/issues/150#issuecomment-726473652 et al.
|
||||
#if !defined (XCLK_FREQ_HZ)
|
||||
#define XCLK_FREQ_HZ 16500000;
|
||||
unsigned long xclkFreqHz = 16500000;
|
||||
#else
|
||||
unsigned long xclkFreqHz = XCLK_FREQ_HZ;
|
||||
#endif
|
||||
|
||||
// initial rotation
|
||||
@ -522,13 +524,14 @@ void setup() {
|
||||
config.pin_sscb_scl = SIOC_GPIO_NUM;
|
||||
config.pin_pwdn = PWDN_GPIO_NUM;
|
||||
config.pin_reset = RESET_GPIO_NUM;
|
||||
config.xclk_freq_hz = XCLK_FREQ_HZ;
|
||||
config.xclk_freq_hz = xclkFreqHz;
|
||||
config.pixel_format = PIXFORMAT_JPEG;
|
||||
config.grab_mode = CAMERA_GRAB_LATEST;
|
||||
// Pre-allocate large buffers
|
||||
if(psramFound()){
|
||||
config.frame_size = FRAMESIZE_UXGA;
|
||||
config.jpeg_quality = 10;
|
||||
config.fb_count = 6; // We can be generous since we are not using facedetect anymore, allows for bigger jpeg frame size (data)
|
||||
config.fb_count = 2;
|
||||
} else {
|
||||
config.frame_size = FRAMESIZE_SVGA;
|
||||
config.jpeg_quality = 12;
|
||||
@ -638,6 +641,7 @@ void setup() {
|
||||
// check for saved preferences and apply them
|
||||
|
||||
if (filesystem) {
|
||||
delay(200); // a short delay to let spi bus settle after camera init
|
||||
filesystemStart();
|
||||
loadPrefs(SPIFFS);
|
||||
} else {
|
||||
|
@ -99,9 +99,9 @@ struct station stationList[] = {{"ssid1", "pass1", true},
|
||||
/*
|
||||
* Wifi Watchdog defines how long we spend waiting for a connection before retrying,
|
||||
* and how often we check to see if we are still connected, milliseconds
|
||||
* You may wish to increase this if your WiFi is slow at conencting,
|
||||
* You may wish to increase this if your WiFi is slow at conencting.
|
||||
*/
|
||||
// #define WIFI_WATCHDOG 8000
|
||||
// #define WIFI_WATCHDOG 15000
|
||||
|
||||
/*
|
||||
* Over The Air firmware updates can be disabled by uncommenting the folowing line
|
||||
@ -187,3 +187,5 @@ struct station stationList[] = {{"ssid1", "pass1", true},
|
||||
// Currently defaults to 16.5MHz, but some (non-clone) modules may be able to use the
|
||||
// original frequency of 20MHz for to allow higher framerates etc.
|
||||
// #define XCLK_FREQ_HZ 20000000;
|
||||
// For clone modules that have camera module artifacts and SPIFFS issues; try setting this very low:
|
||||
// #define XCLK_FREQ_HZ 3000000;
|
||||
|
@ -12,7 +12,8 @@
|
||||
src_dir = ./
|
||||
|
||||
[env:esp32dev]
|
||||
platform = espressif32
|
||||
platform = https://github.com/platformio/platform-espressif32.git#feature/arduino-upstream
|
||||
platform_packages = framework-arduinoespressif32@https://github.com/espressif/arduino-esp32.git#2.0.2
|
||||
board = esp32dev
|
||||
board_build.partitions = min_spiffs.csv
|
||||
framework = arduino
|
||||
|
Reference in New Issue
Block a user