Logging and LED initialization sequence

This commit is contained in:
2025-12-01 09:32:16 +01:00
parent 736c0644f2
commit 8b39ff05c9
3 changed files with 102 additions and 30 deletions

View File

@@ -29,8 +29,13 @@
#define RGBLED_R GPIO_NUM_4 // A3 red
#define RGBLED_G GPIO_NUM_13 // A6 green
#define RGBLED_B GPIO_NUM_14 // A7 blue
#define LED_USER GPIO_NUM_48 // internal red user led
#define LED_IR GPIO_NUM_46 // intername rgb led on strapping pins
#define LED_IG GPIO_NUM_0
#define LED_IB GPIO_NUM_45
// CAN bus for NMEA2000 connection
#define CAN_RX GPIO_NUM_18 // D9
#define CAN_TX GPIO_NUM_21 // D10

View File

@@ -27,10 +27,16 @@ extra_scripts =
post:extra_post.py
lib_ldf_mode = chain
monitor_speed = 115200
# monitor_raw = yes
build_flags =
-D PIO_ENV_BUILD=$PIOENV
-DPIO_ENV_BUILD=$PIOENV
-DBOARD_HAS_PSRAM
-DARDUINO_USB_CDC_ON_BOOT=1
-DCORE_DEBUG_LEVEL=4 # Max. possible loglevel: 0=None, 1=Error, 2=Warning, 3=Info, 4=Debug, 5=Verbose
-DCONFIG_LOG_TX_BUF_SIZE=4096
-std=gnu++17
build_unflags =
-std=gnu++11
[env:esp32-s3-nano]
build_type = release # debug | release

View File

@@ -12,6 +12,9 @@
#include "Nmea2kTwai.h"
#include <map>
// Logging
static const char* TAG = "main.cpp";
Preferences preferences; // persistent storage for configuration
class EmbeddedFile;
@@ -60,8 +63,8 @@ bool rgb_g = false;
bool rgb_b = false;
char destination = 'A'; // A | B | C
uint8_t led_brightness = 128; // analog pin: 0 .. 255
uint8_t rgp_brightness = 128;
uint8_t led_brightness = 16; // analog pin: 0 .. 255
uint8_t rgb_brightness = 64;
uint buzzerpower = 50; // TBD make use of this
@@ -119,18 +122,26 @@ void wifi_init_softap()
void setup() {
Serial.begin(115200);
delay(500);
Serial.println("Starting...");
while (!Serial) delay(10);
delay(200);
ESP_LOGI(TAG, "Test logging: %d", 100);
// Arduino ESP32 logging
esp_log_level_set("*", ESP_LOG_INFO);
esp_log_level_set("default", ESP_LOG_INFO);
esp_log_level_set("wifi", ESP_LOG_INFO);
esp_log_level_set("esp_timer", ESP_LOG_INFO);
esp_log_level_set("spi_flash", ESP_LOG_INFO);
esp_log_level_set("arduino", ESP_LOG_INFO);
ESP_LOGI(TAG, "Starting ...");
// N2K basics
nodeid = N2K_DEFAULT_NODEID;
Serial.print("N2K default node id=");
Serial.println(nodeid);
ESP_LOGI(TAG, "N2K default node is %d", nodeid);
preferences.begin("nvs", false);
nodeid = preferences.getInt("LastNodeId", N2K_DEFAULT_NODEID);
preferences.end();
ESP_LOGI(TAG, "N2K node id set to %d from preferences", nodeid);
// Setup webserver
WiFi.persistent(false);
@@ -156,6 +167,18 @@ void setup() {
send_embedded_file(it->first, request);
});
}
// WIP: API
/*
server.on("/api/status", HTTP_GET, [](AsyncWebServerRequest *request){
StaticJsonDocument<100> doc;
doc["temp"] = 22.3;
doc["ip"] = WiFi.localIP().toString();
String out;
serializeJson(doc, out);
request->send(200, "application/json", out);
}); */
// TODO POST vom Client entgegennehmen
server.begin();
// NMEA2000 configuration
@@ -189,6 +212,7 @@ void setup() {
digitalWrite(LED_USER, LOW);
// Buzzer
/*
ledcSetup(LEDC_CHANNEL, LEDC_BASE_FREQ, LEDC_TIMER_8_BIT);
ledcAttachPin(BUZZER, LEDC_CHANNEL);
// Test tone while booting
@@ -198,30 +222,65 @@ void setup() {
delay(750);
ledcWriteTone(BUZZER, 0); // Buzzer off
}
*/
// Startup sequence: test all led and short beep buzzer
// Init onbard RGB LED
// TODO
// inverted mode:
pinMode(LED_IR, OUTPUT);
pinMode(LED_IG, OUTPUT);
pinMode(LED_IB, OUTPUT);
digitalWrite(LED_IR, LOW);
digitalWrite(LED_IG, HIGH);
digitalWrite(LED_IB, HIGH);
delay(500);
digitalWrite(LED_IR, HIGH);
digitalWrite(LED_IG, LOW);
delay(500);
digitalWrite(LED_IG, HIGH);
digitalWrite(LED_IB, LOW);
delay(500);
digitalWrite(LED_IB, HIGH);
// destination leds
pinMode(LED_A, OUTPUT);
pinMode(LED_B, OUTPUT);
pinMode(LED_C, OUTPUT);
//digitalWrite(LED_A, HIGH);
//digitalWrite(LED_B, LOW);
//digitalWrite(LED_C, LOW);
analogWrite(LED_A, 0);
delay(250);
// test every led
analogWrite(LED_A, led_brightness);
analogWrite(LED_B, 0);
analogWrite(LED_C, 0);
delay(500);
analogWrite(LED_A, 0);
analogWrite(LED_B, led_brightness);
delay(500);
analogWrite(LED_B, 0);
analogWrite(LED_C, led_brightness);
delay(500);
analogWrite(LED_C, 0);
// select dst A finally
analogWrite(LED_A, led_brightness);
delay(500);
// enclosure rgb led
pinMode(RGBLED_R, OUTPUT);
pinMode(RGBLED_G, OUTPUT);
pinMode(RGBLED_B, OUTPUT);
// common anode so we need high here to switch off!
digitalWrite(RGBLED_R, HIGH);
digitalWrite(RGBLED_G, HIGH);
digitalWrite(RGBLED_B, HIGH);
analogWrite(RGBLED_R, 255 - rgb_brightness);
analogWrite(RGBLED_G, 255);
analogWrite(RGBLED_B, 255);
delay(500);
analogWrite(RGBLED_R, 255);
analogWrite(RGBLED_G, 255 - rgb_brightness);
delay(500);
analogWrite(RGBLED_G, 255);
analogWrite(RGBLED_B, 255 - rgb_brightness);
delay(500);
analogWrite(RGBLED_B, 255);
// I²C
Serial.print("SHT31_LIB_VERSION: ");
@@ -246,10 +305,10 @@ void loop() {
button = 1;
if (rgb_r) {
rgb_r = false;
digitalWrite(RGBLED_R, HIGH);
analogWrite(RGBLED_R, 255);
} else {
rgb_r = true;
digitalWrite(RGBLED_R, LOW);
analogWrite(RGBLED_R, 255 - rgb_brightness);
}
}
if (digitalRead(KEY_2) == LOW) {
@@ -257,10 +316,10 @@ void loop() {
button += 2;
if (rgb_g) {
rgb_g = false;
digitalWrite(RGBLED_G, HIGH);
analogWrite(RGBLED_G, 255);
} else {
rgb_g = true;
digitalWrite(RGBLED_G, LOW);
analogWrite(RGBLED_G, 255 - rgb_brightness);
}
}
if (digitalRead(KEY_3) == LOW) {
@@ -268,10 +327,10 @@ void loop() {
button += 4;
if (rgb_b) {
rgb_b = false;
digitalWrite(RGBLED_B, HIGH);
analogWrite(RGBLED_B, 255);
} else {
rgb_b = true;
digitalWrite(RGBLED_B, LOW);
analogWrite(RGBLED_B, 255 - rgb_brightness);
}
}
@@ -303,18 +362,20 @@ void loop() {
if (destination == 'A') {
destination = 'B';
digitalWrite(LED_A, LOW);
digitalWrite(LED_B, HIGH);
analogWrite(LED_A, 0);
analogWrite(LED_B, led_brightness);
} else if (destination == 'B') {
destination = 'C';
digitalWrite(LED_B, LOW);
digitalWrite(LED_C, HIGH);
analogWrite(LED_B, 0);
analogWrite(LED_C, led_brightness);
} else {
destination = 'A';
digitalWrite(LED_C, LOW);
digitalWrite(LED_A, HIGH);
analogWrite(LED_C, 0);
analogWrite(LED_A, led_brightness);
}
Serial.print("Destination=");
Serial.println(destination);
/*
digitalWrite(LED_USER, HIGH); // Turn LED on
delay(500); // Keep it on 0.5s