✨ Adds support for esp32 P4
This commit is contained in:
+22
-13
@@ -1,3 +1,24 @@
|
||||
set(COMPONENT_REQUIRES
|
||||
driver
|
||||
esp_http_server
|
||||
nvs_flash
|
||||
esp_wifi
|
||||
esp_event
|
||||
esp_netif
|
||||
mdns
|
||||
esp_timer
|
||||
esp_psram
|
||||
spi_flash
|
||||
littlefs
|
||||
esp-dsp
|
||||
)
|
||||
|
||||
if(IDF_TARGET STREQUAL "esp32p4")
|
||||
list(APPEND COMPONENT_REQUIRES esp_wifi_remote esp_hosted)
|
||||
else()
|
||||
list(APPEND COMPONENT_REQUIRES esp32-camera)
|
||||
endif()
|
||||
|
||||
idf_component_register(
|
||||
SRC_DIRS
|
||||
"."
|
||||
@@ -10,17 +31,5 @@ idf_component_register(
|
||||
"../include"
|
||||
"../../submodules/nanopb"
|
||||
REQUIRES
|
||||
driver
|
||||
esp_http_server
|
||||
nvs_flash
|
||||
esp_wifi
|
||||
esp_event
|
||||
esp_netif
|
||||
mdns
|
||||
esp_timer
|
||||
esp_psram
|
||||
spi_flash
|
||||
littlefs
|
||||
esp32-camera
|
||||
esp-dsp
|
||||
${COMPONENT_REQUIRES}
|
||||
)
|
||||
|
||||
@@ -16,3 +16,16 @@ dependencies:
|
||||
|
||||
espressif/esp32-camera:
|
||||
version: "^2.0.0"
|
||||
rules:
|
||||
- if: "idf_version >=5.0.0"
|
||||
- if: "target not in [esp32p4]"
|
||||
|
||||
espressif/esp_wifi_remote:
|
||||
version: ">=0.3.0"
|
||||
rules:
|
||||
- if: "target in [esp32p4]"
|
||||
|
||||
espressif/esp_hosted:
|
||||
version: ">=0.0.6"
|
||||
rules:
|
||||
- if: "target in [esp32p4]"
|
||||
@@ -21,6 +21,10 @@
|
||||
#include <mdns_service.h>
|
||||
#include <system_service.h>
|
||||
|
||||
#if CONFIG_IDF_TARGET_ESP32P4
|
||||
#include <esp_hosted.h>
|
||||
#endif
|
||||
|
||||
#include <www_mount.hpp>
|
||||
|
||||
Websocket wsSocket {server, "/api/ws"};
|
||||
@@ -275,6 +279,21 @@ void IRAM_ATTR SpotControlLoopEntry(void *) {
|
||||
|
||||
void IRAM_ATTR serviceLoopEntry(void *) {
|
||||
ESP_LOGI("main", "Service task starting");
|
||||
#if CONFIG_IDF_TARGET_ESP32P4
|
||||
ESP_LOGI("main", "Initializing ESP-Hosted for C6 coprocessor WiFi...");
|
||||
int ret = esp_hosted_init();
|
||||
if (ret != 0) {
|
||||
ESP_LOGE("main", "ESP-Hosted init failed: %d", ret);
|
||||
} else {
|
||||
ESP_LOGI("main", "ESP-Hosted initialized, connecting to C6...");
|
||||
ret = esp_hosted_connect_to_slave();
|
||||
if (ret != 0) {
|
||||
ESP_LOGW("main", "ESP-Hosted connect failed: %d - WiFi may not work", ret);
|
||||
} else {
|
||||
ESP_LOGI("main", "ESP-Hosted link established with C6");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
WiFi.init();
|
||||
wifiService.begin();
|
||||
@@ -291,6 +310,7 @@ void IRAM_ATTR serviceLoopEntry(void *) {
|
||||
setupEventSocket();
|
||||
|
||||
ESP_LOGI("main", "Service task started");
|
||||
|
||||
for (;;) {
|
||||
wifiService.loop();
|
||||
apService.loop();
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
namespace Camera {
|
||||
|
||||
static const char *const TAG = "CameraService";
|
||||
#if USE_CAMERA && !CONFIG_IDF_TARGET_ESP32P4
|
||||
|
||||
static constexpr const char *_STREAM_CONTENT_TYPE = "multipart/x-mixed-replace;boundary=" PART_BOUNDARY;
|
||||
static constexpr const char *_STREAM_BOUNDARY = "\r\n--" PART_BOUNDARY "\r\n";
|
||||
@@ -35,9 +36,8 @@ CameraService::CameraService()
|
||||
: protoEndpoint(CameraSettings_read, CameraSettings_update, this,
|
||||
API_REQUEST_EXTRACTOR(camera_settings, api_CameraSettings),
|
||||
API_RESPONSE_ASSIGNER(camera_settings, api_CameraSettings)),
|
||||
_persistence(CameraSettings_read, CameraSettings_update, this,
|
||||
CAMERA_SETTINGS_FILE, api_CameraSettings_fields, api_CameraSettings_size,
|
||||
CameraSettings_defaults()) {
|
||||
_persistence(CameraSettings_read, CameraSettings_update, this, CAMERA_SETTINGS_FILE, api_CameraSettings_fields,
|
||||
api_CameraSettings_size, CameraSettings_defaults()) {
|
||||
addUpdateHandler([&](const std::string &originId) { updateCamera(); }, false);
|
||||
}
|
||||
|
||||
@@ -46,7 +46,6 @@ esp_err_t CameraService::begin() {
|
||||
camera_config_t camera_config;
|
||||
camera_config.ledc_channel = LEDC_CHANNEL_0;
|
||||
camera_config.ledc_timer = LEDC_TIMER_0;
|
||||
#if FT_ENABLED(USE_CAMERA)
|
||||
camera_config.pin_d0 = Y2_GPIO_NUM;
|
||||
camera_config.pin_d1 = Y3_GPIO_NUM;
|
||||
camera_config.pin_d2 = Y4_GPIO_NUM;
|
||||
@@ -63,7 +62,6 @@ esp_err_t CameraService::begin() {
|
||||
camera_config.pin_sccb_scl = SIOC_GPIO_NUM;
|
||||
camera_config.pin_pwdn = PWDN_GPIO_NUM;
|
||||
camera_config.pin_reset = RESET_GPIO_NUM;
|
||||
#endif
|
||||
camera_config.xclk_freq_hz = 20000000;
|
||||
camera_config.pixel_format = PIXFORMAT_JPEG;
|
||||
|
||||
@@ -181,4 +179,21 @@ void CameraService::updateCamera() {
|
||||
safe_sensor_return();
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
camera_fb_t *safe_camera_fb_get() { return nullptr; }
|
||||
sensor_t *safe_sensor_get() { return nullptr; }
|
||||
void safe_sensor_return() {}
|
||||
|
||||
CameraService::CameraService() {}
|
||||
esp_err_t CameraService::begin() { return ESP_ERR_NOT_SUPPORTED; }
|
||||
esp_err_t CameraService::cameraStill(httpd_req_t *request) {
|
||||
return WebServer::sendError(request, 501, "Camera not supported on this platform");
|
||||
}
|
||||
esp_err_t CameraService::cameraStream(httpd_req_t *request) {
|
||||
return WebServer::sendError(request, 501, "Camera not supported on this platform");
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
} // namespace Camera
|
||||
|
||||
@@ -8,7 +8,8 @@
|
||||
#include <esp_sleep.h>
|
||||
#include <soc/soc.h>
|
||||
|
||||
#if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6
|
||||
#if CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32C3 || \
|
||||
CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32P4
|
||||
#include <driver/temperature_sensor.h>
|
||||
|
||||
static float temperatureRead() {
|
||||
@@ -100,7 +101,7 @@ void sleep() {
|
||||
|
||||
uint64_t bitmask = (uint64_t)1 << (WAKEUP_PIN_NUMBER);
|
||||
|
||||
#ifdef CONFIG_IDF_TARGET_ESP32C3
|
||||
#if CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32P4
|
||||
esp_deep_sleep_enable_gpio_wakeup(bitmask, (esp_deepsleep_gpio_wake_up_mode_t)WAKEUP_SIGNAL);
|
||||
#else
|
||||
esp_sleep_enable_ext1_wakeup(bitmask, (esp_sleep_ext1_wakeup_mode_t)WAKEUP_SIGNAL);
|
||||
@@ -124,6 +125,7 @@ static const char *getChipModel() {
|
||||
case CHIP_ESP32C2: return "ESP32-C2";
|
||||
case CHIP_ESP32C6: return "ESP32-C6";
|
||||
case CHIP_ESP32H2: return "ESP32-H2";
|
||||
case CHIP_ESP32P4: return "ESP32-P4";
|
||||
default: return "Unknown";
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user