From e06acd317e08f89d6880d524bfef04400c106f5e Mon Sep 17 00:00:00 2001 From: tyeth Date: Thu, 16 Jan 2025 19:14:37 +0000 Subject: [PATCH 1/6] Add espressif_esp32-c6-devkitm-1 --- platformio.ini | 5 +++-- src/Wippersnapper_Boards.h | 6 ++++++ src/provisioning/littlefs/WipperSnapper_LittleFS.cpp | 3 ++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/platformio.ini b/platformio.ini index f6b7f0e10..0382d0bf1 100644 --- a/platformio.ini +++ b/platformio.ini @@ -94,7 +94,7 @@ lib_deps = ; Common build environment for ESP32 platform [common:esp32] -platform = https://github.com/pioarduino/platform-espressif32/releases/download/51.03.07/platform-espressif32.zip +platform = https://github.com/pioarduino/platform-espressif32/releases/download/53.03.11/platform-espressif32.zip ; This is needed for occasional new features and bug fixes ; platform = https://github.com/pioarduino/platform-espressif32#develop lib_ignore = WiFiNINA, WiFi101, OneWire @@ -175,9 +175,10 @@ board_build.partitions = min_spiffs.csv extends = common:esp32 board = esp32-c6-devkitm-1 build_type = debug +debug_tool = esp-builtin +debug_init_break = tbreak ws_uart_drv_pm25aqi build_flags = -DARDUINO_ESPRESSIF_ESP32C6_DEVKITM_1 - -DARDUINO_ADAFRUIT_FEATHER_ESP32C6 -DNDEBUG=1 -DDEBUG=1 -DESP_LOG_LEVEL=5 diff --git a/src/Wippersnapper_Boards.h b/src/Wippersnapper_Boards.h index f70c7dbe3..bbb6f5967 100644 --- a/src/Wippersnapper_Boards.h +++ b/src/Wippersnapper_Boards.h @@ -163,6 +163,12 @@ #define USE_STATUS_NEOPIXEL #define STATUS_NEOPIXEL_PIN PIN_NEOPIXEL #define STATUS_NEOPIXEL_NUM 1 +#elif defined(ARDUINO_ESPRESSIF_ESP32C6_DEVKITM_1) +#define BOARD_ID "feather-esp32c6" ///< TODO: add board def +#define USE_LITTLEFS +#define USE_STATUS_NEOPIXEL +#define STATUS_NEOPIXEL_PIN 8 +#define STATUS_NEOPIXEL_NUM 1 #elif defined(ARDUINO_ADAFRUIT_FEATHER_ESP32_V2) #define BOARD_ID "feather-esp32-v2" #define USE_LITTLEFS diff --git a/src/provisioning/littlefs/WipperSnapper_LittleFS.cpp b/src/provisioning/littlefs/WipperSnapper_LittleFS.cpp index f564ef93f..464338a6e 100644 --- a/src/provisioning/littlefs/WipperSnapper_LittleFS.cpp +++ b/src/provisioning/littlefs/WipperSnapper_LittleFS.cpp @@ -18,7 +18,8 @@ defined(ARDUINO_ADAFRUIT_FEATHER_ESP32_V2) || \ defined(ARDUINO_ADAFRUIT_QTPY_ESP32_PICO) || \ defined(ARDUINO_ADAFRUIT_QTPY_ESP32C3) || \ - defined(ARDUINO_ADAFRUIT_FEATHER_ESP32C6) + defined(ARDUINO_ADAFRUIT_FEATHER_ESP32C6) || \ + defined(ARDUINO_ESPRESSIF_ESP32C6_DEVKITM_1) #include "WipperSnapper_LittleFS.h" /**************************************************************************/ From e57e541f81b65cb99c61cc74d01e7e4cef0cb6e6 Mon Sep 17 00:00:00 2001 From: tyeth Date: Thu, 16 Jan 2025 20:59:17 +0000 Subject: [PATCH 2/6] Fix uint8_t in haltError (was whole seconds now ms) --- src/Wippersnapper.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Wippersnapper.cpp b/src/Wippersnapper.cpp index 71c525a77..a675cb417 100644 --- a/src/Wippersnapper.cpp +++ b/src/Wippersnapper.cpp @@ -2504,9 +2504,9 @@ void Wippersnapper::runNetFSM() { void Wippersnapper::haltError(String error, ws_led_status_t ledStatusColor, uint8_t seconds_until_reboot) { #ifdef ARDUINO_ARCH_ESP8266 - uint8_t wdt_timeout_ms = 3200; + uint16_t wdt_timeout_ms = 3200; #else - uint8_t wdt_timeout_ms = 5000; + uint16_t wdt_timeout_ms = 5000; #endif int seconds_until_wdt_enable = seconds_until_reboot - (int)(wdt_timeout_ms / 1000); From cd4b358f4111d3b1ab507f35d653bf937c53f820 Mon Sep 17 00:00:00 2001 From: tyeth Date: Thu, 16 Jan 2025 20:59:42 +0000 Subject: [PATCH 3/6] Remove feedWDT from WS_DELAY_WITH_WDT --- src/Wippersnapper.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Wippersnapper.h b/src/Wippersnapper.h index 8727cb715..e58353b5b 100644 --- a/src/Wippersnapper.h +++ b/src/Wippersnapper.h @@ -65,7 +65,6 @@ while (millis() - start < timeout) { \ delay(10); \ yield(); \ - feedWDT(); \ if (millis() < start) { \ start = millis(); /* if rollover */ \ } \ From bab3c6578ea5fb3df75959addf2818c14f3fbfad Mon Sep 17 00:00:00 2001 From: tyeth Date: Thu, 16 Jan 2025 21:00:15 +0000 Subject: [PATCH 4/6] Clean up multiple ifdef warnings --- src/network_interfaces/Wippersnapper_ESP32.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/network_interfaces/Wippersnapper_ESP32.h b/src/network_interfaces/Wippersnapper_ESP32.h index 5e1a936c6..81c87995c 100644 --- a/src/network_interfaces/Wippersnapper_ESP32.h +++ b/src/network_interfaces/Wippersnapper_ESP32.h @@ -106,10 +106,11 @@ class Wippersnapper_ESP32 : public Wippersnapper { // For boards with a "3D Antenna", we need to reduce the TX power // to prevent flaky operation. // NOTE: This is a known issue with the QT Py series of boards. -#ifdef ARDUINO_ADAFRUIT_QTPY_ESP32S2 || \ - ARDUINO_ADAFRUIT_QTPY_ESP32S3_NOPSRAM || \ - ARDUINO_ADAFRUIT_QTPY_ESP32S3_N4R2 || ARDUINO_ADAFRUIT_QTPY_ESP32C3 || \ - ARDUINO_ADAFRUIT_QTPY_ESP32_PICO +#if defined(ARDUINO_ADAFRUIT_QTPY_ESP32S2) || \ + defined(ARDUINO_ADAFRUIT_QTPY_ESP32S3_NOPSRAM) || \ + defined(ARDUINO_ADAFRUIT_QTPY_ESP32S3_N4R2) || \ + defined(ARDUINO_ADAFRUIT_QTPY_ESP32C3) || \ + defined(ARDUINO_ADAFRUIT_QTPY_ESP32_PICO) WiFi.setTxPower(WIFI_POWER_15dBm); #endif From 0ddb47f2193cd49c83f5c8d73a50d8f2f1e0a519 Mon Sep 17 00:00:00 2001 From: tyeth Date: Thu, 23 Jan 2025 18:26:14 +0000 Subject: [PATCH 5/6] UART PM2.5 retry data read --- platformio.ini | 2 +- src/Wippersnapper.h | 2 +- .../uart/drivers/ws_uart_drv_pm25aqi.h | 64 ++++++++++--------- 3 files changed, 35 insertions(+), 33 deletions(-) diff --git a/platformio.ini b/platformio.ini index 0382d0bf1..478ae2f9e 100644 --- a/platformio.ini +++ b/platformio.ini @@ -220,7 +220,7 @@ extends = common:esp32 board = adafruit_feather_esp32s3 build_flags = -DARDUINO_ADAFRUIT_FEATHER_ESP32S3 -DBOARD_HAS_PSRAM ;set partition to tinyuf2-partitions-4MB.csv as of idf 5.1 -board_build.partitions = tinyuf2-partitions-4MB.csv +board_build.partitions = tinyuf2-partitions-4MB-noota.csv extra_scripts = pre:rename_usb_config.py ; Adafruit Feather ESP32-S3 NO PSRAM diff --git a/src/Wippersnapper.h b/src/Wippersnapper.h index e58353b5b..3527c5302 100644 --- a/src/Wippersnapper.h +++ b/src/Wippersnapper.h @@ -95,7 +95,7 @@ { \ unsigned long startTime = millis(); \ while (millis() - startTime < timeout) { \ - result_type result_var = func(__VA_ARGS__); \ + result_var = func(__VA_ARGS__); \ if (condition(result_var)) { \ break; \ } \ diff --git a/src/components/uart/drivers/ws_uart_drv_pm25aqi.h b/src/components/uart/drivers/ws_uart_drv_pm25aqi.h index 4eb4c0c92..be044c89d 100644 --- a/src/components/uart/drivers/ws_uart_drv_pm25aqi.h +++ b/src/components/uart/drivers/ws_uart_drv_pm25aqi.h @@ -102,35 +102,37 @@ class ws_uart_drv_pm25aqi : public ws_uart_drv { */ /*******************************************************************************/ bool read_data() override { - Serial.println("[UART, PM25] Reading data..."); - // Attempt to read the PM2.5 Sensor - if (!_aqi->read(&_data)) { - Serial.println("[UART, PM25] Data not available."); - delay(500); - return false; + // Attempt to read the PM2.5 Sensor, can be flaky see Adafruit_PM25AQI#14 + bool result = false; + RETRY_FUNCTION_UNTIL_TIMEOUT(_aqi->read, bool, result, + [](bool res) -> bool { return res==true; }, + 500, 100, &_data); + + if (!result) { + WS_DEBUG_PRINTLN("[UART, PM25] Data not available."); + return result; } - Serial.println("[UART, PM25] Read data OK"); - Serial.println(); - Serial.println(F("---------------------------------------")); - Serial.println(F("Concentration Units (standard)")); - Serial.println(F("---------------------------------------")); - Serial.print(F("PM 1.0: ")); - Serial.print(_data.pm10_standard); - Serial.print(F("\t\tPM 2.5: ")); - Serial.print(_data.pm25_standard); - Serial.print(F("\t\tPM 10: ")); - Serial.println(_data.pm100_standard); - Serial.println(F("Concentration Units (environmental)")); - Serial.println(F("---------------------------------------")); - Serial.print(F("PM 1.0: ")); - Serial.print(_data.pm10_env); - Serial.print(F("\t\tPM 2.5: ")); - Serial.print(_data.pm25_env); - Serial.print(F("\t\tPM 10: ")); - Serial.println(_data.pm100_env); - Serial.println(F("---------------------------------------")); - - return true; + WS_DEBUG_PRINTLN("[UART, PM25] Read data OK"); + WS_DEBUG_PRINTLN(); + WS_DEBUG_PRINTLN(F("---------------------------------------")); + WS_DEBUG_PRINTLN(F("Concentration Units (standard)")); + WS_DEBUG_PRINTLN(F("---------------------------------------")); + WS_DEBUG_PRINT(F("PM 1.0: ")); + WS_DEBUG_PRINT(_data.pm10_standard); + WS_DEBUG_PRINT(F("\t\tPM 2.5: ")); + WS_DEBUG_PRINT(_data.pm25_standard); + WS_DEBUG_PRINT(F("\t\tPM 10: ")); + WS_DEBUG_PRINTLN(_data.pm100_standard); + WS_DEBUG_PRINTLN(F("Concentration Units (environmental)")); + WS_DEBUG_PRINTLN(F("---------------------------------------")); + WS_DEBUG_PRINT(F("PM 1.0: ")); + WS_DEBUG_PRINT(_data.pm10_env); + WS_DEBUG_PRINT(F("\t\tPM 2.5: ")); + WS_DEBUG_PRINT(_data.pm25_env); + WS_DEBUG_PRINT(F("\t\tPM 10: ")); + WS_DEBUG_PRINTLN(_data.pm100_env); + WS_DEBUG_PRINTLN(F("---------------------------------------")); + return result; } /*******************************************************************************/ @@ -187,7 +189,7 @@ class ws_uart_drv_pm25aqi : public ws_uart_drv { pb_ostream_from_buffer(mqttBuffer, sizeof(mqttBuffer)); if (!ws_pb_encode(&ostream, wippersnapper_signal_v1_UARTResponse_fields, &msgUARTResponse)) { - Serial.println("[ERROR, UART]: Unable to encode device response!"); + WS_DEBUG_PRINTLN("[ERROR, UART]: Unable to encode device response!"); return; } @@ -195,9 +197,9 @@ class ws_uart_drv_pm25aqi : public ws_uart_drv { size_t msgSz; pb_get_encoded_size(&msgSz, wippersnapper_signal_v1_UARTResponse_fields, &msgUARTResponse); - Serial.print("[UART] Publishing event to IO.."); + WS_DEBUG_PRINT("[UART] Publishing event to IO.."); mqttClient->publish(uartTopic, mqttBuffer, msgSz, 1); - Serial.println("Published!"); + WS_DEBUG_PRINTLN("Published!"); setPrvPollTime(millis()); } From 206e37060ec05cfee2605f26559a43f975edc58a Mon Sep 17 00:00:00 2001 From: tyeth Date: Thu, 23 Jan 2025 19:38:42 +0000 Subject: [PATCH 6/6] Clang format UART PM2.5 work --- src/Wippersnapper.h | 2 +- src/components/uart/drivers/ws_uart_drv_pm25aqi.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Wippersnapper.h b/src/Wippersnapper.h index 3527c5302..409cebc0c 100644 --- a/src/Wippersnapper.h +++ b/src/Wippersnapper.h @@ -95,7 +95,7 @@ { \ unsigned long startTime = millis(); \ while (millis() - startTime < timeout) { \ - result_var = func(__VA_ARGS__); \ + result_var = func(__VA_ARGS__); \ if (condition(result_var)) { \ break; \ } \ diff --git a/src/components/uart/drivers/ws_uart_drv_pm25aqi.h b/src/components/uart/drivers/ws_uart_drv_pm25aqi.h index be044c89d..ff7abb8eb 100644 --- a/src/components/uart/drivers/ws_uart_drv_pm25aqi.h +++ b/src/components/uart/drivers/ws_uart_drv_pm25aqi.h @@ -104,9 +104,9 @@ class ws_uart_drv_pm25aqi : public ws_uart_drv { bool read_data() override { // Attempt to read the PM2.5 Sensor, can be flaky see Adafruit_PM25AQI#14 bool result = false; - RETRY_FUNCTION_UNTIL_TIMEOUT(_aqi->read, bool, result, - [](bool res) -> bool { return res==true; }, - 500, 100, &_data); + RETRY_FUNCTION_UNTIL_TIMEOUT( + _aqi->read, bool, result, [](bool res) -> bool { return res == true; }, + 500, 100, &_data); if (!result) { WS_DEBUG_PRINTLN("[UART, PM25] Data not available.");