diff --git a/variants/arduino_nesso_n1/ArduinoNessoN1Board.cpp b/variants/arduino_nesso_n1/ArduinoNessoN1Board.cpp index 122f26403..a31cf636d 100644 --- a/variants/arduino_nesso_n1/ArduinoNessoN1Board.cpp +++ b/variants/arduino_nesso_n1/ArduinoNessoN1Board.cpp @@ -23,15 +23,14 @@ bool radio_init() { fallback_clock.begin(); rtc_clock.begin(Wire); - // pinMode(LCD_BACKLIGHT, OUTPUT); // LCD_BACKLIGHT - // pinMode(BEEP_PIN, OUTPUT); - - MESH_DEBUG_PRINTLN("set Nesso N1 pin modes..."); + MESH_DEBUG_PRINTLN("set Nesso N1 pin modes and default states..."); pinMode(LORA_ENABLE, OUTPUT); // RESET pinMode(LORA_ANTENNA_SWITCH, OUTPUT); // ANTENNA_SWITCH pinMode(LORA_LNA_ENABLE, OUTPUT); // LNA_ENABLE + pinMode(LCD_BACKLIGHT, OUTPUT); + pinMode(BEEP_PIN, OUTPUT); - // Toggle reset via expander + // Toggle LoRa reset via expander MESH_DEBUG_PRINTLN("Enable LoRa..."); digitalWrite(LORA_ENABLE, LOW); delay(10); @@ -41,11 +40,15 @@ bool radio_init() { digitalWrite(LORA_ANTENNA_SWITCH, HIGH); // enable antenna switch digitalWrite(LORA_LNA_ENABLE, HIGH); // enable LNA - // Enable LCD backlight - // digitalWrite(LCD_BACKLIGHT, HIGH); + // Configure initial state of further devices on expander + digitalWrite(LCD_BACKLIGHT, LOW); + digitalWrite(BEEP_PIN, LOW); + + // Toggle LCD backlight to show the device has powered on until we get the screen working + digitalWrite(LCD_BACKLIGHT, HIGH); // digitalWrite(BEEP_PIN, HIGH); - // delayMicroseconds(1000); - // digitalWrite(LCD_BACKLIGHT, LOW); + delay(2000); + digitalWrite(LCD_BACKLIGHT, LOW); // digitalWrite(BEEP_PIN, LOW); MESH_DEBUG_PRINTLN("radio.std_init() and return..."); diff --git a/variants/arduino_nesso_n1/ArduinoNessoN1Board.h b/variants/arduino_nesso_n1/ArduinoNessoN1Board.h index 15e191262..cba9e1525 100644 --- a/variants/arduino_nesso_n1/ArduinoNessoN1Board.h +++ b/variants/arduino_nesso_n1/ArduinoNessoN1Board.h @@ -4,9 +4,9 @@ #include #include "pins_arduino.h" -#define P_LORA_TX_LED LED_BUILTIN // ToDo: doesn't appear to blink on receipt - - +#define P_LORA_TX_LED LED_BUILTIN +// #define PIN_TFT_RST LCD_RESET +// #define PIN_TFT_LEDA_CTL LCD_BACKLIGHT class ArduinoNessoN1Board : public ESP32Board { private: @@ -14,21 +14,25 @@ private: public: void begin() { ESP32Board::begin(); + delay(2000); #ifdef P_LORA_TX_LED + MESH_DEBUG_PRINTLN("ArduinoNessoN1.begin(): setup TX LED mode"); pinMode(P_LORA_TX_LED, OUTPUT); - digitalWrite(P_LORA_TX_LED, LOW); + digitalWrite(P_LORA_TX_LED, HIGH); #endif + + battery.enableCharge(); } #ifdef P_LORA_TX_LED void onBeforeTransmit() override { - MESH_DEBUG_PRINTLN("onBeforeTransmit: HIGH LED"); - digitalWrite(P_LORA_TX_LED, HIGH); // turn TX LED on + MESH_DEBUG_PRINTLN("onBeforeTransmit: LOW LED for On"); + digitalWrite(P_LORA_TX_LED, LOW); // turn TX LED on } void onAfterTransmit() override { - MESH_DEBUG_PRINTLN("onBeforeTransmit: LOW LED"); - digitalWrite(P_LORA_TX_LED, LOW); // turn TX LED off + MESH_DEBUG_PRINTLN("onBeforeTransmit: HIGH LED for Off"); + digitalWrite(P_LORA_TX_LED, HIGH); // turn TX LED off } #endif @@ -37,7 +41,7 @@ public: } uint16_t getBattMilliVolts() override { - return battery.getMilliVoltage(); // ToDo: Needs work - full battery reports 65v 😅 + return battery.getMilliVoltage(); } }; diff --git a/variants/arduino_nesso_n1/expander.cpp b/variants/arduino_nesso_n1/expander.cpp index 6589c1efc..3d058e998 100644 --- a/variants/arduino_nesso_n1/expander.cpp +++ b/variants/arduino_nesso_n1/expander.cpp @@ -1,27 +1,27 @@ -#define TwoWire TwoWireInternal -#define Wire WireInternal -#define Wire1 WireInternal1 +// Based off here https://github.com/espressif/arduino-esp32/blob/d1eb62d7c6dda16c254c374504aa93188d7c386b/variants/arduino_nesso_n1/expander.cpp +// Should be OK based on this? https://opensource.stackexchange.com/a/6406 #include "pins_arduino.h" -#include "../../libraries/Wire/src/Wire.h" -#include "../../libraries/Wire/src/Wire.cpp" +#include +#include -static bool wireInitialized = false; +static bool wireInitialized = true; // initialised in ESP32Board.begin() ; ToDo: Remove all these conditions in future +static bool expanderInitialized = false; // From https://www.diodes.com/datasheet/download/PI4IOE5V6408.pdf static void writeRegister(uint8_t address, uint8_t reg, uint8_t value) { - WireInternal.beginTransmission(address); - WireInternal.write(reg); - WireInternal.write(value); - WireInternal.endTransmission(); + Wire.beginTransmission(address); + Wire.write(reg); + Wire.write(value); + Wire.endTransmission(); } static uint8_t readRegister(uint8_t address, uint8_t reg) { - WireInternal.beginTransmission(address); - WireInternal.write(reg); - WireInternal.endTransmission(false); - WireInternal.requestFrom(address, 1); - return WireInternal.read(); + Wire.beginTransmission(address); + Wire.write(reg); + Wire.endTransmission(false); + Wire.requestFrom(address, 1); + return Wire.read(); } static void writeBitRegister(uint8_t address, uint8_t reg, uint8_t bit, uint8_t value) { @@ -40,9 +40,11 @@ static bool readBitRegister(uint8_t address, uint8_t reg, uint8_t bit) { void pinMode(ExpanderPin pin, uint8_t mode) { if (!wireInitialized) { - WireInternal.begin(SDA, SCL); + Wire.begin(SDA, SCL); wireInitialized = true; // reset all registers to default state + } + if (!expanderInitialized) { writeRegister(pin.address, 0x1, 0x1); // set all pins as high as default state writeRegister(pin.address, 0x9, 0xFF); @@ -50,6 +52,7 @@ void pinMode(ExpanderPin pin, uint8_t mode) { writeRegister(pin.address, 0x11, 0xFF); // all input writeRegister(pin.address, 0x3, 0); + expanderInitialized = true; } writeBitRegister(pin.address, 0x3, pin.pin, mode == OUTPUT); if (mode == OUTPUT) { @@ -71,7 +74,7 @@ void pinMode(ExpanderPin pin, uint8_t mode) { void digitalWrite(ExpanderPin pin, uint8_t val) { if (!wireInitialized) { - WireInternal.begin(SDA, SCL); + Wire.begin(SDA, SCL); wireInitialized = true; } writeBitRegister(pin.address, 0x5, pin.pin, val == HIGH); @@ -79,7 +82,7 @@ void digitalWrite(ExpanderPin pin, uint8_t val) { int digitalRead(ExpanderPin pin) { if (!wireInitialized) { - WireInternal.begin(SDA, SCL); + Wire.begin(SDA, SCL); wireInitialized = true; } return readBitRegister(pin.address, 0xF, pin.pin); @@ -89,18 +92,25 @@ void NessoBattery::enableCharge() { // AW32001E - address 0x49 // set CEB bit low (charge enable) if (!wireInitialized) { - WireInternal.begin(SDA, SCL); + Wire.begin(SDA, SCL); wireInitialized = true; } + + MESH_DEBUG_PRINTLN("NessoBattery::enableCharge()"); + MESH_DEBUG_PRINTLN("NessoBattery::enableCharge(): Current charge level %u %%", NessoBattery::getChargeLevel()); + MESH_DEBUG_PRINTLN("NessoBattery::enableCharge(): Current voltage %f V", NessoBattery::getVoltage()); + MESH_DEBUG_PRINTLN("NessoBattery::enableCharge(): Current voltage %u mV", NessoBattery::getMilliVoltage()); + writeBitRegister(0x49, 0x1, 3, false); } float NessoBattery::getVoltage() { // BQ27220 - address 0x55 if (!wireInitialized) { - WireInternal.begin(SDA, SCL); + Wire.begin(SDA, SCL); wireInitialized = true; } + MESH_DEBUG_PRINTLN("NessoBattery::getVoltage()"); uint16_t voltage = (readRegister(0x55, 0x9) << 8) | readRegister(0x55, 0x8); return (float)voltage / 1000.0f; } @@ -108,9 +118,10 @@ float NessoBattery::getVoltage() { uint16_t NessoBattery::getMilliVoltage() { // BQ27220 - address 0x55 if (!wireInitialized) { - WireInternal.begin(SDA, SCL); + Wire.begin(SDA, SCL); wireInitialized = true; } + MESH_DEBUG_PRINTLN("NessoBattery::getMilliVoltage()"); uint16_t voltage = (readRegister(0x55, 0x9) << 8) | readRegister(0x55, 0x8); return voltage; } @@ -118,7 +129,7 @@ uint16_t NessoBattery::getMilliVoltage() { uint16_t NessoBattery::getChargeLevel() { // BQ27220 - address 0x55 if (!wireInitialized) { - WireInternal.begin(SDA, SCL); + Wire.begin(SDA, SCL); wireInitialized = true; } uint16_t current_capacity = readRegister(0x55, 0x11) << 8 | readRegister(0x55, 0x10); diff --git a/variants/arduino_nesso_n1/platformio.ini b/variants/arduino_nesso_n1/platformio.ini index 45122de6b..e5ec4134d 100644 --- a/variants/arduino_nesso_n1/platformio.ini +++ b/variants/arduino_nesso_n1/platformio.ini @@ -35,6 +35,16 @@ build_flags = ; -D UI_SENSORS_PAGE=1 ; ToDo: Figure out UI later ; -D PIN_USER_BTN=38 ; ToDo: Figure out UI later ; -D HAS_TOUCH ; ToDo: Figure out UI later + ; -D PIN_TFT_SCL=38 + ; -D PIN_TFT_SDA=48 + ; -D PIN_TFT_RST=-1 ; It is defined in ArduinoNessoN1Board.h instead, so that the Expander can be targeted + ; -D PIN_TFT_VDD_CTL=7 ; Seems to be right, but seems ST7789Display or ST7789LCDDisplay are too hard coded for other devices + ; -D PIN_TFT_LEDA_CTL=-1 ; It is defined in ArduinoNessoN1Board.h instead, so that the Expander can be targeted + ; -D PIN_TFT_LEDA_CTL_ACTIVE=HIGH ; Seems to be right, but seems ST7789Display or ST7789LCDDisplay are too hard coded for other devices + ; -D PIN_TFT_CS=17 ; Seems to be right, but seems ST7789Display or ST7789LCDDisplay are too hard coded for other devices + ; -D PIN_TFT_DC=?? ; ToDo: Unsure + ; -D ST7789 ; This is the display driver type (- 1.14" IPS LCD, ST7789P3 driver @ SPI communication, Resolution: 135 × 240 pixels, 262K colors (18-bit)), but seems ST7789Display or ST7789LCDDisplay are too hard coded for other devices + ; -D DISPLAY_CLASS=ST7789Display -D DISABLE_WIFI_OTA=1 build_src_filter = ${esp32c6_base.build_src_filter} +<../variants/arduino_nesso_n1>