diff --git a/include/main.h b/include/main.h index fb0ea2b..f3097a8 100644 --- a/include/main.h +++ b/include/main.h @@ -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 diff --git a/platformio.ini b/platformio.ini index 697f16e..b79eef9 100644 --- a/platformio.ini +++ b/platformio.ini @@ -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 diff --git a/src/main.cpp b/src/main.cpp index aab48ca..4e0efa8 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -12,6 +12,9 @@ #include "Nmea2kTwai.h" #include +// 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