mirror of
https://github.com/jomjol/AI-on-the-edge-device.git
synced 2025-12-07 12:06:58 +03:00
@@ -29,7 +29,7 @@
|
|||||||
- [#1143](https://github.com/jomjol/AI-on-the-edge-device/issues/1143) changed postprocess for analog->digit (lowest digit processing)
|
- [#1143](https://github.com/jomjol/AI-on-the-edge-device/issues/1143) changed postprocess for analog->digit (lowest digit processing)
|
||||||
### Removed
|
### Removed
|
||||||
|
|
||||||
- [#1261](https://github.com/jomjol/AI-on-the-edge-device/issues/1261) removed unused parameter `ErrorMessage`
|
- n.a.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -89,6 +89,15 @@ Rgb& Rgb::blend( Rgb in ) {
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t IRAM_ATTR Rgb::getGrb( int idx ) {
|
||||||
|
switch ( idx ) {
|
||||||
|
case 0: return g;
|
||||||
|
case 1: return r;
|
||||||
|
case 2: return b;
|
||||||
|
}
|
||||||
|
__builtin_unreachable();
|
||||||
|
}
|
||||||
|
|
||||||
Hsv::Hsv( Rgb r ) {
|
Hsv::Hsv( Rgb r ) {
|
||||||
int min = std::min( r.r, std::min( r.g, r.b ) );
|
int min = std::min( r.r, std::min( r.g, r.b ) );
|
||||||
int max = std::max( r.r, std::max( r.g, r.b ) );
|
int max = std::max( r.r, std::max( r.g, r.b ) );
|
||||||
|
|||||||
@@ -19,21 +19,13 @@ union Rgb {
|
|||||||
bool operator==( Rgb in ) const { return in.value == value; }
|
bool operator==( Rgb in ) const { return in.value == value; }
|
||||||
Rgb& blend( Rgb in );
|
Rgb& blend( Rgb in );
|
||||||
void swap( Rgb& o ) { value = o.value; }
|
void swap( Rgb& o ) { value = o.value; }
|
||||||
constexpr Rgb(const Rgb& other) : r(other.r), g(other.g), b(other.b), a(other.a) { }
|
|
||||||
void linearize() {
|
void linearize() {
|
||||||
r = channelGamma(r);
|
r = channelGamma(r);
|
||||||
g = channelGamma(g);
|
g = channelGamma(g);
|
||||||
b = channelGamma(b);
|
b = channelGamma(b);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t IRAM_ATTR getGrb( int idx ) {
|
uint8_t IRAM_ATTR getGrb( int idx );
|
||||||
switch ( idx ) {
|
|
||||||
case 0: return g;
|
|
||||||
case 1: return r;
|
|
||||||
case 2: return b;
|
|
||||||
}
|
|
||||||
__builtin_unreachable();
|
|
||||||
}
|
|
||||||
|
|
||||||
void stretchChannels( uint8_t maxR, uint8_t maxG, uint8_t maxB ) {
|
void stretchChannels( uint8_t maxR, uint8_t maxG, uint8_t maxB ) {
|
||||||
r = stretch( r, maxR );
|
r = stretch( r, maxR );
|
||||||
@@ -62,7 +54,6 @@ private:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
union Hsv {
|
union Hsv {
|
||||||
struct __attribute__ ((packed)) {
|
struct __attribute__ ((packed)) {
|
||||||
uint8_t h, s, v, a;
|
uint8_t h, s, v, a;
|
||||||
@@ -75,5 +66,4 @@ union Hsv {
|
|||||||
Hsv& operator=( Rgb rgb );
|
Hsv& operator=( Rgb rgb );
|
||||||
bool operator==( Hsv in ) const { return in.value == value; }
|
bool operator==( Hsv in ) const { return in.value == value; }
|
||||||
void swap( Hsv& o ) { value = o.value; }
|
void swap( Hsv& o ) { value = o.value; }
|
||||||
constexpr Hsv(const Hsv& other) : h(other.h), s(other.s), v(other.v), a(other.a) { }
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -16,16 +16,16 @@ void IRAM_ATTR SmartLed::interruptHandler(void*) {
|
|||||||
if ( RMT.int_st.val & (1 << (24 + channel ) ) ) { // tx_thr_event
|
if ( RMT.int_st.val & (1 << (24 + channel ) ) ) { // tx_thr_event
|
||||||
if ( self )
|
if ( self )
|
||||||
self->copyRmtHalfBlock();
|
self->copyRmtHalfBlock();
|
||||||
RMT.int_clr.val = RMT.int_clr.val | 1 << ( 24 + channel );
|
RMT.int_clr.val |= 1 << ( 24 + channel );
|
||||||
} else if ( RMT.int_st.val & ( 1 << (3 * channel ) ) ) { // tx_end
|
} else if ( RMT.int_st.val & ( 1 << (3 * channel ) ) ) { // tx_end
|
||||||
if ( self )
|
if ( self )
|
||||||
xSemaphoreGiveFromISR( self->_finishedFlag, nullptr );
|
xSemaphoreGiveFromISR( self->_finishedFlag, nullptr );
|
||||||
RMT.int_clr.val = RMT.int_clr.val | 1 << ( 3 * channel );
|
RMT.int_clr.val |= 1 << ( 3 * channel );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SmartLed::copyRmtHalfBlock() {
|
void IRAM_ATTR SmartLed::copyRmtHalfBlock() {
|
||||||
int offset = detail::MAX_PULSES * _halfIdx;
|
int offset = detail::MAX_PULSES * _halfIdx;
|
||||||
_halfIdx = !_halfIdx;
|
_halfIdx = !_halfIdx;
|
||||||
int len = 3 - _componentPosition + 3 * ( _count - 1 );
|
int len = 3 - _componentPosition + 3 * ( _count - 1 );
|
||||||
|
|||||||
@@ -56,14 +56,10 @@
|
|||||||
#include <freertos/semphr.h>
|
#include <freertos/semphr.h>
|
||||||
#include <soc/dport_reg.h>
|
#include <soc/dport_reg.h>
|
||||||
#include <soc/gpio_sig_map.h>
|
#include <soc/gpio_sig_map.h>
|
||||||
#include <soc/gpio_periph.h>
|
|
||||||
#include <esp32/rom/gpio.h>
|
|
||||||
#include <soc/rmt_struct.h>
|
#include <soc/rmt_struct.h>
|
||||||
#include <driver/spi_master.h>
|
#include <driver/spi_master.h>
|
||||||
#include <driver/rmt.h>
|
|
||||||
}
|
}
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
extern rmt_mem_t RMTMEM;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "Color.h"
|
#include "Color.h"
|
||||||
@@ -135,7 +131,8 @@ public:
|
|||||||
initChannel( _channel );
|
initChannel( _channel );
|
||||||
|
|
||||||
RMT.tx_lim_ch[ _channel ].limit = detail::MAX_PULSES;
|
RMT.tx_lim_ch[ _channel ].limit = detail::MAX_PULSES;
|
||||||
RMT.int_ena.val = RMT.int_ena.val | (1 << ( 24 + _channel )) | (1 << ( 3 * _channel ));
|
RMT.int_ena.val |= 1 << ( 24 + _channel );
|
||||||
|
RMT.int_ena.val |= 1 << ( 3 * _channel );
|
||||||
|
|
||||||
_bitToRmt[ 0 ].level0 = 1;
|
_bitToRmt[ 0 ].level0 = 1;
|
||||||
_bitToRmt[ 0 ].level1 = 0;
|
_bitToRmt[ 0 ].level1 = 0;
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ void GpioPin::init()
|
|||||||
gpio_config(&io_conf);
|
gpio_config(&io_conf);
|
||||||
|
|
||||||
// if (_interruptType != GPIO_INTR_DISABLE) { // ohne GPIO_PIN_MODE_EXTERNAL_FLASH_WS281X, wenn das genutzt wird, dann soll auch der Handler hier nicht initialisiert werden, da das dann über SmartLED erfolgt.
|
// if (_interruptType != GPIO_INTR_DISABLE) { // ohne GPIO_PIN_MODE_EXTERNAL_FLASH_WS281X, wenn das genutzt wird, dann soll auch der Handler hier nicht initialisiert werden, da das dann über SmartLED erfolgt.
|
||||||
if ((_interruptType != GPIO_INTR_DISABLE) && (_mode != GPIO_PIN_MODE_EXTERNAL_FLASH_WS281X)) {
|
if ((_interruptType != GPIO_INTR_DISABLE) && (_interruptType != GPIO_PIN_MODE_EXTERNAL_FLASH_WS281X)) {
|
||||||
//hook isr handler for specific gpio pin
|
//hook isr handler for specific gpio pin
|
||||||
ESP_LOGD(TAG_SERVERGPIO, "GpioPin::init add isr handler for GPIO %d", _gpio);
|
ESP_LOGD(TAG_SERVERGPIO, "GpioPin::init add isr handler for GPIO %d", _gpio);
|
||||||
gpio_isr_handler_add(_gpio, gpio_isr_handler, (void*)&_gpio);
|
gpio_isr_handler_add(_gpio, gpio_isr_handler, (void*)&_gpio);
|
||||||
|
|||||||
@@ -5,8 +5,6 @@
|
|||||||
|
|
||||||
#include <esp_http_server.h>
|
#include <esp_http_server.h>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include "hal/gpio_ll.h"
|
|
||||||
#include "rom/gpio.h"
|
|
||||||
#include "driver/gpio.h"
|
#include "driver/gpio.h"
|
||||||
|
|
||||||
#include "SmartLeds.h"
|
#include "SmartLeds.h"
|
||||||
|
|||||||
@@ -4,6 +4,6 @@ list(APPEND EXTRA_COMPONENT_DIRS $ENV{IDF_PATH}/examples/common_components/proto
|
|||||||
|
|
||||||
idf_component_register(SRCS ${app_sources}
|
idf_component_register(SRCS ${app_sources}
|
||||||
INCLUDE_DIRS "."
|
INCLUDE_DIRS "."
|
||||||
REQUIRES esp32-camera esp_timer esp_http_server jomjol_logfile jomjol_image_proc nvs_flash jomjol_fileserver_ota jomjol_controlGPIO)
|
REQUIRES esp32-camera esp_http_server jomjol_logfile jomjol_image_proc nvs_flash jomjol_fileserver_ota jomjol_controlGPIO)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -70,7 +70,41 @@
|
|||||||
|
|
||||||
static const char *TAGCAMERACLASS = "server_part_camera";
|
static const char *TAGCAMERACLASS = "server_part_camera";
|
||||||
|
|
||||||
static camera_config_t camera_config;
|
static camera_config_t camera_config = {
|
||||||
|
.pin_pwdn = CAM_PIN_PWDN,
|
||||||
|
.pin_reset = CAM_PIN_RESET,
|
||||||
|
.pin_xclk = CAM_PIN_XCLK,
|
||||||
|
.pin_sscb_sda = CAM_PIN_SIOD,
|
||||||
|
.pin_sscb_scl = CAM_PIN_SIOC,
|
||||||
|
|
||||||
|
.pin_d7 = CAM_PIN_D7,
|
||||||
|
.pin_d6 = CAM_PIN_D6,
|
||||||
|
.pin_d5 = CAM_PIN_D5,
|
||||||
|
.pin_d4 = CAM_PIN_D4,
|
||||||
|
.pin_d3 = CAM_PIN_D3,
|
||||||
|
.pin_d2 = CAM_PIN_D2,
|
||||||
|
.pin_d1 = CAM_PIN_D1,
|
||||||
|
.pin_d0 = CAM_PIN_D0,
|
||||||
|
.pin_vsync = CAM_PIN_VSYNC,
|
||||||
|
.pin_href = CAM_PIN_HREF,
|
||||||
|
.pin_pclk = CAM_PIN_PCLK,
|
||||||
|
|
||||||
|
//XCLK 20MHz or 10MHz for OV2640 double FPS (Experimental)
|
||||||
|
.xclk_freq_hz = 20000000, // Orginalwert
|
||||||
|
// .xclk_freq_hz = 5000000, // Test, um die Bildfehler los zu werden !!!! Hängt in Version 9.2 !!!!
|
||||||
|
.ledc_timer = LEDC_TIMER_0,
|
||||||
|
.ledc_channel = LEDC_CHANNEL_0,
|
||||||
|
|
||||||
|
.pixel_format = PIXFORMAT_JPEG, //YUV422,GRAYSCALE,RGB565,JPEG
|
||||||
|
.frame_size = FRAMESIZE_VGA, //QQVGA-UXGA Do not use sizes above QVGA when not JPEG
|
||||||
|
// .frame_size = FRAMESIZE_UXGA, //QQVGA-UXGA Do not use sizes above QVGA when not JPEG
|
||||||
|
.jpeg_quality = 12, //0-63 lower number means higher quality
|
||||||
|
.fb_count = 1, //if more than one, i2s runs in continuous mode. Use only with JPEG
|
||||||
|
.fb_location = CAMERA_FB_IN_PSRAM, /*!< The location where the frame buffer will be allocated */
|
||||||
|
// .grab_mode = CAMERA_GRAB_WHEN_EMPTY,
|
||||||
|
.grab_mode = CAMERA_GRAB_LATEST, // erst ab neuer esp32cam-version
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
#include "driver/ledc.h"
|
#include "driver/ledc.h"
|
||||||
@@ -78,9 +112,6 @@ static camera_config_t camera_config;
|
|||||||
CCamera Camera;
|
CCamera Camera;
|
||||||
|
|
||||||
#define FLASH_GPIO GPIO_NUM_4
|
#define FLASH_GPIO GPIO_NUM_4
|
||||||
#ifdef BLINK_GPIO
|
|
||||||
#undef BLINK_GPIO
|
|
||||||
#endif
|
|
||||||
#define BLINK_GPIO GPIO_NUM_33
|
#define BLINK_GPIO GPIO_NUM_33
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -502,11 +533,7 @@ esp_err_t CCamera::CaptureToHTTP(httpd_req_t *req, int delay)
|
|||||||
esp_camera_fb_return(fb);
|
esp_camera_fb_return(fb);
|
||||||
int64_t fr_end = esp_timer_get_time();
|
int64_t fr_end = esp_timer_get_time();
|
||||||
|
|
||||||
#if (ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0))
|
|
||||||
ESP_LOGI(TAGCAMERACLASS, "JPG: %luKB %lums", (uint32_t)(fb_len/1024), (uint32_t)((fr_end - fr_start)/1000));
|
|
||||||
#else
|
|
||||||
ESP_LOGI(TAGCAMERACLASS, "JPG: %uKB %ums", (uint32_t)(fb_len/1024), (uint32_t)((fr_end - fr_start)/1000));
|
ESP_LOGI(TAGCAMERACLASS, "JPG: %uKB %ums", (uint32_t)(fb_len/1024), (uint32_t)((fr_end - fr_start)/1000));
|
||||||
#endif
|
|
||||||
|
|
||||||
if (delay > 0)
|
if (delay > 0)
|
||||||
{
|
{
|
||||||
@@ -645,40 +672,6 @@ CCamera::CCamera()
|
|||||||
esp_err_t CCamera::InitCam()
|
esp_err_t CCamera::InitCam()
|
||||||
{
|
{
|
||||||
ESP_LOGD(TAGCAMERACLASS, "Init Camera");
|
ESP_LOGD(TAGCAMERACLASS, "Init Camera");
|
||||||
|
|
||||||
camera_config.pin_pwdn = CAM_PIN_PWDN;
|
|
||||||
camera_config.pin_reset = CAM_PIN_RESET;
|
|
||||||
camera_config.pin_xclk = CAM_PIN_XCLK;
|
|
||||||
camera_config.pin_sccb_sda = CAM_PIN_SIOD;
|
|
||||||
camera_config.pin_sccb_scl = CAM_PIN_SIOC;
|
|
||||||
|
|
||||||
camera_config.pin_d7 = CAM_PIN_D7;
|
|
||||||
camera_config.pin_d6 = CAM_PIN_D6;
|
|
||||||
camera_config.pin_d5 = CAM_PIN_D5;
|
|
||||||
camera_config.pin_d4 = CAM_PIN_D4;
|
|
||||||
camera_config.pin_d3 = CAM_PIN_D3;
|
|
||||||
camera_config.pin_d2 = CAM_PIN_D2;
|
|
||||||
camera_config.pin_d1 = CAM_PIN_D1;
|
|
||||||
camera_config.pin_d0 = CAM_PIN_D0;
|
|
||||||
camera_config.pin_vsync = CAM_PIN_VSYNC;
|
|
||||||
camera_config.pin_href = CAM_PIN_HREF;
|
|
||||||
camera_config.pin_pclk = CAM_PIN_PCLK;
|
|
||||||
|
|
||||||
//XCLK 20MHz or 10MHz for OV2640 double FPS (Experimental)
|
|
||||||
camera_config.xclk_freq_hz = 20000000; // Orginalwert
|
|
||||||
// camera_config.xclk_freq_hz = 5000000; // Test, um die Bildfehler los zu werden !!!! Hängt in Version 9.2 !!!!
|
|
||||||
camera_config.ledc_timer = LEDC_TIMER_0;
|
|
||||||
camera_config.ledc_channel = LEDC_CHANNEL_0;
|
|
||||||
|
|
||||||
camera_config.pixel_format = PIXFORMAT_JPEG; //YUV422,GRAYSCALE,RGB565,JPEG
|
|
||||||
camera_config.frame_size = FRAMESIZE_VGA; //QQVGA-UXGA Do not use sizes above QVGA when not JPEG
|
|
||||||
// camera_config.frame_size = FRAMESIZE_UXGA; //QQVGA-UXGA Do not use sizes above QVGA when not JPEG
|
|
||||||
camera_config.jpeg_quality = 12; //0-63 lower number means higher quality
|
|
||||||
camera_config.fb_count = 1; //if more than one, i2s runs in continuous mode. Use only with JPEG
|
|
||||||
camera_config.fb_location = CAMERA_FB_IN_PSRAM; /*!< The location where the frame buffer will be allocated */
|
|
||||||
// camera_config.grab_mode = CAMERA_GRAB_WHEN_EMPTY;
|
|
||||||
camera_config.grab_mode = CAMERA_GRAB_LATEST; // erst ab neuer esp32cam-version
|
|
||||||
|
|
||||||
ActualQuality = camera_config.jpeg_quality;
|
ActualQuality = camera_config.jpeg_quality;
|
||||||
ActualResolution = camera_config.frame_size;
|
ActualResolution = camera_config.frame_size;
|
||||||
//initialize the camera
|
//initialize the camera
|
||||||
|
|||||||
@@ -2,6 +2,6 @@ FILE(GLOB_RECURSE app_sources ${CMAKE_CURRENT_SOURCE_DIR}/*.*)
|
|||||||
|
|
||||||
idf_component_register(SRCS ${app_sources}
|
idf_component_register(SRCS ${app_sources}
|
||||||
INCLUDE_DIRS "." "../../include"
|
INCLUDE_DIRS "." "../../include"
|
||||||
REQUIRES tflite-lib esp_http_server bootloader_support app_update esp_http_client vfs nvs_flash jomjol_tfliteclass jomjol_flowcontroll spiffs jomjol_helper jomjol_controlGPIO)
|
REQUIRES tflite-lib esp_http_server app_update esp_http_client nvs_flash jomjol_tfliteclass jomjol_flowcontroll spiffs jomjol_helper jomjol_controlGPIO)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3076,9 +3076,7 @@ static FILE *mz_freopen(const char *pPath, const char *pMode, FILE *pStream)
|
|||||||
#define MZ_DELETE_FILE remove
|
#define MZ_DELETE_FILE remove
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#if 0
|
|
||||||
#pragma message("Using fopen, ftello, fseeko, stat() etc. path for file I/O - this path may not support large files.")
|
#pragma message("Using fopen, ftello, fseeko, stat() etc. path for file I/O - this path may not support large files.")
|
||||||
#endif
|
|
||||||
#ifndef MINIZ_NO_TIME
|
#ifndef MINIZ_NO_TIME
|
||||||
#include <utime.h>
|
#include <utime.h>
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include "string.h"
|
#include "string.h"
|
||||||
|
|
||||||
|
#include <esp_int_wdt.h>
|
||||||
#include <esp_task_wdt.h>
|
#include <esp_task_wdt.h>
|
||||||
|
|
||||||
|
|
||||||
@@ -16,9 +17,7 @@
|
|||||||
#include <esp_ota_ops.h>
|
#include <esp_ota_ops.h>
|
||||||
#include "esp_http_client.h"
|
#include "esp_http_client.h"
|
||||||
#include "esp_flash_partitions.h"
|
#include "esp_flash_partitions.h"
|
||||||
#include "esp_vfs.h"
|
|
||||||
#include "esp_partition.h"
|
#include "esp_partition.h"
|
||||||
#include "esp_app_format.h"
|
|
||||||
#include <nvs.h>
|
#include <nvs.h>
|
||||||
#include "nvs_flash.h"
|
#include "nvs_flash.h"
|
||||||
#include "driver/gpio.h"
|
#include "driver/gpio.h"
|
||||||
@@ -79,28 +78,16 @@ static bool ota_update_task(std::string fn)
|
|||||||
const esp_partition_t *running = esp_ota_get_running_partition();
|
const esp_partition_t *running = esp_ota_get_running_partition();
|
||||||
|
|
||||||
if (configured != running) {
|
if (configured != running) {
|
||||||
#if (ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0))
|
|
||||||
ESP_LOGW(TAGPARTOTA, "Configured OTA boot partition at offset 0x%08lx, but running from offset 0x%08lx",
|
|
||||||
#else
|
|
||||||
ESP_LOGW(TAGPARTOTA, "Configured OTA boot partition at offset 0x%08x, but running from offset 0x%08x",
|
ESP_LOGW(TAGPARTOTA, "Configured OTA boot partition at offset 0x%08x, but running from offset 0x%08x",
|
||||||
#endif
|
|
||||||
configured->address, running->address);
|
configured->address, running->address);
|
||||||
ESP_LOGW(TAGPARTOTA, "(This can happen if either the OTA boot data or preferred boot image become somehow corrupted.)");
|
ESP_LOGW(TAGPARTOTA, "(This can happen if either the OTA boot data or preferred boot image become somehow corrupted.)");
|
||||||
}
|
}
|
||||||
#if (ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0))
|
|
||||||
ESP_LOGI(TAGPARTOTA, "Running partition type %d subtype %d (offset 0x%08lx)",
|
|
||||||
#else
|
|
||||||
ESP_LOGI(TAGPARTOTA, "Running partition type %d subtype %d (offset 0x%08x)",
|
ESP_LOGI(TAGPARTOTA, "Running partition type %d subtype %d (offset 0x%08x)",
|
||||||
#endif
|
|
||||||
running->type, running->subtype, running->address);
|
running->type, running->subtype, running->address);
|
||||||
|
|
||||||
|
|
||||||
update_partition = esp_ota_get_next_update_partition(NULL);
|
update_partition = esp_ota_get_next_update_partition(NULL);
|
||||||
#if (ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0))
|
|
||||||
ESP_LOGI(TAGPARTOTA, "Writing to partition subtype %d at offset 0x%lx",
|
|
||||||
#else
|
|
||||||
ESP_LOGI(TAGPARTOTA, "Writing to partition subtype %d at offset 0x%x",
|
ESP_LOGI(TAGPARTOTA, "Writing to partition subtype %d at offset 0x%x",
|
||||||
#endif
|
|
||||||
update_partition->subtype, update_partition->address);
|
update_partition->subtype, update_partition->address);
|
||||||
// assert(update_partition != NULL);
|
// assert(update_partition != NULL);
|
||||||
|
|
||||||
@@ -487,17 +474,7 @@ esp_err_t handler_ota_update(httpd_req_t *req)
|
|||||||
};
|
};
|
||||||
|
|
||||||
void hard_restart() {
|
void hard_restart() {
|
||||||
|
|
||||||
#if (ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0))
|
|
||||||
esp_task_wdt_config_t wd_config;
|
|
||||||
wd_config.timeout_ms = 1000;
|
|
||||||
wd_config.idle_core_mask = (1 << portNUM_PROCESSORS) - 1; // Bitmask of all cores
|
|
||||||
wd_config.trigger_panic = true;
|
|
||||||
|
|
||||||
esp_task_wdt_init(&wd_config);
|
|
||||||
#else
|
|
||||||
esp_task_wdt_init(1,true);
|
esp_task_wdt_init(1,true);
|
||||||
#endif
|
|
||||||
esp_task_wdt_add(NULL);
|
esp_task_wdt_add(NULL);
|
||||||
while(true);
|
while(true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
#define __HIDE_PASSWORD
|
#define __HIDE_PASSWORD
|
||||||
|
|
||||||
//static const char *TAG = "class_flow_MQTT";
|
static const char *TAG = "class_flow_MQTT";
|
||||||
|
|
||||||
#define LWT_TOPIC "connection"
|
#define LWT_TOPIC "connection"
|
||||||
#define LWT_CONNECTED "connected"
|
#define LWT_CONNECTED "connected"
|
||||||
@@ -143,11 +143,7 @@ void publishRuntimeData(std::string maintopic, int SetRetainFlag) {
|
|||||||
sprintf(tmp_char, "%ld", (long)getUpTime());
|
sprintf(tmp_char, "%ld", (long)getUpTime());
|
||||||
MQTTPublish(maintopic + "/" + "uptime", std::string(tmp_char), SetRetainFlag);
|
MQTTPublish(maintopic + "/" + "uptime", std::string(tmp_char), SetRetainFlag);
|
||||||
|
|
||||||
#if (ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0))
|
|
||||||
sprintf(tmp_char, "%lu", esp_get_free_heap_size());
|
|
||||||
#else
|
|
||||||
sprintf(tmp_char, "%zu", esp_get_free_heap_size());
|
sprintf(tmp_char, "%zu", esp_get_free_heap_size());
|
||||||
#endif
|
|
||||||
MQTTPublish(maintopic + "/" + "freeMem", std::string(tmp_char), SetRetainFlag);
|
MQTTPublish(maintopic + "/" + "freeMem", std::string(tmp_char), SetRetainFlag);
|
||||||
|
|
||||||
sprintf(tmp_char, "%d", get_WIFI_RSSI());
|
sprintf(tmp_char, "%d", get_WIFI_RSSI());
|
||||||
|
|||||||
@@ -4,9 +4,7 @@
|
|||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#ifndef BLINK_GPIO
|
|
||||||
#define BLINK_GPIO GPIO_NUM_4
|
#define BLINK_GPIO GPIO_NUM_4
|
||||||
#endif
|
|
||||||
|
|
||||||
#define CAMERA_MODEL_AI_THINKER
|
#define CAMERA_MODEL_AI_THINKER
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ extern "C" {
|
|||||||
#include "ClassLogFile.h"
|
#include "ClassLogFile.h"
|
||||||
|
|
||||||
#include "esp_vfs_fat.h"
|
#include "esp_vfs_fat.h"
|
||||||
#include "esp_mac.h"
|
|
||||||
|
|
||||||
static const char* TAG = "helper";
|
static const char* TAG = "helper";
|
||||||
|
|
||||||
@@ -117,11 +116,7 @@ string getSDCardPartitionAllocationSize(){
|
|||||||
f_getfree("0:", (DWORD *)&fre_clust, &fs);
|
f_getfree("0:", (DWORD *)&fre_clust, &fs);
|
||||||
allocation_size = fs->ssize;
|
allocation_size = fs->ssize;
|
||||||
|
|
||||||
#if (ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0))
|
printf("SD Card Partition Allocation Size (bytes): %d)\n", allocation_size);
|
||||||
printf("SD Card Partition Allocation Size (bytes): %lu)\n", allocation_size);
|
|
||||||
#else
|
|
||||||
printf("SD Card Partition Allocation Size (bytes): %zu)\n", allocation_size);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return std::to_string(allocation_size);
|
return std::to_string(allocation_size);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,24 +41,19 @@ static esp_err_t http_event_handler(esp_http_client_event_t *evt)
|
|||||||
case HTTP_EVENT_DISCONNECTED:
|
case HTTP_EVENT_DISCONNECTED:
|
||||||
ESP_LOGI(TAG_INTERFACEINFLUXDB, "HTTP Client Disconnected");
|
ESP_LOGI(TAG_INTERFACEINFLUXDB, "HTTP Client Disconnected");
|
||||||
break;
|
break;
|
||||||
#if (ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0))
|
|
||||||
case HTTP_EVENT_REDIRECT:
|
|
||||||
ESP_LOGI(TAG_INTERFACEINFLUXDB, "HTTP Client Redirect");
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InfluxDBPublish(std::string _key, std::string _content, std::string _timestamp) {
|
void InfluxDBPublish(std::string _key, std::string _content, std::string _timestamp) {
|
||||||
char response_buffer[MAX_HTTP_OUTPUT_BUFFER] = {0};
|
char response_buffer[MAX_HTTP_OUTPUT_BUFFER] = {0};
|
||||||
esp_http_client_config_t http_config;
|
esp_http_client_config_t http_config = {
|
||||||
|
.user_agent = "ESP32 Meter reader",
|
||||||
http_config.user_agent = "ESP32 Meter reader";
|
.method = HTTP_METHOD_POST,
|
||||||
http_config.method = HTTP_METHOD_POST;
|
.event_handler = http_event_handler,
|
||||||
http_config.event_handler = http_event_handler;
|
.buffer_size = MAX_HTTP_OUTPUT_BUFFER,
|
||||||
http_config.buffer_size = MAX_HTTP_OUTPUT_BUFFER;
|
.user_data = response_buffer
|
||||||
http_config.user_data = response_buffer;
|
};
|
||||||
|
|
||||||
if (_influxDBUser.length() && _influxDBPassword.length()){
|
if (_influxDBUser.length() && _influxDBPassword.length()){
|
||||||
http_config.username = _influxDBUser.c_str();
|
http_config.username = _influxDBUser.c_str();
|
||||||
|
|||||||
@@ -116,11 +116,7 @@ static esp_err_t mqtt_event_handler_cb(esp_mqtt_event_handle_t event)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data) {
|
static void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data) {
|
||||||
#if (ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0))
|
|
||||||
ESP_LOGD(TAG_INTERFACEMQTT, "Event dispatched from event loop base=%s, event_id=%ld", base, event_id);
|
|
||||||
#else
|
|
||||||
ESP_LOGD(TAG_INTERFACEMQTT, "Event dispatched from event loop base=%s, event_id=%d", base, event_id);
|
ESP_LOGD(TAG_INTERFACEMQTT, "Event dispatched from event loop base=%s, event_id=%d", base, event_id);
|
||||||
#endif
|
|
||||||
mqtt_event_handler_cb((esp_mqtt_event_handle_t) event_data);
|
mqtt_event_handler_cb((esp_mqtt_event_handle_t) event_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -153,7 +149,6 @@ void MQTT_Configure(std::string _mqttURI, std::string _clientid, std::string _us
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool MQTT_Init() {
|
bool MQTT_Init() {
|
||||||
esp_mqtt_client_config_t mqtt_cfg;
|
|
||||||
esp_err_t ret;
|
esp_err_t ret;
|
||||||
LogFile.WriteToFile(ESP_LOG_INFO, "MQTT - Init");
|
LogFile.WriteToFile(ESP_LOG_INFO, "MQTT - Init");
|
||||||
|
|
||||||
@@ -161,33 +156,19 @@ bool MQTT_Init() {
|
|||||||
|
|
||||||
std::string lw = lwt_disconnected;
|
std::string lw = lwt_disconnected;
|
||||||
|
|
||||||
#if (ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0))
|
esp_mqtt_client_config_t mqtt_cfg = {
|
||||||
mqtt_cfg.broker.address.uri = uri.c_str();
|
.uri = uri.c_str(),
|
||||||
mqtt_cfg.credentials.client_id = client_id.c_str();
|
.client_id = client_id.c_str(),
|
||||||
mqtt_cfg.session.last_will.topic = lwt_topic.c_str();
|
.lwt_topic = lwt_topic.c_str(),
|
||||||
mqtt_cfg.session.last_will.msg = lw.c_str();
|
.lwt_msg = lw.c_str(),
|
||||||
mqtt_cfg.session.last_will.msg_len = (int)(lw.length());
|
.lwt_retain = 1,
|
||||||
mqtt_cfg.session.last_will.retain = 1;
|
.lwt_msg_len = (int)(lw.length()),
|
||||||
mqtt_cfg.session.keepalive = keepalive;
|
.keepalive = keepalive
|
||||||
#else
|
};
|
||||||
mqtt_cfg.uri = uri.c_str();
|
|
||||||
mqtt_cfg.client_id = client_id.c_str();
|
|
||||||
mqtt_cfg.lwt_topic = lwt_topic.c_str();
|
|
||||||
mqtt_cfg.lwt_msg = lw.c_str();
|
|
||||||
mqtt_cfg.lwt_retain = 1;
|
|
||||||
mqtt_cfg.lwt_msg_len = (int)(lw.length());
|
|
||||||
mqtt_cfg.keepalive = keepalive;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (user.length() && password.length()){
|
if (user.length() && password.length()){
|
||||||
#if (ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0))
|
|
||||||
mqtt_cfg.credentials.username = user.c_str();
|
|
||||||
mqtt_cfg.credentials.authentication.password = password.c_str();
|
|
||||||
mqtt_cfg.credentials.authentication.key_password_len = password.length();
|
|
||||||
#else
|
|
||||||
mqtt_cfg.username = user.c_str();
|
mqtt_cfg.username = user.c_str();
|
||||||
mqtt_cfg.password = password.c_str();
|
mqtt_cfg.password = password.c_str();
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
client = esp_mqtt_client_init(&mqtt_cfg);
|
client = esp_mqtt_client_init(&mqtt_cfg);
|
||||||
|
|||||||
@@ -12,7 +12,6 @@
|
|||||||
#include "Helper.h"
|
#include "Helper.h"
|
||||||
|
|
||||||
#include "esp_camera.h"
|
#include "esp_camera.h"
|
||||||
#include "esp_timer.h"
|
|
||||||
#include "time_sntp.h"
|
#include "time_sntp.h"
|
||||||
#include "ClassControllCamera.h"
|
#include "ClassControllCamera.h"
|
||||||
|
|
||||||
@@ -812,17 +811,11 @@ void register_server_tflite_uri(httpd_handle_t server)
|
|||||||
camuri.user_ctx = (void*) "Light On";
|
camuri.user_ctx = (void*) "Light On";
|
||||||
httpd_register_uri_handler(server, &camuri);
|
httpd_register_uri_handler(server, &camuri);
|
||||||
|
|
||||||
// Legacy API => New: "/setPreValue"
|
|
||||||
camuri.uri = "/setPreValue.html";
|
camuri.uri = "/setPreValue.html";
|
||||||
camuri.handler = handler_prevalue;
|
camuri.handler = handler_prevalue;
|
||||||
camuri.user_ctx = (void*) "Prevalue";
|
camuri.user_ctx = (void*) "Prevalue";
|
||||||
httpd_register_uri_handler(server, &camuri);
|
httpd_register_uri_handler(server, &camuri);
|
||||||
|
|
||||||
camuri.uri = "/setPreValue";
|
|
||||||
camuri.handler = handler_prevalue;
|
|
||||||
camuri.user_ctx = (void*) "Prevalue";
|
|
||||||
httpd_register_uri_handler(server, &camuri);
|
|
||||||
|
|
||||||
camuri.uri = "/doflow";
|
camuri.uri = "/doflow";
|
||||||
camuri.handler = handler_doflow;
|
camuri.handler = handler_doflow;
|
||||||
camuri.user_ctx = (void*) "Light Off";
|
camuri.user_ctx = (void*) "Light Off";
|
||||||
@@ -833,50 +826,26 @@ void register_server_tflite_uri(httpd_handle_t server)
|
|||||||
camuri.user_ctx = (void*) "Light Off";
|
camuri.user_ctx = (void*) "Light Off";
|
||||||
httpd_register_uri_handler(server, &camuri);
|
httpd_register_uri_handler(server, &camuri);
|
||||||
|
|
||||||
camuri.uri = "/statusflow";
|
|
||||||
camuri.handler = handler_statusflow;
|
|
||||||
camuri.user_ctx = (void*) "Light Off";
|
|
||||||
httpd_register_uri_handler(server, &camuri);
|
|
||||||
|
|
||||||
// Legacy API => New: "/cpu_temperature"
|
|
||||||
camuri.uri = "/cputemp.html";
|
camuri.uri = "/cputemp.html";
|
||||||
camuri.handler = handler_cputemp;
|
camuri.handler = handler_cputemp;
|
||||||
camuri.user_ctx = (void*) "Light Off";
|
camuri.user_ctx = (void*) "Light Off";
|
||||||
httpd_register_uri_handler(server, &camuri);
|
httpd_register_uri_handler(server, &camuri);
|
||||||
|
|
||||||
camuri.uri = "/cpu_temperature";
|
|
||||||
camuri.handler = handler_cputemp;
|
|
||||||
camuri.user_ctx = (void*) "Light Off";
|
|
||||||
httpd_register_uri_handler(server, &camuri);
|
|
||||||
|
|
||||||
// Legacy API => New: "/rssi"
|
|
||||||
camuri.uri = "/rssi.html";
|
camuri.uri = "/rssi.html";
|
||||||
camuri.handler = handler_rssi;
|
camuri.handler = handler_rssi;
|
||||||
camuri.user_ctx = (void*) "Light Off";
|
camuri.user_ctx = (void*) "Light Off";
|
||||||
httpd_register_uri_handler(server, &camuri);
|
httpd_register_uri_handler(server, &camuri);
|
||||||
|
|
||||||
camuri.uri = "/rssi";
|
|
||||||
camuri.handler = handler_rssi;
|
|
||||||
camuri.user_ctx = (void*) "Light Off";
|
|
||||||
httpd_register_uri_handler(server, &camuri);
|
|
||||||
|
|
||||||
camuri.uri = "/editflow.html";
|
camuri.uri = "/editflow.html";
|
||||||
camuri.handler = handler_editflow;
|
camuri.handler = handler_editflow;
|
||||||
camuri.user_ctx = (void*) "EditFlow";
|
camuri.user_ctx = (void*) "EditFlow";
|
||||||
httpd_register_uri_handler(server, &camuri);
|
httpd_register_uri_handler(server, &camuri);
|
||||||
|
|
||||||
// Legacy API => New: "/value"
|
|
||||||
camuri.uri = "/value.html";
|
camuri.uri = "/value.html";
|
||||||
camuri.handler = handler_wasserzaehler;
|
camuri.handler = handler_wasserzaehler;
|
||||||
camuri.user_ctx = (void*) "Value";
|
camuri.user_ctx = (void*) "Value";
|
||||||
httpd_register_uri_handler(server, &camuri);
|
httpd_register_uri_handler(server, &camuri);
|
||||||
|
|
||||||
camuri.uri = "/value";
|
|
||||||
camuri.handler = handler_wasserzaehler;
|
|
||||||
camuri.user_ctx = (void*) "Value";
|
|
||||||
httpd_register_uri_handler(server, &camuri);
|
|
||||||
|
|
||||||
// Legacy API => New: "/value"
|
|
||||||
camuri.uri = "/wasserzaehler.html";
|
camuri.uri = "/wasserzaehler.html";
|
||||||
camuri.handler = handler_wasserzaehler;
|
camuri.handler = handler_wasserzaehler;
|
||||||
camuri.user_ctx = (void*) "Wasserzaehler";
|
camuri.user_ctx = (void*) "Wasserzaehler";
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
#include "freertos/task.h"
|
#include "freertos/task.h"
|
||||||
#include "freertos/event_groups.h"
|
#include "freertos/event_groups.h"
|
||||||
#include "esp_system.h"
|
#include "esp_system.h"
|
||||||
|
#include "esp_event.h"
|
||||||
#include "esp_log.h"
|
#include "esp_log.h"
|
||||||
#include "esp_attr.h"
|
#include "esp_attr.h"
|
||||||
#include "esp_sleep.h"
|
#include "esp_sleep.h"
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
#include "freertos/task.h"
|
#include "freertos/task.h"
|
||||||
#include "freertos/event_groups.h"
|
#include "freertos/event_groups.h"
|
||||||
#include "esp_system.h"
|
#include "esp_system.h"
|
||||||
|
#include "esp_event.h"
|
||||||
#include "esp_log.h"
|
#include "esp_log.h"
|
||||||
#include "esp_attr.h"
|
#include "esp_attr.h"
|
||||||
#include "esp_sleep.h"
|
#include "esp_sleep.h"
|
||||||
|
|||||||
@@ -2,6 +2,6 @@ FILE(GLOB_RECURSE app_sources ${CMAKE_CURRENT_SOURCE_DIR}/*.*)
|
|||||||
|
|
||||||
idf_component_register(SRCS ${app_sources}
|
idf_component_register(SRCS ${app_sources}
|
||||||
INCLUDE_DIRS "."
|
INCLUDE_DIRS "."
|
||||||
REQUIRES esp_wifi nvs_flash jomjol_helper)
|
REQUIRES nvs_flash jomjol_helper)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -13,8 +13,6 @@
|
|||||||
|
|
||||||
#include "lwip/err.h"
|
#include "lwip/err.h"
|
||||||
#include "lwip/sys.h"
|
#include "lwip/sys.h"
|
||||||
#include "lwip/ip_addr.h"
|
|
||||||
#include "lwip/inet.h"
|
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <string>
|
#include <string>
|
||||||
@@ -38,14 +36,10 @@ static EventGroupHandle_t s_wifi_event_group;
|
|||||||
#define WIFI_FAIL_BIT BIT1
|
#define WIFI_FAIL_BIT BIT1
|
||||||
|
|
||||||
static const char *TAG = "wifi station";
|
static const char *TAG = "wifi station";
|
||||||
static esp_netif_t *my_sta;
|
|
||||||
|
|
||||||
static int s_retry_num = 0;
|
static int s_retry_num = 0;
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
#ifdef BLINK_GPIO
|
|
||||||
#undef BLINK_GPIO
|
|
||||||
#endif
|
|
||||||
#define BLINK_GPIO GPIO_NUM_33
|
#define BLINK_GPIO GPIO_NUM_33
|
||||||
|
|
||||||
int BlinkDauer;
|
int BlinkDauer;
|
||||||
@@ -81,11 +75,7 @@ void task_doBlink(void *pvParameter)
|
|||||||
BlinkIsRunning = true;
|
BlinkIsRunning = true;
|
||||||
|
|
||||||
// Init the GPIO
|
// Init the GPIO
|
||||||
#if (ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0))
|
|
||||||
esp_rom_gpio_pad_select_gpio(BLINK_GPIO);
|
|
||||||
#else
|
|
||||||
gpio_pad_select_gpio(BLINK_GPIO);
|
gpio_pad_select_gpio(BLINK_GPIO);
|
||||||
#endif
|
|
||||||
/* Set the GPIO as a push/pull output */
|
/* Set the GPIO as a push/pull output */
|
||||||
gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);
|
gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);
|
||||||
|
|
||||||
@@ -137,9 +127,7 @@ static void event_handler(void* arg, esp_event_base_t event_base,
|
|||||||
} else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) {
|
} else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) {
|
||||||
ip_event_got_ip_t* event = (ip_event_got_ip_t*) event_data;
|
ip_event_got_ip_t* event = (ip_event_got_ip_t*) event_data;
|
||||||
ESP_LOGI(TAG, "got ip:" IPSTR, IP2STR(&event->ip_info.ip));
|
ESP_LOGI(TAG, "got ip:" IPSTR, IP2STR(&event->ip_info.ip));
|
||||||
char ip_addr[16];
|
ipadress = std::string(ip4addr_ntoa((const ip4_addr*) &event->ip_info.ip));
|
||||||
inet_ntoa_r(event->ip_info.ip.addr, ip_addr, 16);
|
|
||||||
ipadress = std::string(ip_addr);
|
|
||||||
s_retry_num = 0;
|
s_retry_num = 0;
|
||||||
xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT);
|
xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT);
|
||||||
LEDBlinkTask(1000, 5, true);
|
LEDBlinkTask(1000, 5, true);
|
||||||
@@ -161,7 +149,7 @@ void wifi_init_sta(const char *_ssid, const char *_password, const char *_hostna
|
|||||||
ESP_ERROR_CHECK(esp_netif_init());
|
ESP_ERROR_CHECK(esp_netif_init());
|
||||||
|
|
||||||
ESP_ERROR_CHECK(esp_event_loop_create_default());
|
ESP_ERROR_CHECK(esp_event_loop_create_default());
|
||||||
my_sta = esp_netif_create_default_wifi_sta();
|
esp_netif_t *my_sta = esp_netif_create_default_wifi_sta();
|
||||||
|
|
||||||
if ((_ipadr != NULL) && (_gw != NULL) && (_netmask != NULL))
|
if ((_ipadr != NULL) && (_gw != NULL) && (_netmask != NULL))
|
||||||
{
|
{
|
||||||
@@ -237,7 +225,7 @@ void wifi_init_sta(const char *_ssid, const char *_password, const char *_hostna
|
|||||||
|
|
||||||
if (_hostname != NULL)
|
if (_hostname != NULL)
|
||||||
{
|
{
|
||||||
esp_err_t ret = esp_netif_set_hostname(my_sta, _hostname);
|
esp_err_t ret = tcpip_adapter_set_hostname(TCPIP_ADAPTER_IF_STA , _hostname);
|
||||||
hostname = std::string(_hostname);
|
hostname = std::string(_hostname);
|
||||||
if(ret != ESP_OK ){
|
if(ret != ESP_OK ){
|
||||||
ESP_LOGE(TAG,"failed to set hostname:%d",ret);
|
ESP_LOGE(TAG,"failed to set hostname:%d",ret);
|
||||||
|
|||||||
@@ -46,9 +46,6 @@ extern const char* BUILD_TIME;
|
|||||||
#include "server_GPIO.h"
|
#include "server_GPIO.h"
|
||||||
|
|
||||||
|
|
||||||
#ifdef BLINK_GPIO
|
|
||||||
#undef BLINK_GPIO
|
|
||||||
#endif
|
|
||||||
#define BLINK_GPIO GPIO_NUM_33
|
#define BLINK_GPIO GPIO_NUM_33
|
||||||
|
|
||||||
static const char *TAGMAIN = "main";
|
static const char *TAGMAIN = "main";
|
||||||
@@ -91,10 +88,11 @@ bool Init_NVS_SDCard()
|
|||||||
// Options for mounting the filesystem.
|
// Options for mounting the filesystem.
|
||||||
// If format_if_mount_failed is set to true, SD card will be partitioned and
|
// If format_if_mount_failed is set to true, SD card will be partitioned and
|
||||||
// formatted in case when mounting fails.
|
// formatted in case when mounting fails.
|
||||||
esp_vfs_fat_sdmmc_mount_config_t mount_config;
|
esp_vfs_fat_sdmmc_mount_config_t mount_config = {
|
||||||
mount_config.format_if_mount_failed = false;
|
.format_if_mount_failed = false,
|
||||||
mount_config.max_files = 7; // anstatt 5 (2022-09-21)
|
.max_files = 7, // anstatt 5 (2022-09-21)
|
||||||
mount_config.allocation_unit_size = 16 * 1024;
|
.allocation_unit_size = 16 * 1024
|
||||||
|
};
|
||||||
|
|
||||||
// Use settings defined above to initialize SD card and mount FAT filesystem.
|
// Use settings defined above to initialize SD card and mount FAT filesystem.
|
||||||
// Note: esp_vfs_fat_sdmmc_mount is an all-in-one convenience function.
|
// Note: esp_vfs_fat_sdmmc_mount is an all-in-one convenience function.
|
||||||
@@ -197,7 +195,7 @@ extern "C" void app_main(void)
|
|||||||
ESP_LOGD(TAGMAIN, "No SSID and PASSWORD set!!!");
|
ESP_LOGD(TAGMAIN, "No SSID and PASSWORD set!!!");
|
||||||
|
|
||||||
if (hostname != NULL)
|
if (hostname != NULL)
|
||||||
ESP_LOGD(TAGMAIN, "Hostname: %s", hostname);
|
ESP_LOGD(TAGMAIN, "Hostename: %s", hostname);
|
||||||
else
|
else
|
||||||
ESP_LOGD(TAGMAIN, "Hostname not set");
|
ESP_LOGD(TAGMAIN, "Hostname not set");
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,6 @@
|
|||||||
#include "version.h"
|
#include "version.h"
|
||||||
|
|
||||||
#include "esp_wifi.h"
|
#include "esp_wifi.h"
|
||||||
#include "lwip/inet.h"
|
|
||||||
|
|
||||||
#include "server_tflite.h"
|
#include "server_tflite.h"
|
||||||
#include "esp_log.h"
|
#include "esp_log.h"
|
||||||
@@ -360,25 +359,12 @@ esp_err_t sysinfo_handler(httpd_req_t *req)
|
|||||||
std::string gitrevision = libfive_git_revision();
|
std::string gitrevision = libfive_git_revision();
|
||||||
std::string htmlversion = getHTMLversion();
|
std::string htmlversion = getHTMLversion();
|
||||||
char freeheapmem[11];
|
char freeheapmem[11];
|
||||||
#if (ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0))
|
|
||||||
sprintf(freeheapmem, "%lu", esp_get_free_heap_size());
|
|
||||||
#else
|
|
||||||
sprintf(freeheapmem, "%zu", esp_get_free_heap_size());
|
sprintf(freeheapmem, "%zu", esp_get_free_heap_size());
|
||||||
#endif
|
|
||||||
|
|
||||||
char ipstr[INET_ADDRSTRLEN];
|
tcpip_adapter_ip_info_t ip_info;
|
||||||
|
ESP_ERROR_CHECK(tcpip_adapter_get_ip_info(TCPIP_ADAPTER_IF_STA, &ip_info));
|
||||||
const char *hostname;
|
const char *hostname;
|
||||||
esp_netif_t *esp_netif = esp_netif_get_handle_from_ifkey("WIFI_STA_DEF");
|
ESP_ERROR_CHECK(tcpip_adapter_get_hostname(TCPIP_ADAPTER_IF_STA, &hostname));
|
||||||
if (esp_netif != NULL) {
|
|
||||||
esp_netif_ip_info_t ip_info;
|
|
||||||
ESP_ERROR_CHECK(esp_netif_get_ip_info(esp_netif, &ip_info));
|
|
||||||
esp_ip4addr_ntoa(&ip_info.ip, ipstr, INET_ADDRSTRLEN);
|
|
||||||
|
|
||||||
ESP_ERROR_CHECK(esp_netif_get_hostname(esp_netif, &hostname));
|
|
||||||
} else {
|
|
||||||
ipstr[0] = '\0';
|
|
||||||
hostname = "n/a";
|
|
||||||
}
|
|
||||||
|
|
||||||
zw = "[\
|
zw = "[\
|
||||||
{\
|
{\
|
||||||
@@ -390,7 +376,7 @@ esp_err_t sysinfo_handler(httpd_req_t *req)
|
|||||||
\"html\" : \"" + htmlversion + "\",\
|
\"html\" : \"" + htmlversion + "\",\
|
||||||
\"cputemp\" : \"" + cputemp + "\",\
|
\"cputemp\" : \"" + cputemp + "\",\
|
||||||
\"hostname\" : \"" + hostname + "\",\
|
\"hostname\" : \"" + hostname + "\",\
|
||||||
\"IPv4\" : \"" + ipstr + "\",\
|
\"IPv4\" : \"" + ip4addr_ntoa(&ip_info.ip) + "\",\
|
||||||
\"freeHeapMem\" : \"" + freeheapmem + "\"\
|
\"freeHeapMem\" : \"" + freeheapmem + "\"\
|
||||||
}\
|
}\
|
||||||
]";
|
]";
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#include "nvs_flash.h"
|
#include "nvs_flash.h"
|
||||||
#include "esp_netif.h"
|
#include "esp_netif.h"
|
||||||
|
#include "esp_eth.h"
|
||||||
#include "server_GPIO.h"
|
#include "server_GPIO.h"
|
||||||
|
|
||||||
#include <esp_http_server.h>
|
#include <esp_http_server.h>
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,69 +0,0 @@
|
|||||||
##################################################
|
|
||||||
# Application specific configuration
|
|
||||||
# Edit this file instead of sdkconfig.esp32cam!
|
|
||||||
# After editting, make sure to explicitly delete
|
|
||||||
# sdkconfig.esp32cam to apply your changes!
|
|
||||||
##################################################
|
|
||||||
|
|
||||||
CONFIG_COMPILER_OPTIMIZATION_DEFAULT=n
|
|
||||||
CONFIG_COMPILER_OPTIMIZATION_SIZE=y
|
|
||||||
|
|
||||||
CONFIG_ESP32_REV_MIN_0=y
|
|
||||||
|
|
||||||
CONFIG_ESP32_DPORT_WORKAROUND=y
|
|
||||||
|
|
||||||
CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y
|
|
||||||
CONFIG_ESPTOOLPY_FLASHSIZE="4MB"
|
|
||||||
CONFIG_ESPTOOLPY_FLASHSIZE_DETECT=y
|
|
||||||
|
|
||||||
CONFIG_PARTITION_TABLE_CUSTOM=y
|
|
||||||
CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv"
|
|
||||||
CONFIG_PARTITION_TABLE_FILENAME="partitions.csv"
|
|
||||||
CONFIG_PARTITION_TABLE_OFFSET=0x8000
|
|
||||||
CONFIG_PARTITION_TABLE_MD5=y
|
|
||||||
|
|
||||||
CONFIG_VFS_SUPPORT_IO=y
|
|
||||||
|
|
||||||
CONFIG_SPIRAM=y
|
|
||||||
CONFIG_SPIRAM_SIZE=-1
|
|
||||||
CONFIG_SPIRAM_SPEED_40M=y
|
|
||||||
CONFIG_SPIRAM=y
|
|
||||||
CONFIG_SPIRAM_BOOT_INIT=y
|
|
||||||
CONFIG_SPIRAM_USE_MALLOC=y
|
|
||||||
CONFIG_SPIRAM_MEMTEST=y
|
|
||||||
CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=16384
|
|
||||||
CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=32768
|
|
||||||
CONFIG_SPIRAM_CACHE_WORKAROUND=y
|
|
||||||
|
|
||||||
CONFIG_ESP_INT_WDT_TIMEOUT_MS=300
|
|
||||||
|
|
||||||
CONFIG_HTTPD_MAX_REQ_HDR_LEN=1024
|
|
||||||
|
|
||||||
CONFIG_HTTPD_PURGE_BUF_LEN=16
|
|
||||||
|
|
||||||
CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=16
|
|
||||||
|
|
||||||
CONFIG_ESP32_WIFI_CACHE_TX_BUFFER_NUM=16
|
|
||||||
|
|
||||||
CONFIG_FATFS_LFN_HEAP=y
|
|
||||||
|
|
||||||
CONFIG_FATFS_MAX_LFN=255
|
|
||||||
CONFIG_FATFS_API_ENCODING_ANSI_OEM=y
|
|
||||||
|
|
||||||
CONFIG_FMB_TIMER_PORT_ENABLED=y
|
|
||||||
|
|
||||||
CONFIG_MQTT_SKIP_PUBLISH_IF_DISCONNECTED=y
|
|
||||||
|
|
||||||
CONFIG_FREERTOS_TASK_FUNCTION_WRAPPER=n
|
|
||||||
|
|
||||||
CONFIG_OV7670_SUPPORT=n
|
|
||||||
CONFIG_OV7725_SUPPORT=n
|
|
||||||
CONFIG_NT99141_SUPPORT=n
|
|
||||||
CONFIG_OV3660_SUPPORT=n
|
|
||||||
CONFIG_OV5640_SUPPORT=n
|
|
||||||
CONFIG_GC2145_SUPPORT=n
|
|
||||||
CONFIG_GC032A_SUPPORT=n
|
|
||||||
CONFIG_GC0308_SUPPORT=n
|
|
||||||
CONFIG_BF3005_SUPPORT=n
|
|
||||||
|
|
||||||
CONFIG_RMT_SUPPRESS_DEPRECATE_WARN=y
|
|
||||||
@@ -407,7 +407,6 @@ textarea {
|
|||||||
Set on "false" to ensure, that only positive changes are accepted (typically for counter)
|
Set on "false" to ensure, that only positive changes are accepted (typically for counter)
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<!--
|
|
||||||
<tr class="expert" id="ex12">
|
<tr class="expert" id="ex12">
|
||||||
<td class="indent1">
|
<td class="indent1">
|
||||||
<input type="checkbox" id="PostProcessing_ErrorMessage_enabled" value="1" onclick = 'InvertEnableItem("PostProcessing", "ErrorMessage")' unchecked >
|
<input type="checkbox" id="PostProcessing_ErrorMessage_enabled" value="1" onclick = 'InvertEnableItem("PostProcessing", "ErrorMessage")' unchecked >
|
||||||
@@ -423,7 +422,6 @@ textarea {
|
|||||||
Do not show error message in return value - in error case, the last valid number will be send out
|
Do not show error message in return value - in error case, the last valid number will be send out
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
-->
|
|
||||||
<tr class="expert" id="ex1dddd">
|
<tr class="expert" id="ex1dddd">
|
||||||
<td class="indent1">
|
<td class="indent1">
|
||||||
<input type="checkbox" id="PostProcessing_CheckDigitIncreaseConsistency_enabled" value="1" onclick = 'InvertEnableItem("PostProcessing", "CheckDigitIncreaseConsistency")' unchecked >
|
<input type="checkbox" id="PostProcessing_CheckDigitIncreaseConsistency_enabled" value="1" onclick = 'InvertEnableItem("PostProcessing", "CheckDigitIncreaseConsistency")' unchecked >
|
||||||
@@ -1726,7 +1724,7 @@ function UpdateInput() {
|
|||||||
WriteParameter(param, category, "PostProcessing", "PreValueUse", true);
|
WriteParameter(param, category, "PostProcessing", "PreValueUse", true);
|
||||||
WriteParameter(param, category, "PostProcessing", "PreValueAgeStartup", true);
|
WriteParameter(param, category, "PostProcessing", "PreValueAgeStartup", true);
|
||||||
WriteParameter(param, category, "PostProcessing", "AllowNegativeRates", true);
|
WriteParameter(param, category, "PostProcessing", "AllowNegativeRates", true);
|
||||||
// WriteParameter(param, category, "PostProcessing", "ErrorMessage", true);
|
WriteParameter(param, category, "PostProcessing", "ErrorMessage", true);
|
||||||
WriteParameter(param, category, "PostProcessing", "CheckDigitIncreaseConsistency", true);
|
WriteParameter(param, category, "PostProcessing", "CheckDigitIncreaseConsistency", true);
|
||||||
|
|
||||||
WriteParameter(param, category, "MQTT", "Uri", true);
|
WriteParameter(param, category, "MQTT", "Uri", true);
|
||||||
@@ -1843,7 +1841,7 @@ function ReadParameterAll()
|
|||||||
ReadParameter(param, "PostProcessing", "PreValueUse", true);
|
ReadParameter(param, "PostProcessing", "PreValueUse", true);
|
||||||
ReadParameter(param, "PostProcessing", "PreValueAgeStartup", true);
|
ReadParameter(param, "PostProcessing", "PreValueAgeStartup", true);
|
||||||
ReadParameter(param, "PostProcessing", "AllowNegativeRates", true);
|
ReadParameter(param, "PostProcessing", "AllowNegativeRates", true);
|
||||||
// ReadParameter(param, "PostProcessing", "ErrorMessage", true);
|
ReadParameter(param, "PostProcessing", "ErrorMessage", true);
|
||||||
ReadParameter(param, "PostProcessing", "CheckDigitIncreaseConsistency", true);
|
ReadParameter(param, "PostProcessing", "CheckDigitIncreaseConsistency", true);
|
||||||
|
|
||||||
ReadParameter(param, "MQTT", "Uri", true);
|
ReadParameter(param, "MQTT", "Uri", true);
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ function setprevalue() {
|
|||||||
inputVal = inputVal.replace(",", ".");
|
inputVal = inputVal.replace(",", ".");
|
||||||
var xhttp = new XMLHttpRequest();
|
var xhttp = new XMLHttpRequest();
|
||||||
try {
|
try {
|
||||||
url = basepath + "/setPreValue?value=" + inputVal + "&numbers=" + _number;
|
url = basepath + "/setPreValue.html?value=" + inputVal + "&numbers=" + _number;
|
||||||
xhttp.open("GET", url, false);
|
xhttp.open("GET", url, false);
|
||||||
xhttp.send();
|
xhttp.send();
|
||||||
response = xhttp.responseText;
|
response = xhttp.responseText;
|
||||||
@@ -102,7 +102,7 @@ function loadPrevalue(_basepath) {
|
|||||||
|
|
||||||
var xhttp = new XMLHttpRequest();
|
var xhttp = new XMLHttpRequest();
|
||||||
try {
|
try {
|
||||||
url = _basepath + '/setPreValue?numbers=' + _number;
|
url = _basepath + '/setPreValue.html?numbers=' + _number;
|
||||||
xhttp.open("GET", url, false);
|
xhttp.open("GET", url, false);
|
||||||
xhttp.send();
|
xhttp.send();
|
||||||
response = xhttp.responseText;
|
response = xhttp.responseText;
|
||||||
|
|||||||
@@ -172,7 +172,7 @@ function ParseConfig() {
|
|||||||
ParamAddValue(param, catname, "MaxRateType", 1, true);
|
ParamAddValue(param, catname, "MaxRateType", 1, true);
|
||||||
ParamAddValue(param, catname, "ExtendedResolution", 1, true);
|
ParamAddValue(param, catname, "ExtendedResolution", 1, true);
|
||||||
ParamAddValue(param, catname, "IgnoreLeadingNaN", 1, true);
|
ParamAddValue(param, catname, "IgnoreLeadingNaN", 1, true);
|
||||||
// ParamAddValue(param, catname, "ErrorMessage");
|
ParamAddValue(param, catname, "ErrorMessage");
|
||||||
ParamAddValue(param, catname, "CheckDigitIncreaseConsistency");
|
ParamAddValue(param, catname, "CheckDigitIncreaseConsistency");
|
||||||
|
|
||||||
var catname = "MQTT";
|
var catname = "MQTT";
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ function refresh() {
|
|||||||
var basepath = "http://192.168.178.22";
|
var basepath = "http://192.168.178.22";
|
||||||
|
|
||||||
function loadStatus() {
|
function loadStatus() {
|
||||||
url = basepath + '/statusflow';
|
url = basepath + '/statusflow.html';
|
||||||
var xhttp = new XMLHttpRequest();
|
var xhttp = new XMLHttpRequest();
|
||||||
xhttp.onreadystatechange = function() {
|
xhttp.onreadystatechange = function() {
|
||||||
if (this.readyState == 4 && this.status == 200) {
|
if (this.readyState == 4 && this.status == 200) {
|
||||||
@@ -125,7 +125,7 @@ function refresh() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function loadCPUTemp() {
|
function loadCPUTemp() {
|
||||||
url = basepath + '/cpu_temperature';
|
url = basepath + '/cputemp.html';
|
||||||
var xhttp = new XMLHttpRequest();
|
var xhttp = new XMLHttpRequest();
|
||||||
xhttp.onreadystatechange = function() {
|
xhttp.onreadystatechange = function() {
|
||||||
if (this.readyState == 4 && this.status == 200) {
|
if (this.readyState == 4 && this.status == 200) {
|
||||||
@@ -138,7 +138,7 @@ function refresh() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function loadRSSI() {
|
function loadRSSI() {
|
||||||
url = basepath + '/rssi';
|
url = basepath + '/rssi.html';
|
||||||
var xhttp = new XMLHttpRequest();
|
var xhttp = new XMLHttpRequest();
|
||||||
xhttp.onreadystatechange = function() {
|
xhttp.onreadystatechange = function() {
|
||||||
if (this.readyState == 4 && this.status == 200) {
|
if (this.readyState == 4 && this.status == 200) {
|
||||||
|
|||||||
Reference in New Issue
Block a user