Browse Source

Arduino Nesso N1: minor updates, placeholder ST7789 implementation

pull/1117/head
Ashley 7 months ago
parent
commit
a42d96acc8
  1. 21
      variants/arduino_nesso_n1/ArduinoNessoN1Board.cpp
  2. 22
      variants/arduino_nesso_n1/ArduinoNessoN1Board.h
  3. 55
      variants/arduino_nesso_n1/expander.cpp
  4. 10
      variants/arduino_nesso_n1/platformio.ini

21
variants/arduino_nesso_n1/ArduinoNessoN1Board.cpp

@ -23,15 +23,14 @@ bool radio_init() {
fallback_clock.begin(); fallback_clock.begin();
rtc_clock.begin(Wire); rtc_clock.begin(Wire);
// pinMode(LCD_BACKLIGHT, OUTPUT); // LCD_BACKLIGHT MESH_DEBUG_PRINTLN("set Nesso N1 pin modes and default states...");
// pinMode(BEEP_PIN, OUTPUT);
MESH_DEBUG_PRINTLN("set Nesso N1 pin modes...");
pinMode(LORA_ENABLE, OUTPUT); // RESET pinMode(LORA_ENABLE, OUTPUT); // RESET
pinMode(LORA_ANTENNA_SWITCH, OUTPUT); // ANTENNA_SWITCH pinMode(LORA_ANTENNA_SWITCH, OUTPUT); // ANTENNA_SWITCH
pinMode(LORA_LNA_ENABLE, OUTPUT); // LNA_ENABLE 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..."); MESH_DEBUG_PRINTLN("Enable LoRa...");
digitalWrite(LORA_ENABLE, LOW); digitalWrite(LORA_ENABLE, LOW);
delay(10); delay(10);
@ -41,11 +40,15 @@ bool radio_init() {
digitalWrite(LORA_ANTENNA_SWITCH, HIGH); // enable antenna switch digitalWrite(LORA_ANTENNA_SWITCH, HIGH); // enable antenna switch
digitalWrite(LORA_LNA_ENABLE, HIGH); // enable LNA digitalWrite(LORA_LNA_ENABLE, HIGH); // enable LNA
// Enable LCD backlight // Configure initial state of further devices on expander
// digitalWrite(LCD_BACKLIGHT, HIGH); 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); // digitalWrite(BEEP_PIN, HIGH);
// delayMicroseconds(1000); delay(2000);
// digitalWrite(LCD_BACKLIGHT, LOW); digitalWrite(LCD_BACKLIGHT, LOW);
// digitalWrite(BEEP_PIN, LOW); // digitalWrite(BEEP_PIN, LOW);
MESH_DEBUG_PRINTLN("radio.std_init() and return..."); MESH_DEBUG_PRINTLN("radio.std_init() and return...");

22
variants/arduino_nesso_n1/ArduinoNessoN1Board.h

@ -4,9 +4,9 @@
#include <helpers/ESP32Board.h> #include <helpers/ESP32Board.h>
#include "pins_arduino.h" #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 { class ArduinoNessoN1Board : public ESP32Board {
private: private:
@ -14,21 +14,25 @@ private:
public: public:
void begin() { void begin() {
ESP32Board::begin(); ESP32Board::begin();
delay(2000);
#ifdef P_LORA_TX_LED #ifdef P_LORA_TX_LED
MESH_DEBUG_PRINTLN("ArduinoNessoN1.begin(): setup TX LED mode");
pinMode(P_LORA_TX_LED, OUTPUT); pinMode(P_LORA_TX_LED, OUTPUT);
digitalWrite(P_LORA_TX_LED, LOW); digitalWrite(P_LORA_TX_LED, HIGH);
#endif #endif
battery.enableCharge();
} }
#ifdef P_LORA_TX_LED #ifdef P_LORA_TX_LED
void onBeforeTransmit() override { void onBeforeTransmit() override {
MESH_DEBUG_PRINTLN("onBeforeTransmit: HIGH LED"); MESH_DEBUG_PRINTLN("onBeforeTransmit: LOW LED for On");
digitalWrite(P_LORA_TX_LED, HIGH); // turn TX LED on digitalWrite(P_LORA_TX_LED, LOW); // turn TX LED on
} }
void onAfterTransmit() override { void onAfterTransmit() override {
MESH_DEBUG_PRINTLN("onBeforeTransmit: LOW LED"); MESH_DEBUG_PRINTLN("onBeforeTransmit: HIGH LED for Off");
digitalWrite(P_LORA_TX_LED, LOW); // turn TX LED off digitalWrite(P_LORA_TX_LED, HIGH); // turn TX LED off
} }
#endif #endif
@ -37,7 +41,7 @@ public:
} }
uint16_t getBattMilliVolts() override { uint16_t getBattMilliVolts() override {
return battery.getMilliVoltage(); // ToDo: Needs work - full battery reports 65v 😅 return battery.getMilliVoltage();
} }
}; };

55
variants/arduino_nesso_n1/expander.cpp

@ -1,27 +1,27 @@
#define TwoWire TwoWireInternal // Based off here https://github.com/espressif/arduino-esp32/blob/d1eb62d7c6dda16c254c374504aa93188d7c386b/variants/arduino_nesso_n1/expander.cpp
#define Wire WireInternal // Should be OK based on this? https://opensource.stackexchange.com/a/6406
#define Wire1 WireInternal1
#include "pins_arduino.h" #include "pins_arduino.h"
#include "../../libraries/Wire/src/Wire.h" #include <helpers/ESP32Board.h>
#include "../../libraries/Wire/src/Wire.cpp" #include <Wire.h>
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 // From https://www.diodes.com/datasheet/download/PI4IOE5V6408.pdf
static void writeRegister(uint8_t address, uint8_t reg, uint8_t value) { static void writeRegister(uint8_t address, uint8_t reg, uint8_t value) {
WireInternal.beginTransmission(address); Wire.beginTransmission(address);
WireInternal.write(reg); Wire.write(reg);
WireInternal.write(value); Wire.write(value);
WireInternal.endTransmission(); Wire.endTransmission();
} }
static uint8_t readRegister(uint8_t address, uint8_t reg) { static uint8_t readRegister(uint8_t address, uint8_t reg) {
WireInternal.beginTransmission(address); Wire.beginTransmission(address);
WireInternal.write(reg); Wire.write(reg);
WireInternal.endTransmission(false); Wire.endTransmission(false);
WireInternal.requestFrom(address, 1); Wire.requestFrom(address, 1);
return WireInternal.read(); return Wire.read();
} }
static void writeBitRegister(uint8_t address, uint8_t reg, uint8_t bit, uint8_t value) { 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) { void pinMode(ExpanderPin pin, uint8_t mode) {
if (!wireInitialized) { if (!wireInitialized) {
WireInternal.begin(SDA, SCL); Wire.begin(SDA, SCL);
wireInitialized = true; wireInitialized = true;
// reset all registers to default state // reset all registers to default state
}
if (!expanderInitialized) {
writeRegister(pin.address, 0x1, 0x1); writeRegister(pin.address, 0x1, 0x1);
// set all pins as high as default state // set all pins as high as default state
writeRegister(pin.address, 0x9, 0xFF); writeRegister(pin.address, 0x9, 0xFF);
@ -50,6 +52,7 @@ void pinMode(ExpanderPin pin, uint8_t mode) {
writeRegister(pin.address, 0x11, 0xFF); writeRegister(pin.address, 0x11, 0xFF);
// all input // all input
writeRegister(pin.address, 0x3, 0); writeRegister(pin.address, 0x3, 0);
expanderInitialized = true;
} }
writeBitRegister(pin.address, 0x3, pin.pin, mode == OUTPUT); writeBitRegister(pin.address, 0x3, pin.pin, mode == OUTPUT);
if (mode == OUTPUT) { if (mode == OUTPUT) {
@ -71,7 +74,7 @@ void pinMode(ExpanderPin pin, uint8_t mode) {
void digitalWrite(ExpanderPin pin, uint8_t val) { void digitalWrite(ExpanderPin pin, uint8_t val) {
if (!wireInitialized) { if (!wireInitialized) {
WireInternal.begin(SDA, SCL); Wire.begin(SDA, SCL);
wireInitialized = true; wireInitialized = true;
} }
writeBitRegister(pin.address, 0x5, pin.pin, val == HIGH); writeBitRegister(pin.address, 0x5, pin.pin, val == HIGH);
@ -79,7 +82,7 @@ void digitalWrite(ExpanderPin pin, uint8_t val) {
int digitalRead(ExpanderPin pin) { int digitalRead(ExpanderPin pin) {
if (!wireInitialized) { if (!wireInitialized) {
WireInternal.begin(SDA, SCL); Wire.begin(SDA, SCL);
wireInitialized = true; wireInitialized = true;
} }
return readBitRegister(pin.address, 0xF, pin.pin); return readBitRegister(pin.address, 0xF, pin.pin);
@ -89,18 +92,25 @@ void NessoBattery::enableCharge() {
// AW32001E - address 0x49 // AW32001E - address 0x49
// set CEB bit low (charge enable) // set CEB bit low (charge enable)
if (!wireInitialized) { if (!wireInitialized) {
WireInternal.begin(SDA, SCL); Wire.begin(SDA, SCL);
wireInitialized = true; 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); writeBitRegister(0x49, 0x1, 3, false);
} }
float NessoBattery::getVoltage() { float NessoBattery::getVoltage() {
// BQ27220 - address 0x55 // BQ27220 - address 0x55
if (!wireInitialized) { if (!wireInitialized) {
WireInternal.begin(SDA, SCL); Wire.begin(SDA, SCL);
wireInitialized = true; wireInitialized = true;
} }
MESH_DEBUG_PRINTLN("NessoBattery::getVoltage()");
uint16_t voltage = (readRegister(0x55, 0x9) << 8) | readRegister(0x55, 0x8); uint16_t voltage = (readRegister(0x55, 0x9) << 8) | readRegister(0x55, 0x8);
return (float)voltage / 1000.0f; return (float)voltage / 1000.0f;
} }
@ -108,9 +118,10 @@ float NessoBattery::getVoltage() {
uint16_t NessoBattery::getMilliVoltage() { uint16_t NessoBattery::getMilliVoltage() {
// BQ27220 - address 0x55 // BQ27220 - address 0x55
if (!wireInitialized) { if (!wireInitialized) {
WireInternal.begin(SDA, SCL); Wire.begin(SDA, SCL);
wireInitialized = true; wireInitialized = true;
} }
MESH_DEBUG_PRINTLN("NessoBattery::getMilliVoltage()");
uint16_t voltage = (readRegister(0x55, 0x9) << 8) | readRegister(0x55, 0x8); uint16_t voltage = (readRegister(0x55, 0x9) << 8) | readRegister(0x55, 0x8);
return voltage; return voltage;
} }
@ -118,7 +129,7 @@ uint16_t NessoBattery::getMilliVoltage() {
uint16_t NessoBattery::getChargeLevel() { uint16_t NessoBattery::getChargeLevel() {
// BQ27220 - address 0x55 // BQ27220 - address 0x55
if (!wireInitialized) { if (!wireInitialized) {
WireInternal.begin(SDA, SCL); Wire.begin(SDA, SCL);
wireInitialized = true; wireInitialized = true;
} }
uint16_t current_capacity = readRegister(0x55, 0x11) << 8 | readRegister(0x55, 0x10); uint16_t current_capacity = readRegister(0x55, 0x11) << 8 | readRegister(0x55, 0x10);

10
variants/arduino_nesso_n1/platformio.ini

@ -35,6 +35,16 @@ build_flags =
; -D UI_SENSORS_PAGE=1 ; ToDo: Figure out UI later ; -D UI_SENSORS_PAGE=1 ; ToDo: Figure out UI later
; -D PIN_USER_BTN=38 ; ToDo: Figure out UI later ; -D PIN_USER_BTN=38 ; ToDo: Figure out UI later
; -D HAS_TOUCH ; 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 -D DISABLE_WIFI_OTA=1
build_src_filter = ${esp32c6_base.build_src_filter} build_src_filter = ${esp32c6_base.build_src_filter}
+<../variants/arduino_nesso_n1> +<../variants/arduino_nesso_n1>

Loading…
Cancel
Save