mirror of
https://github.com/jomjol/AI-on-the-edge-device.git
synced 2025-12-07 12:06:58 +03:00
Bug-Fixing
This commit is contained in:
21
README.md
21
README.md
@@ -13,19 +13,36 @@ A 3d-printable housing can be found here: https://www.thingiverse.com/thing:4571
|
||||
|
||||
|
||||
|
||||
|
||||
## Donate
|
||||
|
||||
|
||||
If you would like to support the developer with a cup of coffee you can do that via [Paypal](https://www.paypal.com/donate?hosted_button_id=8TRSVYNYKDSWL).
|
||||
|
||||
<form action="https://www.paypal.com/donate" method="post" target="_top">
|
||||
<input type="hidden" name="hosted_button_id" value="8TRSVYNYKDSWL" />
|
||||
<input type="image" src="https://www.paypalobjects.com/en_US/DK/i/btn/btn_donateCC_LG.gif" border="0" name="submit" title="PayPal - The safer, easier way to pay online!" alt="Donate with PayPal button" />
|
||||
<img alt="" border="0" src="https://www.paypal.com/en_DE/i/scr/pixel.gif" width="1" height="1" />
|
||||
</form>
|
||||
|
||||
|
||||
## Change log
|
||||
|
||||
------
|
||||
|
||||
### Known Issues
|
||||
|
||||
* Spontaneous reboots, most probably due to weak power supply during power intensive operations (taking / calculating pictures)
|
||||
* slow response of web server during picture analysis
|
||||
|
||||
------
|
||||
|
||||
**General remark:** Beside the `firmware.bin`, typically also the content of `/html` needs to be updated!
|
||||
|
||||
##### Rolling - (2020-12-29)
|
||||
##### Rolling - (2020-12-31)
|
||||
|
||||
* Bug-Fixing: internal change of camera handling to avoid reboots
|
||||
|
||||
2020-12-29
|
||||
|
||||
* MQTT: LWT (Last Will Testament) implemented: "connection lost" is written to the error topic in case of connection lost (`TopicError`)
|
||||
|
||||
|
||||
9
code/components/jomjol_controlGPIO/CMakeLists.txt
Normal file
9
code/components/jomjol_controlGPIO/CMakeLists.txt
Normal file
@@ -0,0 +1,9 @@
|
||||
FILE(GLOB_RECURSE app_sources ${CMAKE_CURRENT_SOURCE_DIR}/*.*)
|
||||
|
||||
list(APPEND EXTRA_COMPONENT_DIRS $ENV{IDF_PATH}/examples/common_components/protocol_examples_common)
|
||||
|
||||
idf_component_register(SRCS ${app_sources}
|
||||
INCLUDE_DIRS "."
|
||||
REQUIRES esp_http_server jomjol_logfile)
|
||||
|
||||
|
||||
119
code/components/jomjol_controlGPIO/server_GPIO.cpp
Normal file
119
code/components/jomjol_controlGPIO/server_GPIO.cpp
Normal file
@@ -0,0 +1,119 @@
|
||||
#include <string>
|
||||
#include "string.h"
|
||||
|
||||
#include <string.h>
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/task.h"
|
||||
#include "esp_system.h"
|
||||
#include "esp_event.h"
|
||||
#include "esp_log.h"
|
||||
#include "driver/gpio.h"
|
||||
//#include "errno.h"
|
||||
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include "server_GPIO.h"
|
||||
|
||||
#include "ClassLogFile.h"
|
||||
|
||||
#include "Helper.h"
|
||||
|
||||
esp_err_t handler_switch_GPIO(httpd_req_t *req)
|
||||
{
|
||||
if (debug_detail_heap) LogFile.WriteHeapInfo("handler_switch_GPIO - Start");
|
||||
|
||||
LogFile.WriteToFile("handler_switch_GPIO");
|
||||
char _query[200];
|
||||
char _valueGPIO[30];
|
||||
char _valueStatus[30];
|
||||
std::string gpio, status, zw;
|
||||
int gpionum = 0;
|
||||
gpio_num_t gpio_num;
|
||||
|
||||
if (httpd_req_get_url_query_str(req, _query, 200) == ESP_OK)
|
||||
{
|
||||
printf("Query: "); printf(_query); printf("\n");
|
||||
|
||||
if (httpd_query_key_value(_query, "GPIO", _valueGPIO, 30) == ESP_OK)
|
||||
{
|
||||
printf("GPIO is found"); printf(_valueGPIO); printf("\n");
|
||||
gpio = std::string(_valueGPIO);
|
||||
}
|
||||
if (httpd_query_key_value(_query, "Status", _valueStatus, 30) == ESP_OK)
|
||||
{
|
||||
printf("Status is found"); printf(_valueStatus); printf("\n");
|
||||
status = std::string(_valueStatus);
|
||||
}
|
||||
};
|
||||
|
||||
status = toUpper(status);
|
||||
if (!(status == "HIGH") && !(status == "LOW"))
|
||||
{
|
||||
zw = "Status not valid: " + status;;
|
||||
httpd_resp_sendstr_chunk(req, zw.c_str());
|
||||
httpd_resp_sendstr_chunk(req, NULL);
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
gpionum = stoi(gpio);
|
||||
|
||||
// frei: 16; 12-15; 2; 4
|
||||
|
||||
switch (gpionum) {
|
||||
case 2:
|
||||
gpio_num = GPIO_NUM_2;
|
||||
break;
|
||||
case 4:
|
||||
gpio_num = GPIO_NUM_4;
|
||||
break;
|
||||
case 12:
|
||||
gpio_num = GPIO_NUM_12;
|
||||
break;
|
||||
case 13:
|
||||
gpio_num = GPIO_NUM_13;
|
||||
break;
|
||||
case 14:
|
||||
gpio_num = GPIO_NUM_14;
|
||||
break;
|
||||
case 15:
|
||||
gpio_num = GPIO_NUM_15;
|
||||
break;
|
||||
case 16:
|
||||
gpio_num = (gpio_num_t) 16;
|
||||
break;
|
||||
default:
|
||||
zw = "GPIO" + std::to_string(gpionum) + " not support - only 2, 4, 12-16 free";
|
||||
httpd_resp_sendstr_chunk(req, zw.c_str());
|
||||
httpd_resp_sendstr_chunk(req, NULL);
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
// Init the GPIO
|
||||
gpio_pad_select_gpio(gpio_num);
|
||||
/* Set the GPIO as a push/pull output */
|
||||
gpio_set_direction(gpio_num, GPIO_MODE_OUTPUT);
|
||||
|
||||
if (status == "HIGH")
|
||||
gpio_set_level(gpio_num, 1);
|
||||
else
|
||||
gpio_set_level(gpio_num, 0);
|
||||
|
||||
zw = "GPIO" + std::to_string(gpionum) + " switched to " + status;
|
||||
httpd_resp_sendstr_chunk(req, zw.c_str());
|
||||
httpd_resp_sendstr_chunk(req, NULL);
|
||||
return ESP_OK;
|
||||
};
|
||||
|
||||
|
||||
|
||||
void register_server_GPIO_uri(httpd_handle_t server)
|
||||
{
|
||||
ESP_LOGI(TAGPARTGPIO, "server_GPIO - Registering URI handlers");
|
||||
|
||||
httpd_uri_t camuri = { };
|
||||
camuri.method = HTTP_GET;
|
||||
camuri.uri = "/GPIO";
|
||||
camuri.handler = handler_switch_GPIO;
|
||||
camuri.user_ctx = (void*) "switch GPIO";
|
||||
httpd_register_uri_handler(server, &camuri);
|
||||
}
|
||||
12
code/components/jomjol_controlGPIO/server_GPIO.h
Normal file
12
code/components/jomjol_controlGPIO/server_GPIO.h
Normal file
@@ -0,0 +1,12 @@
|
||||
#include <esp_log.h>
|
||||
|
||||
#include <esp_http_server.h>
|
||||
|
||||
//#include "ClassControllCamera.h"
|
||||
|
||||
static const char *TAGPARTGPIO = "server_GPIO";
|
||||
|
||||
void register_server_GPIO_uri(httpd_handle_t server);
|
||||
|
||||
|
||||
extern bool debug_detail_heap;
|
||||
@@ -25,6 +25,8 @@
|
||||
|
||||
#include "esp_camera.h"
|
||||
|
||||
// #define DEBUG_DETAIL_ON
|
||||
|
||||
|
||||
// ESP32Cam (AiThinker) PIN Map
|
||||
|
||||
@@ -68,7 +70,8 @@ static camera_config_t camera_config = {
|
||||
.pin_pclk = CAM_PIN_PCLK,
|
||||
|
||||
//XCLK 20MHz or 10MHz for OV2640 double FPS (Experimental)
|
||||
.xclk_freq_hz = 20000000,
|
||||
// .xclk_freq_hz = 20000000, // Orginalwert
|
||||
.xclk_freq_hz = 5000000, // Test, um die Bildfehler los zu werden !!!!
|
||||
.ledc_timer = LEDC_TIMER_0,
|
||||
.ledc_channel = LEDC_CHANNEL_0,
|
||||
|
||||
@@ -178,14 +181,19 @@ void CCamera::SetQualitySize(int qual, framesize_t resol)
|
||||
}
|
||||
|
||||
|
||||
|
||||
esp_err_t CCamera::CaptureToBasisImage(CImageBasis *_Image, int delay)
|
||||
{
|
||||
string ftype;
|
||||
static const int BMP_HEADER_LEN = 54; // von to_bmp.c !!!!!!!!!!!!!!!
|
||||
|
||||
uint8_t *zwischenspeicher = NULL;
|
||||
|
||||
|
||||
LEDOnOff(true);
|
||||
|
||||
// if (debug_detail_heap) LogFile.WriteHeapInfo("CCamera::CaptureToBasisImage - Start");
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
if (debug_detail_heap) LogFile.WriteHeapInfo("CCamera::CaptureToBasisImage - Start");
|
||||
#endif
|
||||
|
||||
if (delay > 0)
|
||||
{
|
||||
@@ -194,7 +202,9 @@ esp_err_t CCamera::CaptureToBasisImage(CImageBasis *_Image, int delay)
|
||||
vTaskDelay( xDelay );
|
||||
}
|
||||
|
||||
// if (debug_detail_heap) LogFile.WriteHeapInfo("CCamera::CaptureToBasisImage - After LightOn");
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
if (debug_detail_heap) LogFile.WriteHeapInfo("CCamera::CaptureToBasisImage - After LightOn");
|
||||
#endif
|
||||
|
||||
camera_fb_t * fb = esp_camera_fb_get();
|
||||
if (!fb) {
|
||||
@@ -203,59 +213,31 @@ esp_err_t CCamera::CaptureToBasisImage(CImageBasis *_Image, int delay)
|
||||
return ESP_FAIL;
|
||||
}
|
||||
|
||||
// if (debug_detail_heap) LogFile.WriteHeapInfo("CCamera::CaptureToBasisImage - After fb_get");
|
||||
int _size = fb->len;
|
||||
zwischenspeicher = (uint8_t*) malloc(_size);
|
||||
for (int i = 0; i < _size; ++i)
|
||||
*(zwischenspeicher + i) = *(fb->buf + i);
|
||||
esp_camera_fb_return(fb);
|
||||
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
if (debug_detail_heap) LogFile.WriteHeapInfo("CCamera::CaptureToBasisImage - After fb_get");
|
||||
#endif
|
||||
|
||||
LEDOnOff(false);
|
||||
|
||||
|
||||
if (delay > 0)
|
||||
{
|
||||
LightOnOff(false);
|
||||
}
|
||||
|
||||
|
||||
TickType_t xDelay = 1000 / portTICK_PERIOD_MS;
|
||||
vTaskDelay( xDelay ); // wait for power to recover
|
||||
// TickType_t xDelay = 1000 / portTICK_PERIOD_MS;
|
||||
// vTaskDelay( xDelay ); // wait for power to recover
|
||||
|
||||
uint8_t * buf = NULL;
|
||||
size_t buf_len = 0;
|
||||
|
||||
int _anz = 0;
|
||||
xDelay = 3000 / portTICK_PERIOD_MS;
|
||||
CImageBasis _zwImage;
|
||||
_zwImage.LoadFromMemory(zwischenspeicher, _size);
|
||||
free(zwischenspeicher);
|
||||
|
||||
while (!frame2bmp(fb, &buf, &buf_len) && _anz < 5)
|
||||
{
|
||||
std::string _zw1 = "CCamera::CaptureToBasisImage failed #" + std::to_string(++_anz);
|
||||
LogFile.WriteToFile(_zw1);
|
||||
|
||||
esp_camera_fb_return(fb);
|
||||
_zw1 = "CCamera::CaptureToBasisImage failed #" + std::to_string(_anz) + " - after esp_camera_fb_return";
|
||||
LogFile.WriteToFile(_zw1);
|
||||
free(buf);
|
||||
|
||||
_zw1 = "CCamera::CaptureToBasisImage failed #" + std::to_string(_anz) + " - after free";
|
||||
LogFile.WriteToFile(_zw1);
|
||||
|
||||
InitCam();
|
||||
|
||||
_zw1 = "CCamera::CaptureToBasisImage failed #" + std::to_string(_anz) + " - after InitCam";
|
||||
LogFile.WriteToFile(_zw1);
|
||||
|
||||
vTaskDelay( xDelay );
|
||||
fb = esp_camera_fb_get();
|
||||
|
||||
_zw1 = "CCamera::CaptureToBasisImage failed #" + std::to_string(_anz) + " - after esp_camera_fb_get";
|
||||
LogFile.WriteToFile(_zw1);
|
||||
|
||||
}
|
||||
|
||||
|
||||
esp_camera_fb_return(fb);
|
||||
|
||||
if (debug_detail_heap) LogFile.WriteHeapInfo("CCamera::CaptureToBasisImage - After frame2bmp");
|
||||
|
||||
int _len_zw = buf_len - BMP_HEADER_LEN;
|
||||
uint8_t *_buf_zeiger = buf + BMP_HEADER_LEN;
|
||||
if (debug_detail_heap) LogFile.WriteHeapInfo("CCamera::CaptureToBasisImage - After LoadFromMemory");
|
||||
|
||||
stbi_uc* p_target;
|
||||
stbi_uc* p_source;
|
||||
@@ -263,28 +245,31 @@ esp_err_t CCamera::CaptureToBasisImage(CImageBasis *_Image, int delay)
|
||||
int width = image_width;
|
||||
int height = image_height;
|
||||
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
std::string _zw = "Targetimage: " + std::to_string((int) _Image->rgb_image) + " Size: " + std::to_string(_Image->width) + ", " + std::to_string(_Image->height);
|
||||
_zw = _zw + " Buf: " + std::to_string((int) buf);
|
||||
|
||||
_zw = _zw + " _zwImage: " + std::to_string((int) _zwImage.rgb_image) + " Size: " + std::to_string(_zwImage.width) + ", " + std::to_string(_zwImage.height);
|
||||
if (debug_detail_heap) LogFile.WriteToFile(_zw);
|
||||
#endif
|
||||
|
||||
for (int x = 0; x < width; ++x)
|
||||
for (int y = 0; y < height; ++y)
|
||||
{
|
||||
p_target = _Image->rgb_image + (channels * (y * width + x));
|
||||
p_source = _buf_zeiger + (channels * (y * width + x));
|
||||
p_target[0] = p_source[2];
|
||||
p_source = _zwImage.rgb_image + (channels * (y * width + x));
|
||||
p_target[0] = p_source[0];
|
||||
p_target[1] = p_source[1];
|
||||
p_target[2] = p_source[0];
|
||||
p_target[2] = p_source[2];
|
||||
}
|
||||
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
if (debug_detail_heap) LogFile.WriteHeapInfo("CCamera::CaptureToBasisImage - After Copy To Target");
|
||||
|
||||
// _Image->CopyFromMemory(_buf_zeiger, _len_zw);
|
||||
#endif
|
||||
|
||||
free(buf);
|
||||
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
if (debug_detail_heap) LogFile.WriteHeapInfo("CCamera::CaptureToBasisImage - Done");
|
||||
#endif
|
||||
|
||||
return ESP_OK;
|
||||
}
|
||||
@@ -294,7 +279,7 @@ esp_err_t CCamera::CaptureToFile(std::string nm, int delay)
|
||||
{
|
||||
string ftype;
|
||||
|
||||
LEDOnOff(true);
|
||||
LEDOnOff(true); // Abgeschaltet, um Strom zu sparen !!!!!!
|
||||
|
||||
if (delay > 0)
|
||||
{
|
||||
@@ -311,12 +296,21 @@ esp_err_t CCamera::CaptureToFile(std::string nm, int delay)
|
||||
}
|
||||
LEDOnOff(false);
|
||||
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
printf("w %d, h %d, size %d\n", fb->width, fb->height, fb->len);
|
||||
#endif
|
||||
|
||||
nm = FormatFileName(nm);
|
||||
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
printf("Save Camera to : %s\n", nm.c_str());
|
||||
#endif
|
||||
|
||||
ftype = toUpper(getFileType(nm));
|
||||
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
printf("Filetype: %s\n", ftype.c_str());
|
||||
#endif
|
||||
|
||||
uint8_t * buf = NULL;
|
||||
size_t buf_len = 0;
|
||||
@@ -344,7 +338,9 @@ esp_err_t CCamera::CaptureToFile(std::string nm, int delay)
|
||||
FILE * fp = OpenFileAndWait(nm.c_str(), "wb");
|
||||
if (fp == NULL) /* If an error occurs during the file creation */
|
||||
{
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
fprintf(stderr, "fopen() failed for '%s'\n", nm.c_str());
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -463,7 +459,9 @@ void CCamera::GetCameraParameter(httpd_req_t *req, int &qual, framesize_t &resol
|
||||
printf("Query: "); printf(_query); printf("\n");
|
||||
if (httpd_query_key_value(_query, "size", _size, 10) == ESP_OK)
|
||||
{
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
printf("Size: "); printf(_size); printf("\n");
|
||||
#endif
|
||||
if (strcmp(_size, "QVGA") == 0)
|
||||
resol = FRAMESIZE_QVGA; // 320x240
|
||||
if (strcmp(_size, "VGA") == 0)
|
||||
@@ -479,7 +477,9 @@ void CCamera::GetCameraParameter(httpd_req_t *req, int &qual, framesize_t &resol
|
||||
}
|
||||
if (httpd_query_key_value(_query, "quality", _qual, 10) == ESP_OK)
|
||||
{
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
printf("Quality: "); printf(_qual); printf("\n");
|
||||
#endif
|
||||
qual = atoi(_qual);
|
||||
|
||||
if (qual > 63)
|
||||
@@ -510,7 +510,9 @@ framesize_t CCamera::TextToFramesize(const char * _size)
|
||||
|
||||
CCamera::CCamera()
|
||||
{
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
printf("CreateClassCamera\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
esp_err_t CCamera::InitCam()
|
||||
|
||||
@@ -11,6 +11,9 @@
|
||||
#define SCRATCH_BUFSIZE2 8192
|
||||
char scratch2[SCRATCH_BUFSIZE2];
|
||||
|
||||
// #define DEBUG_DETAIL_ON
|
||||
|
||||
|
||||
|
||||
void PowerResetCamera(){
|
||||
ESP_LOGD(TAGPARTCAMERA, "Resetting camera by power down line");
|
||||
@@ -29,50 +32,65 @@ void PowerResetCamera(){
|
||||
|
||||
esp_err_t handler_lightOn(httpd_req_t *req)
|
||||
{
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
if (debug_detail_heap) LogFile.WriteHeapInfo("handler_lightOn - Start");
|
||||
|
||||
LogFile.WriteToFile("handler_lightOn");
|
||||
printf("handler_lightOn uri:\n"); printf(req->uri); printf("\n");
|
||||
#endif
|
||||
|
||||
Camera.LightOnOff(true);
|
||||
const char* resp_str = (const char*) req->user_ctx;
|
||||
httpd_resp_send(req, resp_str, strlen(resp_str));
|
||||
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
if (debug_detail_heap) LogFile.WriteHeapInfo("handler_lightOn - Done");
|
||||
#endif
|
||||
|
||||
return ESP_OK;
|
||||
};
|
||||
|
||||
esp_err_t handler_lightOff(httpd_req_t *req)
|
||||
{
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
if (debug_detail_heap) LogFile.WriteHeapInfo("handler_lightOff - Start");
|
||||
|
||||
LogFile.WriteToFile("handler_lightOff");
|
||||
printf("handler_lightOff uri:\n"); printf(req->uri); printf("\n");
|
||||
#endif
|
||||
Camera.LightOnOff(false);
|
||||
const char* resp_str = (const char*) req->user_ctx;
|
||||
httpd_resp_send(req, resp_str, strlen(resp_str));
|
||||
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
if (debug_detail_heap) LogFile.WriteHeapInfo("handler_lightOff - Done");
|
||||
#endif
|
||||
|
||||
return ESP_OK;
|
||||
};
|
||||
|
||||
esp_err_t handler_capture(httpd_req_t *req)
|
||||
{
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
if (debug_detail_heap) LogFile.WriteHeapInfo("handler_capture - Start");
|
||||
|
||||
LogFile.WriteToFile("handler_capture");
|
||||
#endif
|
||||
|
||||
int quality;
|
||||
framesize_t res;
|
||||
|
||||
Camera.GetCameraParameter(req, quality, res);
|
||||
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
printf("Size: %d", res); printf(" Quality: %d\n", quality);
|
||||
#endif
|
||||
|
||||
Camera.SetQualitySize(quality, res);
|
||||
|
||||
esp_err_t ressult;
|
||||
ressult = Camera.CaptureToHTTP(req);
|
||||
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
if (debug_detail_heap) LogFile.WriteHeapInfo("handler_capture - Done");
|
||||
#endif
|
||||
|
||||
return ressult;
|
||||
};
|
||||
@@ -95,7 +113,9 @@ esp_err_t handler_capture_with_ligth(httpd_req_t *req)
|
||||
printf("Query: "); printf(_query); printf("\n");
|
||||
if (httpd_query_key_value(_query, "delay", _delay, 10) == ESP_OK)
|
||||
{
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
printf("Delay: "); printf(_delay); printf("\n");
|
||||
#endif
|
||||
delay = atoi(_delay);
|
||||
|
||||
if (delay < 0)
|
||||
@@ -104,9 +124,12 @@ esp_err_t handler_capture_with_ligth(httpd_req_t *req)
|
||||
};
|
||||
|
||||
Camera.GetCameraParameter(req, quality, res);
|
||||
printf("Size: %d", res); printf(" Quality: %d\n", quality);
|
||||
Camera.SetQualitySize(quality, res);
|
||||
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
printf("Size: %d", res); printf(" Quality: %d\n", quality);
|
||||
#endif
|
||||
|
||||
Camera.SetQualitySize(quality, res);
|
||||
Camera.LightOnOff(true);
|
||||
const TickType_t xDelay = delay / portTICK_PERIOD_MS;
|
||||
vTaskDelay( xDelay );
|
||||
@@ -116,7 +139,9 @@ esp_err_t handler_capture_with_ligth(httpd_req_t *req)
|
||||
|
||||
Camera.LightOnOff(false);
|
||||
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
if (debug_detail_heap) LogFile.WriteHeapInfo("handler_capture_with_ligth - Done");
|
||||
#endif
|
||||
|
||||
return ressult;
|
||||
};
|
||||
@@ -125,9 +150,11 @@ esp_err_t handler_capture_with_ligth(httpd_req_t *req)
|
||||
|
||||
esp_err_t handler_capture_save_to_file(httpd_req_t *req)
|
||||
{
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
if (debug_detail_heap) LogFile.WriteHeapInfo("handler_capture_save_to_file - Start");
|
||||
|
||||
LogFile.WriteToFile("handler_capture_save_to_file");
|
||||
#endif
|
||||
|
||||
char _query[100];
|
||||
char _delay[10];
|
||||
int delay = 0;
|
||||
@@ -144,14 +171,18 @@ esp_err_t handler_capture_save_to_file(httpd_req_t *req)
|
||||
if (httpd_query_key_value(_query, "filename", filename, 100) == ESP_OK)
|
||||
{
|
||||
fn.append(filename);
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
printf("Filename: "); printf(fn.c_str()); printf("\n");
|
||||
#endif
|
||||
}
|
||||
else
|
||||
fn.append("noname.jpg");
|
||||
|
||||
if (httpd_query_key_value(_query, "delay", _delay, 10) == ESP_OK)
|
||||
{
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
printf("Delay: "); printf(_delay); printf("\n");
|
||||
#endif
|
||||
delay = atoi(_delay);
|
||||
|
||||
if (delay < 0)
|
||||
@@ -163,7 +194,9 @@ esp_err_t handler_capture_save_to_file(httpd_req_t *req)
|
||||
fn.append("noname.jpg");
|
||||
|
||||
Camera.GetCameraParameter(req, quality, res);
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
printf("Size: %d", res); printf(" Quality: %d\n", quality);
|
||||
#endif
|
||||
Camera.SetQualitySize(quality, res);
|
||||
|
||||
esp_err_t ressult;
|
||||
@@ -172,7 +205,9 @@ esp_err_t handler_capture_save_to_file(httpd_req_t *req)
|
||||
const char* resp_str = (const char*) fn.c_str();
|
||||
httpd_resp_send(req, resp_str, strlen(resp_str));
|
||||
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
if (debug_detail_heap) LogFile.WriteHeapInfo("handler_capture_save_to_file - Done");
|
||||
#endif
|
||||
|
||||
return ressult;
|
||||
};
|
||||
@@ -181,7 +216,9 @@ esp_err_t handler_capture_save_to_file(httpd_req_t *req)
|
||||
|
||||
void register_server_camera_uri(httpd_handle_t server)
|
||||
{
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
ESP_LOGI(TAGPARTCAMERA, "server_part_camera - Registering URI handlers");
|
||||
#endif
|
||||
|
||||
httpd_uri_t camuri = { };
|
||||
camuri.method = HTTP_GET;
|
||||
|
||||
@@ -68,6 +68,8 @@ static esp_err_t index_html_get_handler(httpd_req_t *req)
|
||||
/* Handler to respond with an icon file embedded in flash.
|
||||
* Browsers expect to GET website icon at URI /favicon.ico.
|
||||
* This can be overridden by uploading file with same name */
|
||||
|
||||
/*
|
||||
static esp_err_t favicon_get_handler(httpd_req_t *req)
|
||||
{
|
||||
extern const unsigned char favicon_ico_start[] asm("_binary_favicon_ico_start");
|
||||
@@ -75,10 +77,10 @@ static esp_err_t favicon_get_handler(httpd_req_t *req)
|
||||
const size_t favicon_ico_size = (favicon_ico_end - favicon_ico_start);
|
||||
httpd_resp_set_type(req, "image/x-icon");
|
||||
httpd_resp_send(req, (const char *)favicon_ico_start, favicon_ico_size);
|
||||
/* Respond with an empty chunk to signal HTTP response completion */
|
||||
httpd_resp_send_chunk(req, NULL, 0);
|
||||
return ESP_OK;
|
||||
}
|
||||
*/
|
||||
|
||||
/* Send HTTP response with a run-time generated html consisting of
|
||||
* a list of all files and folders under the requested path.
|
||||
|
||||
@@ -283,8 +283,11 @@ std::vector<HTMLInfo*> ClassFlowAnalog::GetHTMLInfo()
|
||||
for (int i = 0; i < ROI.size(); ++i)
|
||||
{
|
||||
HTMLInfo *zw = new HTMLInfo;
|
||||
zw->filename = ROI[i]->name + ".jpg";
|
||||
zw->filename = ROI[i]->name + ".bmp";
|
||||
zw->filename_org = ROI[i]->name + ".jpg";
|
||||
zw->val = ROI[i]->result;
|
||||
zw->image = ROI[i]->image;
|
||||
zw->image_org = ROI[i]->image_org;
|
||||
result.push_back(zw);
|
||||
}
|
||||
|
||||
|
||||
@@ -247,6 +247,10 @@ void CImageBasis::drawCircle(int x1, int y1, int rad, int r, int g, int b, int t
|
||||
CImageBasis::CImageBasis()
|
||||
{
|
||||
externalImage = false;
|
||||
rgb_image = NULL;
|
||||
width = 0;
|
||||
height = 0;
|
||||
channels = 0;
|
||||
}
|
||||
|
||||
void CImageBasis::CreateEmptyImage(int _width, int _height, int _channels)
|
||||
@@ -275,12 +279,11 @@ void CImageBasis::CreateEmptyImage(int _width, int _height, int _channels)
|
||||
|
||||
void CImageBasis::LoadFromMemory(stbi_uc *_buffer, int len)
|
||||
{
|
||||
// if (rgb_image)
|
||||
// free(rgb_image);
|
||||
if (rgb_image)
|
||||
stbi_image_free(rgb_image);
|
||||
rgb_image = stbi_load_from_memory(_buffer, len, &width, &height, &channels, 3);
|
||||
bpp = channels;
|
||||
// STBIDEF stbi_uc *stbi_load_from_memory (stbi_uc const *buffer, int len , int *x, int *y, int *channels_in_file, int desired_channels);
|
||||
|
||||
printf("Image loaded from memory: %d, %d, %d\n", width, height, channels);
|
||||
}
|
||||
|
||||
CImageBasis::CImageBasis(CImageBasis *_copyfrom, int _anzrepeat)
|
||||
|
||||
@@ -1,13 +1,10 @@
|
||||
#include "CTfLiteClass.h"
|
||||
|
||||
// #include "bitmap_image.hpp"
|
||||
|
||||
#include "ClassLogFile.h"
|
||||
#include "Helper.h"
|
||||
|
||||
#include <sys/stat.h>
|
||||
|
||||
bool debugdetailtflite = false;
|
||||
//#define DEBUG_DETAIL_ON
|
||||
|
||||
float CTfLiteClass::GetOutputValue(int nr)
|
||||
{
|
||||
@@ -22,12 +19,10 @@ float CTfLiteClass::GetOutputValue(int nr)
|
||||
|
||||
int CTfLiteClass::GetClassFromImageBasis(CImageBasis *rs)
|
||||
{
|
||||
// printf("Before Load image %s\n", _fn.c_str());
|
||||
if (!LoadInputImageBasis(rs))
|
||||
return -1000;
|
||||
|
||||
Invoke();
|
||||
printf("After Invoke \n");
|
||||
|
||||
return GetOutClassification();
|
||||
}
|
||||
@@ -53,7 +48,6 @@ int CTfLiteClass::GetOutClassification()
|
||||
zw_class = i;
|
||||
}
|
||||
}
|
||||
// printf("Result Ziffer: %d\n", zw_class);
|
||||
return zw_class;
|
||||
}
|
||||
|
||||
@@ -105,7 +99,6 @@ void CTfLiteClass::GetOutPut()
|
||||
void CTfLiteClass::Invoke()
|
||||
{
|
||||
interpreter->Invoke();
|
||||
// printf("Invoke Done.\n");
|
||||
}
|
||||
|
||||
|
||||
@@ -136,7 +129,9 @@ bool CTfLiteClass::LoadInputImageBasis(CImageBasis *rs)
|
||||
input_data_ptr++;
|
||||
}
|
||||
|
||||
if (debugdetailtflite) LogFile.WriteToFile("Nach dem Laden in input");
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
LogFile.WriteToFile("Nach dem Laden in input");
|
||||
#endif
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -159,7 +154,9 @@ void CTfLiteClass::MakeAllocate()
|
||||
void CTfLiteClass::GetInputTensorSize(){
|
||||
float *zw = this->input;
|
||||
int test = sizeof(zw);
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
printf("Input Tensor Dimension: %d\n", test);
|
||||
#endif
|
||||
}
|
||||
|
||||
long CTfLiteClass::GetFileSize(std::string filename)
|
||||
@@ -178,7 +175,9 @@ unsigned char* CTfLiteClass::ReadFileToCharArray(std::string _fn)
|
||||
|
||||
if (size == -1)
|
||||
{
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
printf("\nFile existiert nicht.\n");
|
||||
#endif
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -187,7 +186,9 @@ unsigned char* CTfLiteClass::ReadFileToCharArray(std::string _fn)
|
||||
TickType_t xDelay;
|
||||
while (!result && (anz < 6)) // maximal 5x versuchen (= 5s)
|
||||
{
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
printf("Speicher ist voll - Versuche es erneut: %d.\n", anz);
|
||||
#endif
|
||||
xDelay = 1000 / portTICK_PERIOD_MS;
|
||||
result = (unsigned char*) malloc(size);
|
||||
anz++;
|
||||
@@ -195,7 +196,6 @@ unsigned char* CTfLiteClass::ReadFileToCharArray(std::string _fn)
|
||||
|
||||
|
||||
if(result != NULL) {
|
||||
// printf("\nSpeicher ist reserviert\n");
|
||||
FILE* f = OpenFileAndWait(_fn.c_str(), "rb"); // vorher nur "r"
|
||||
fread(result, 1, size, f);
|
||||
fclose(f);
|
||||
|
||||
@@ -18,6 +18,9 @@
|
||||
|
||||
#include "ClassLogFile.h"
|
||||
|
||||
//#define DEBUG_DETAIL_ON
|
||||
|
||||
|
||||
ClassFlowControll tfliteflow;
|
||||
|
||||
TaskHandle_t xHandleblink_task_doFlow = NULL;
|
||||
@@ -58,18 +61,26 @@ bool isSetupModusActive() {
|
||||
|
||||
void KillTFliteTasks()
|
||||
{
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
printf("Handle: xHandleblink_task_doFlow: %ld\n", (long) xHandleblink_task_doFlow);
|
||||
#endif
|
||||
if (xHandleblink_task_doFlow)
|
||||
{
|
||||
vTaskDelete(xHandleblink_task_doFlow);
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
printf("Killed: xHandleblink_task_doFlow\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
printf("Handle: xHandletask_autodoFlow: %ld\n", (long) xHandletask_autodoFlow);
|
||||
#endif
|
||||
if (xHandletask_autodoFlow)
|
||||
{
|
||||
vTaskDelete(xHandletask_autodoFlow);
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
printf("Killed: xHandletask_autodoFlow\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
}
|
||||
@@ -77,9 +88,13 @@ void KillTFliteTasks()
|
||||
void doInit(void)
|
||||
{
|
||||
string config = "/sdcard/config/config.ini";
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
printf("Start tfliteflow.InitFlow(config);\n");
|
||||
#endif
|
||||
tfliteflow.InitFlow(config);
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
printf("Finished tfliteflow.InitFlow(config);\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -92,13 +107,17 @@ bool doflow(void)
|
||||
tfliteflow.doFlow(zw_time);
|
||||
flowisrunning = false;
|
||||
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
printf("doflow - end %s\n", zw_time.c_str());
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
void blink_task_doFlow(void *pvParameter)
|
||||
{
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
printf("blink_task_doFlow\n");
|
||||
#endif
|
||||
if (!flowisrunning)
|
||||
{
|
||||
flowisrunning = true;
|
||||
@@ -114,8 +133,10 @@ esp_err_t handler_init(httpd_req_t *req)
|
||||
{
|
||||
if (debug_detail_heap) LogFile.WriteHeapInfo("handler_init - Start");
|
||||
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
LogFile.WriteToFile("handler_init");
|
||||
printf("handler_doinit uri:\n"); printf(req->uri); printf("\n");
|
||||
#endif
|
||||
|
||||
char* resp_str = "Init started<br>";
|
||||
httpd_resp_send(req, resp_str, strlen(resp_str));
|
||||
@@ -127,16 +148,20 @@ esp_err_t handler_init(httpd_req_t *req)
|
||||
/* Respond with an empty chunk to signal HTTP response completion */
|
||||
httpd_resp_send_chunk(req, NULL, 0);
|
||||
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
if (debug_detail_heap) LogFile.WriteHeapInfo("handler_init - Done");
|
||||
#endif
|
||||
|
||||
return ESP_OK;
|
||||
};
|
||||
|
||||
esp_err_t handler_doflow(httpd_req_t *req)
|
||||
{
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
if (debug_detail_heap) LogFile.WriteHeapInfo("handler_doflow - Start");
|
||||
|
||||
LogFile.WriteToFile("handler_doflow");
|
||||
#endif
|
||||
|
||||
char* resp_str;
|
||||
|
||||
printf("handler_doFlow uri: "); printf(req->uri); printf("\n");
|
||||
@@ -155,7 +180,10 @@ esp_err_t handler_doflow(httpd_req_t *req)
|
||||
httpd_resp_send(req, resp_str, strlen(resp_str));
|
||||
/* Respond with an empty chunk to signal HTTP response completion */
|
||||
httpd_resp_send_chunk(req, NULL, 0);
|
||||
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
if (debug_detail_heap) LogFile.WriteHeapInfo("handler_doflow - Done");
|
||||
#endif
|
||||
|
||||
return ESP_OK;
|
||||
};
|
||||
@@ -165,9 +193,11 @@ esp_err_t handler_doflow(httpd_req_t *req)
|
||||
|
||||
esp_err_t handler_wasserzaehler(httpd_req_t *req)
|
||||
{
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
if (debug_detail_heap) LogFile.WriteHeapInfo("handler_wasserzaehler - Start");
|
||||
|
||||
LogFile.WriteToFile("handler_wasserzaehler");
|
||||
#endif
|
||||
|
||||
bool _rawValue = false;
|
||||
bool _noerror = false;
|
||||
string zw;
|
||||
@@ -182,12 +212,16 @@ esp_err_t handler_wasserzaehler(httpd_req_t *req)
|
||||
// printf("Query: "); printf(_query); printf("\n");
|
||||
if (httpd_query_key_value(_query, "rawvalue", _size, 10) == ESP_OK)
|
||||
{
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
printf("rawvalue is found"); printf(_size); printf("\n");
|
||||
#endif
|
||||
_rawValue = true;
|
||||
}
|
||||
if (httpd_query_key_value(_query, "noerror", _size, 10) == ESP_OK)
|
||||
{
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
printf("noerror is found"); printf(_size); printf("\n");
|
||||
#endif
|
||||
_noerror = true;
|
||||
}
|
||||
}
|
||||
@@ -248,16 +282,19 @@ esp_err_t handler_wasserzaehler(httpd_req_t *req)
|
||||
/* Respond with an empty chunk to signal HTTP response completion */
|
||||
httpd_resp_sendstr_chunk(req, NULL);
|
||||
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
if (debug_detail_heap) LogFile.WriteHeapInfo("handler_wasserzaehler - Done");
|
||||
|
||||
#endif
|
||||
return ESP_OK;
|
||||
};
|
||||
|
||||
|
||||
esp_err_t handler_editflow(httpd_req_t *req)
|
||||
{
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
if (debug_detail_heap) LogFile.WriteHeapInfo("handler_editflow - Start");
|
||||
LogFile.WriteToFile("handler_editflow");
|
||||
#endif
|
||||
|
||||
printf("handler_editflow uri: "); printf(req->uri); printf("\n");
|
||||
|
||||
@@ -269,7 +306,9 @@ esp_err_t handler_editflow(httpd_req_t *req)
|
||||
{
|
||||
if (httpd_query_key_value(_query, "task", _valuechar, 30) == ESP_OK)
|
||||
{
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
printf("task is found: %s\n", _valuechar);
|
||||
#endif
|
||||
_task = string(_valuechar);
|
||||
}
|
||||
}
|
||||
@@ -280,11 +319,13 @@ esp_err_t handler_editflow(httpd_req_t *req)
|
||||
|
||||
httpd_query_key_value(_query, "in", _valuechar, 30);
|
||||
in = string(_valuechar);
|
||||
printf("in: "); printf(in.c_str()); printf("\n");
|
||||
|
||||
httpd_query_key_value(_query, "out", _valuechar, 30);
|
||||
out = string(_valuechar);
|
||||
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
printf("in: "); printf(in.c_str()); printf("\n");
|
||||
printf("out: "); printf(out.c_str()); printf("\n");
|
||||
#endif
|
||||
|
||||
in = "/sdcard" + in;
|
||||
out = "/sdcard" + out;
|
||||
@@ -303,31 +344,34 @@ esp_err_t handler_editflow(httpd_req_t *req)
|
||||
|
||||
httpd_query_key_value(_query, "in", _valuechar, 30);
|
||||
in = string(_valuechar);
|
||||
printf("in: "); printf(in.c_str()); printf("\n");
|
||||
|
||||
httpd_query_key_value(_query, "out", _valuechar, 30);
|
||||
out = string(_valuechar);
|
||||
printf("out: "); printf(out.c_str()); printf("\n");
|
||||
|
||||
httpd_query_key_value(_query, "x", _valuechar, 30);
|
||||
zw = string(_valuechar);
|
||||
x = stoi(zw);
|
||||
printf("x: "); printf(zw.c_str()); printf("\n");
|
||||
|
||||
httpd_query_key_value(_query, "y", _valuechar, 30);
|
||||
zw = string(_valuechar);
|
||||
y = stoi(zw);
|
||||
printf("y: "); printf(zw.c_str()); printf("\n");
|
||||
|
||||
httpd_query_key_value(_query, "dx", _valuechar, 30);
|
||||
zw = string(_valuechar);
|
||||
dx = stoi(zw);
|
||||
printf("dx: "); printf(zw.c_str()); printf("\n");
|
||||
|
||||
httpd_query_key_value(_query, "dy", _valuechar, 30);
|
||||
zw = string(_valuechar);
|
||||
dy = stoi(zw);
|
||||
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
printf("in: "); printf(in.c_str()); printf("\n");
|
||||
printf("out: "); printf(out.c_str()); printf("\n");
|
||||
printf("x: "); printf(zw.c_str()); printf("\n");
|
||||
printf("y: "); printf(zw.c_str()); printf("\n");
|
||||
printf("dx: "); printf(zw.c_str()); printf("\n");
|
||||
printf("dy: "); printf(zw.c_str()); printf("\n");
|
||||
#endif
|
||||
|
||||
if (httpd_query_key_value(_query, "enhance", _valuechar, 10) == ESP_OK)
|
||||
{
|
||||
@@ -413,7 +457,10 @@ esp_err_t handler_editflow(httpd_req_t *req)
|
||||
|
||||
/* Respond with an empty chunk to signal HTTP response completion */
|
||||
httpd_resp_sendstr_chunk(req, NULL);
|
||||
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
if (debug_detail_heap) LogFile.WriteHeapInfo("handler_editflow - Done");
|
||||
#endif
|
||||
|
||||
return ESP_OK;
|
||||
};
|
||||
@@ -421,9 +468,11 @@ esp_err_t handler_editflow(httpd_req_t *req)
|
||||
|
||||
esp_err_t handler_prevalue(httpd_req_t *req)
|
||||
{
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
if (debug_detail_heap) LogFile.WriteHeapInfo("handler_prevalue - Start");
|
||||
|
||||
LogFile.WriteToFile("handler_prevalue");
|
||||
#endif
|
||||
|
||||
const char* resp_str;
|
||||
string zw;
|
||||
|
||||
@@ -437,7 +486,9 @@ esp_err_t handler_prevalue(httpd_req_t *req)
|
||||
// printf("Query: "); printf(_query); printf("\n");
|
||||
if (httpd_query_key_value(_query, "value", _size, 10) == ESP_OK)
|
||||
{
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
printf("Value: "); printf(_size); printf("\n");
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@@ -452,7 +503,9 @@ esp_err_t handler_prevalue(httpd_req_t *req)
|
||||
/* Respond with an empty chunk to signal HTTP response completion */
|
||||
httpd_resp_send_chunk(req, NULL, 0);
|
||||
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
if (debug_detail_heap) LogFile.WriteHeapInfo("handler_prevalue - Start");
|
||||
#endif
|
||||
|
||||
return ESP_OK;
|
||||
};
|
||||
@@ -481,14 +534,20 @@ void task_autodoFlow(void *pvParameter)
|
||||
|
||||
if (flowisrunning)
|
||||
{
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
printf("Autoflow: doFLow laeuft bereits!\n");
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
printf("Autoflow: doFLow wird gestartet\n");
|
||||
#endif
|
||||
flowisrunning = true;
|
||||
doflow();
|
||||
#ifdef DEBUG_DETAIL_ON
|
||||
printf("Remove older log files\n");
|
||||
#endif
|
||||
LogFile.RemoveOld();
|
||||
}
|
||||
|
||||
@@ -548,5 +607,4 @@ void register_server_tflite_uri(httpd_handle_t server)
|
||||
camuri.handler = handler_wasserzaehler;
|
||||
camuri.user_ctx = (void*) "Wasserzaehler";
|
||||
httpd_register_uri_handler(server, &camuri);
|
||||
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
#include "ClassControllCamera.h"
|
||||
#include "server_main.h"
|
||||
#include "server_camera.h"
|
||||
#include "server_GPIO.h"
|
||||
|
||||
static const char *TAGMAIN = "connect_wlan_main";
|
||||
|
||||
@@ -143,6 +144,7 @@ extern "C" void app_main(void)
|
||||
register_server_tflite_uri(server);
|
||||
register_server_file_uri(server, "/sdcard");
|
||||
register_server_ota_sdcard_uri(server);
|
||||
register_server_GPIO_uri(server);
|
||||
register_server_main_uri(server, "/sdcard");
|
||||
|
||||
TFliteDoAutoStart();
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const char* GIT_REV="becb886";
|
||||
const char* GIT_REV="ae11698";
|
||||
const char* GIT_TAG="";
|
||||
const char* GIT_BRANCH="rolling";
|
||||
const char* BUILD_TIME="2020-12-30 10:10";
|
||||
const char* BUILD_TIME="2020-12-31 11:13";
|
||||
@@ -39,6 +39,7 @@ lib_deps =
|
||||
jomjol_time_sntp
|
||||
jomjol_logfile
|
||||
jomjol_mqtt
|
||||
jomjol_controlGPIO
|
||||
|
||||
monitor_speed = 115200
|
||||
|
||||
|
||||
@@ -173,7 +173,95 @@ CONFIG_BTDM_BLE_SLEEP_CLOCK_ACCURACY_INDEX_EFF=1
|
||||
CONFIG_BT_RESERVE_DRAM=0
|
||||
# end of Bluetooth
|
||||
|
||||
# CONFIG_BLE_MESH is not set
|
||||
CONFIG_BLE_MESH=y
|
||||
CONFIG_BLE_MESH_HCI_5_0=y
|
||||
# CONFIG_BLE_MESH_ALLOC_FROM_PSRAM_FIRST is not set
|
||||
# CONFIG_BLE_MESH_FAST_PROV is not set
|
||||
# CONFIG_BLE_MESH_NODE is not set
|
||||
# CONFIG_BLE_MESH_PROVISIONER is not set
|
||||
CONFIG_BLE_MESH_PROV=y
|
||||
CONFIG_BLE_MESH_PB_ADV=y
|
||||
# CONFIG_BLE_MESH_PB_GATT is not set
|
||||
CONFIG_BLE_MESH_PROXY=y
|
||||
# CONFIG_BLE_MESH_GATT_PROXY_CLIENT is not set
|
||||
CONFIG_BLE_MESH_NET_BUF_POOL_USAGE=y
|
||||
# CONFIG_BLE_MESH_SETTINGS is not set
|
||||
CONFIG_BLE_MESH_SUBNET_COUNT=3
|
||||
CONFIG_BLE_MESH_APP_KEY_COUNT=3
|
||||
CONFIG_BLE_MESH_MODEL_KEY_COUNT=3
|
||||
CONFIG_BLE_MESH_MODEL_GROUP_COUNT=3
|
||||
CONFIG_BLE_MESH_LABEL_COUNT=3
|
||||
CONFIG_BLE_MESH_CRPL=10
|
||||
CONFIG_BLE_MESH_MSG_CACHE_SIZE=10
|
||||
CONFIG_BLE_MESH_ADV_BUF_COUNT=60
|
||||
# CONFIG_BLE_MESH_SUPPORT_BLE_ADV is not set
|
||||
CONFIG_BLE_MESH_IVU_DIVIDER=4
|
||||
CONFIG_BLE_MESH_TX_SEG_MSG_COUNT=1
|
||||
CONFIG_BLE_MESH_RX_SEG_MSG_COUNT=1
|
||||
CONFIG_BLE_MESH_RX_SDU_MAX=384
|
||||
CONFIG_BLE_MESH_TX_SEG_MAX=32
|
||||
# CONFIG_BLE_MESH_FRIEND is not set
|
||||
# CONFIG_BLE_MESH_NO_LOG is not set
|
||||
|
||||
#
|
||||
# BLE Mesh STACK DEBUG LOG LEVEL
|
||||
#
|
||||
# CONFIG_BLE_MESH_TRACE_LEVEL_NONE is not set
|
||||
# CONFIG_BLE_MESH_TRACE_LEVEL_ERROR is not set
|
||||
CONFIG_BLE_MESH_TRACE_LEVEL_WARNING=y
|
||||
# CONFIG_BLE_MESH_TRACE_LEVEL_INFO is not set
|
||||
# CONFIG_BLE_MESH_TRACE_LEVEL_DEBUG is not set
|
||||
# CONFIG_BLE_MESH_TRACE_LEVEL_VERBOSE is not set
|
||||
CONFIG_BLE_MESH_STACK_TRACE_LEVEL=2
|
||||
# end of BLE Mesh STACK DEBUG LOG LEVEL
|
||||
|
||||
#
|
||||
# BLE Mesh NET BUF DEBUG LOG LEVEL
|
||||
#
|
||||
# CONFIG_BLE_MESH_NET_BUF_TRACE_LEVEL_NONE is not set
|
||||
# CONFIG_BLE_MESH_NET_BUF_TRACE_LEVEL_ERROR is not set
|
||||
CONFIG_BLE_MESH_NET_BUF_TRACE_LEVEL_WARNING=y
|
||||
# CONFIG_BLE_MESH_NET_BUF_TRACE_LEVEL_INFO is not set
|
||||
# CONFIG_BLE_MESH_NET_BUF_TRACE_LEVEL_DEBUG is not set
|
||||
# CONFIG_BLE_MESH_NET_BUF_TRACE_LEVEL_VERBOSE is not set
|
||||
CONFIG_BLE_MESH_NET_BUF_TRACE_LEVEL=2
|
||||
# end of BLE Mesh NET BUF DEBUG LOG LEVEL
|
||||
|
||||
CONFIG_BLE_MESH_CLIENT_MSG_TIMEOUT=4000
|
||||
|
||||
#
|
||||
# Support for BLE Mesh Client Models
|
||||
#
|
||||
# CONFIG_BLE_MESH_CFG_CLI is not set
|
||||
# CONFIG_BLE_MESH_HEALTH_CLI is not set
|
||||
# CONFIG_BLE_MESH_GENERIC_ONOFF_CLI is not set
|
||||
# CONFIG_BLE_MESH_GENERIC_LEVEL_CLI is not set
|
||||
# CONFIG_BLE_MESH_GENERIC_DEF_TRANS_TIME_CLI is not set
|
||||
# CONFIG_BLE_MESH_GENERIC_POWER_ONOFF_CLI is not set
|
||||
# CONFIG_BLE_MESH_GENERIC_POWER_LEVEL_CLI is not set
|
||||
# CONFIG_BLE_MESH_GENERIC_BATTERY_CLI is not set
|
||||
# CONFIG_BLE_MESH_GENERIC_LOCATION_CLI is not set
|
||||
# CONFIG_BLE_MESH_GENERIC_PROPERTY_CLI is not set
|
||||
# CONFIG_BLE_MESH_SENSOR_CLI is not set
|
||||
# CONFIG_BLE_MESH_TIME_CLI is not set
|
||||
# CONFIG_BLE_MESH_SCENE_CLI is not set
|
||||
# CONFIG_BLE_MESH_SCHEDULER_CLI is not set
|
||||
# CONFIG_BLE_MESH_LIGHT_LIGHTNESS_CLI is not set
|
||||
# CONFIG_BLE_MESH_LIGHT_CTL_CLI is not set
|
||||
# CONFIG_BLE_MESH_LIGHT_HSL_CLI is not set
|
||||
# CONFIG_BLE_MESH_LIGHT_XYL_CLI is not set
|
||||
# CONFIG_BLE_MESH_LIGHT_LC_CLI is not set
|
||||
# end of Support for BLE Mesh Client Models
|
||||
|
||||
# CONFIG_BLE_MESH_IV_UPDATE_TEST is not set
|
||||
|
||||
#
|
||||
# BLE Mesh specific test option
|
||||
#
|
||||
# CONFIG_BLE_MESH_SELF_TEST is not set
|
||||
# CONFIG_BLE_MESH_SHELL is not set
|
||||
# CONFIG_BLE_MESH_DEBUG is not set
|
||||
# end of BLE Mesh specific test option
|
||||
|
||||
#
|
||||
# CoAP Configuration
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const char* GIT_REV="becb886";
|
||||
const char* GIT_REV="ae11698";
|
||||
const char* GIT_TAG="";
|
||||
const char* GIT_BRANCH="rolling";
|
||||
const char* BUILD_TIME="2020-12-30 10:10";
|
||||
const char* BUILD_TIME="2020-12-31 11:13";
|
||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user