Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
146 changes: 146 additions & 0 deletions boards.txt
Original file line number Diff line number Diff line change
Expand Up @@ -52955,3 +52955,149 @@ soldered_nula_mini_esp32c6.menu.ZigbeeMode.zczr.build.zigbee_mode=-DZIGBEE_MODE_
soldered_nula_mini_esp32c6.menu.ZigbeeMode.zczr.build.zigbee_libs=-lesp_zb_api.zczr -lzboss_stack.zczr -lzboss_port.native

##############################################################

arduino_nesso_n1.name=Arduino Nesso N1

arduino_nesso_n1.bootloader.tool=esptool_py
arduino_nesso_n1.bootloader.tool.default=esptool_py

arduino_nesso_n1.upload.tool=esptool_py
arduino_nesso_n1.upload.tool.default=esptool_py
arduino_nesso_n1.upload.tool.network=esp_ota

arduino_nesso_n1.upload.maximum_size=1310720
arduino_nesso_n1.upload.maximum_data_size=327680
arduino_nesso_n1.upload.flags=
arduino_nesso_n1.upload.extra_flags=
arduino_nesso_n1.upload.use_1200bps_touch=false
arduino_nesso_n1.upload.wait_for_upload_port=false

arduino_nesso_n1.serial.disableDTR=false
arduino_nesso_n1.serial.disableRTS=false

arduino_nesso_n1.build.tarch=riscv32
arduino_nesso_n1.build.target=esp
arduino_nesso_n1.build.mcu=esp32c6
arduino_nesso_n1.build.core=esp32
arduino_nesso_n1.build.variant=arduino_nesso_n1
arduino_nesso_n1.build.board=ARDUINO_NESSO_N1
arduino_nesso_n1.build.bootloader_addr=0x0

arduino_nesso_n1.build.cdc_on_boot=1
arduino_nesso_n1.build.f_cpu=160000000L
arduino_nesso_n1.build.flash_size=16MB
arduino_nesso_n1.build.flash_freq=80m
arduino_nesso_n1.build.flash_mode=qio
arduino_nesso_n1.build.boot=qio
arduino_nesso_n1.build.partitions=default
arduino_nesso_n1.build.defines=

## IDE 2.0 Seems to not update the value
arduino_nesso_n1.menu.JTAGAdapter.default=Disabled
arduino_nesso_n1.menu.JTAGAdapter.default.build.copy_jtag_files=0
arduino_nesso_n1.menu.JTAGAdapter.builtin=Integrated USB JTAG
arduino_nesso_n1.menu.JTAGAdapter.builtin.build.openocdscript=esp32c6-builtin.cfg
arduino_nesso_n1.menu.JTAGAdapter.builtin.build.copy_jtag_files=1
arduino_nesso_n1.menu.JTAGAdapter.external=FTDI Adapter
arduino_nesso_n1.menu.JTAGAdapter.external.build.openocdscript=esp32c6-ftdi.cfg
arduino_nesso_n1.menu.JTAGAdapter.external.build.copy_jtag_files=1
arduino_nesso_n1.menu.JTAGAdapter.bridge=ESP USB Bridge
arduino_nesso_n1.menu.JTAGAdapter.bridge.build.openocdscript=esp32c6-bridge.cfg
arduino_nesso_n1.menu.JTAGAdapter.bridge.build.copy_jtag_files=1

arduino_nesso_n1.menu.CDCOnBoot.default=Enabled
arduino_nesso_n1.menu.CDCOnBoot.default.build.cdc_on_boot=1
arduino_nesso_n1.menu.CDCOnBoot.cdc=Disabled
arduino_nesso_n1.menu.CDCOnBoot.cdc.build.cdc_on_boot=0

arduino_nesso_n1.menu.PartitionScheme.app3M_fat9M_16MB=16M Flash (3MB APP/9.9MB FATFS)
arduino_nesso_n1.menu.PartitionScheme.app3M_fat9M_16MB.build.partitions=app3M_fat9M_16MB
arduino_nesso_n1.menu.PartitionScheme.app3M_fat9M_16MB.upload.maximum_size=3145728
arduino_nesso_n1.menu.PartitionScheme.default=Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)
arduino_nesso_n1.menu.PartitionScheme.default.build.partitions=default
arduino_nesso_n1.menu.PartitionScheme.defaultffat=Default 4MB with ffat (1.2MB APP/1.5MB FATFS)
arduino_nesso_n1.menu.PartitionScheme.defaultffat.build.partitions=default_ffat
arduino_nesso_n1.menu.PartitionScheme.no_ota=No OTA (2MB APP/2MB SPIFFS)
arduino_nesso_n1.menu.PartitionScheme.no_ota.build.partitions=no_ota
arduino_nesso_n1.menu.PartitionScheme.no_ota.upload.maximum_size=2097152
arduino_nesso_n1.menu.PartitionScheme.noota_3g=No OTA (1MB APP/3MB SPIFFS)
arduino_nesso_n1.menu.PartitionScheme.noota_3g.build.partitions=noota_3g
arduino_nesso_n1.menu.PartitionScheme.noota_3g.upload.maximum_size=1048576
arduino_nesso_n1.menu.PartitionScheme.noota_ffat=No OTA (2MB APP/2MB FATFS)
arduino_nesso_n1.menu.PartitionScheme.noota_ffat.build.partitions=noota_ffat
arduino_nesso_n1.menu.PartitionScheme.noota_ffat.upload.maximum_size=2097152
arduino_nesso_n1.menu.PartitionScheme.noota_3gffat=No OTA (1MB APP/3MB FATFS)
arduino_nesso_n1.menu.PartitionScheme.noota_3gffat.build.partitions=noota_3gffat
arduino_nesso_n1.menu.PartitionScheme.noota_3gffat.upload.maximum_size=1048576
arduino_nesso_n1.menu.PartitionScheme.huge_app=Huge APP (3MB No OTA/1MB SPIFFS)
arduino_nesso_n1.menu.PartitionScheme.huge_app.build.partitions=huge_app
arduino_nesso_n1.menu.PartitionScheme.huge_app.upload.maximum_size=3145728
arduino_nesso_n1.menu.PartitionScheme.zigbee=Zigbee 4MB with spiffs
arduino_nesso_n1.menu.PartitionScheme.zigbee.build.partitions=zigbee
arduino_nesso_n1.menu.PartitionScheme.zigbee.upload.maximum_size=1310720
arduino_nesso_n1.menu.PartitionScheme.zigbee_zczr=Zigbee ZCZR 4MB with spiffs
arduino_nesso_n1.menu.PartitionScheme.zigbee_zczr.build.partitions=zigbee_zczr
arduino_nesso_n1.menu.PartitionScheme.zigbee_zczr.upload.maximum_size=1310720

arduino_nesso_n1.menu.CPUFreq.160=160MHz (WiFi)
arduino_nesso_n1.menu.CPUFreq.160.build.f_cpu=160000000L
arduino_nesso_n1.menu.CPUFreq.80=80MHz (WiFi)
arduino_nesso_n1.menu.CPUFreq.80.build.f_cpu=80000000L
arduino_nesso_n1.menu.CPUFreq.40=40MHz
arduino_nesso_n1.menu.CPUFreq.40.build.f_cpu=40000000L
arduino_nesso_n1.menu.CPUFreq.20=20MHz
arduino_nesso_n1.menu.CPUFreq.20.build.f_cpu=20000000L
arduino_nesso_n1.menu.CPUFreq.10=10MHz
arduino_nesso_n1.menu.CPUFreq.10.build.f_cpu=10000000L

arduino_nesso_n1.menu.FlashMode.qio=QIO
arduino_nesso_n1.menu.FlashMode.qio.build.flash_mode=dio
arduino_nesso_n1.menu.FlashMode.qio.build.boot=qio
arduino_nesso_n1.menu.FlashMode.dio=DIO
arduino_nesso_n1.menu.FlashMode.dio.build.flash_mode=dio
arduino_nesso_n1.menu.FlashMode.dio.build.boot=dio

arduino_nesso_n1.menu.UploadSpeed.921600=921600
arduino_nesso_n1.menu.UploadSpeed.921600.upload.speed=921600
arduino_nesso_n1.menu.UploadSpeed.115200=115200
arduino_nesso_n1.menu.UploadSpeed.115200.upload.speed=115200
arduino_nesso_n1.menu.UploadSpeed.256000.windows=256000
arduino_nesso_n1.menu.UploadSpeed.256000.upload.speed=256000
arduino_nesso_n1.menu.UploadSpeed.230400.windows.upload.speed=256000
arduino_nesso_n1.menu.UploadSpeed.230400=230400
arduino_nesso_n1.menu.UploadSpeed.230400.upload.speed=230400
arduino_nesso_n1.menu.UploadSpeed.460800.linux=460800
arduino_nesso_n1.menu.UploadSpeed.460800.macosx=460800
arduino_nesso_n1.menu.UploadSpeed.460800.upload.speed=460800
arduino_nesso_n1.menu.UploadSpeed.512000.windows=512000
arduino_nesso_n1.menu.UploadSpeed.512000.upload.speed=512000

arduino_nesso_n1.menu.DebugLevel.none=None
arduino_nesso_n1.menu.DebugLevel.none.build.code_debug=0
arduino_nesso_n1.menu.DebugLevel.error=Error
arduino_nesso_n1.menu.DebugLevel.error.build.code_debug=1
arduino_nesso_n1.menu.DebugLevel.warn=Warn
arduino_nesso_n1.menu.DebugLevel.warn.build.code_debug=2
arduino_nesso_n1.menu.DebugLevel.info=Info
arduino_nesso_n1.menu.DebugLevel.info.build.code_debug=3
arduino_nesso_n1.menu.DebugLevel.debug=Debug
arduino_nesso_n1.menu.DebugLevel.debug.build.code_debug=4
arduino_nesso_n1.menu.DebugLevel.verbose=Verbose
arduino_nesso_n1.menu.DebugLevel.verbose.build.code_debug=5

arduino_nesso_n1.menu.EraseFlash.none=Disabled
arduino_nesso_n1.menu.EraseFlash.none.upload.erase_cmd=
arduino_nesso_n1.menu.EraseFlash.all=Enabled
arduino_nesso_n1.menu.EraseFlash.all.upload.erase_cmd=-e

arduino_nesso_n1.menu.ZigbeeMode.default=Disabled
arduino_nesso_n1.menu.ZigbeeMode.default.build.zigbee_mode=
arduino_nesso_n1.menu.ZigbeeMode.default.build.zigbee_libs=
arduino_nesso_n1.menu.ZigbeeMode.ed=Zigbee ED (end device)
arduino_nesso_n1.menu.ZigbeeMode.ed.build.zigbee_mode=-DZIGBEE_MODE_ED
arduino_nesso_n1.menu.ZigbeeMode.ed.build.zigbee_libs=-lesp_zb_api.ed -lzboss_stack.ed -lzboss_port.native
arduino_nesso_n1.menu.ZigbeeMode.zczr=Zigbee ZCZR (coordinator/router)
arduino_nesso_n1.menu.ZigbeeMode.zczr.build.zigbee_mode=-DZIGBEE_MODE_ZCZR
arduino_nesso_n1.menu.ZigbeeMode.zczr.build.zigbee_libs=-lesp_zb_api.zczr -lzboss_stack.zczr -lzboss_port.native

##############################################################
129 changes: 129 additions & 0 deletions variants/arduino_nesso_n1/expander.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
#define TwoWire TwoWireInternal
#define Wire WireInternal
#define Wire1 WireInternal1

#include "pins_arduino.h"
#include "../../libraries/Wire/src/Wire.h"
#include "../../libraries/Wire/src/Wire.cpp"

static bool wireInitialized = 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();
}

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();
}

static void writeBitRegister(uint8_t address, uint8_t reg, uint8_t bit, uint8_t value) {
uint8_t val = readRegister(address, reg);
if (value) {
writeRegister(address, reg, val | (1 << bit));
} else {
writeRegister(address, reg, val & ~(1 << bit));
}
}

static bool readBitRegister(uint8_t address, uint8_t reg, uint8_t bit) {
uint8_t val = readRegister(address, reg);
return ((val & (1 << bit)) > 0);

Check warning

Code scanning / CodeQL

Sign check of bitwise operation Warning

Potentially unsafe sign check of a bitwise operation.
}

void pinMode(ExpanderPin pin, uint8_t mode) {
if (!wireInitialized) {
WireInternal.begin(SDA, SCL);
wireInitialized = true;
// reset all registers to default state
writeRegister(pin.address, 0x1, 0x1);
// set all pins as high as default state
writeRegister(pin.address, 0x9, 0xFF);
// interrupt mask to all pins
writeRegister(pin.address, 0x11, 0xFF);
// all input
writeRegister(pin.address, 0x3, 0);
}
writeBitRegister(pin.address, 0x3, pin.pin, mode == OUTPUT);
if (mode == OUTPUT) {
// remove high impedance
writeBitRegister(pin.address, 0x7, pin.pin, false);
} else if (mode == INPUT_PULLUP) {
// set pull-up resistor
writeBitRegister(pin.address, 0xB, pin.pin, true);
writeBitRegister(pin.address, 0xD, pin.pin, true);
} else if (mode == INPUT_PULLDOWN) {
// disable pull-up resistor
writeBitRegister(pin.address, 0xB, pin.pin, true);
writeBitRegister(pin.address, 0xD, pin.pin, false);
} else if (mode == INPUT) {
// disable pull selector resistor
writeBitRegister(pin.address, 0xB, pin.pin, false);
}
}

void digitalWrite(ExpanderPin pin, uint8_t val) {
if (!wireInitialized) {
WireInternal.begin(SDA, SCL);
wireInitialized = true;
}
writeBitRegister(pin.address, 0x5, pin.pin, val == HIGH);
}

int digitalRead(ExpanderPin pin) {
if (!wireInitialized) {
WireInternal.begin(SDA, SCL);
wireInitialized = true;
}
return readBitRegister(pin.address, 0xF, pin.pin);
}

void NessoBattery::enableCharge() {
// AW32001E - address 0x49
// set CEB bit low (charge enable)
if (!wireInitialized) {
WireInternal.begin(SDA, SCL);
wireInitialized = true;
}
writeBitRegister(0x49, 0x1, 3, false);
}

float NessoBattery::getVoltage() {
// BQ27220 - address 0x55
if (!wireInitialized) {
WireInternal.begin(SDA, SCL);
wireInitialized = true;
}
uint16_t voltage = (readRegister(0x55, 0x9) << 8) | readRegister(0x55, 0x8);
return (float)voltage / 1000.0f;
}

uint16_t NessoBattery::getChargeLevel() {
// BQ27220 - address 0x55
if (!wireInitialized) {
WireInternal.begin(SDA, SCL);
wireInitialized = true;
}
uint16_t current_capacity = readRegister(0x55, 0x11) << 8 | readRegister(0x55, 0x10);
uint16_t total_capacity = readRegister(0x55, 0x13) << 8 | readRegister(0x55, 0x12);
return (current_capacity * 100) / total_capacity;
}

ExpanderPin LORA_LNA_ENABLE(5);
ExpanderPin LORA_ANTENNA_SWITCH(6);
ExpanderPin LORA_ENABLE(7);
ExpanderPin KEY1(0);
ExpanderPin KEY2(1);
ExpanderPin POWEROFF((1 << 8) | 0);
ExpanderPin LCD_RESET((1 << 8) | 1);
ExpanderPin GROVE_POWER_EN((1 << 8) | 2);
ExpanderPin VIN_DETECT((1 << 8) | 5);
ExpanderPin LCD_BACKLIGHT((1 << 8) | 6);
ExpanderPin LED_BUILTIN((1 << 8) | 7);
77 changes: 77 additions & 0 deletions variants/arduino_nesso_n1/pins_arduino.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
#ifndef Pins_Arduino_h
#define Pins_Arduino_h

#include <stdint.h>
#include "soc/soc_caps.h"

#define USB_VID 0x303A
#define USB_PID 0x1001
#define USB_MANUFACTURER "Arduino"
#define USB_PRODUCT "Nesso N1"
#define USB_SERIAL ""

static const uint8_t TX = -1;
static const uint8_t RX = -1;

static const uint8_t SDA = 10;
static const uint8_t SCL = 8;

static const uint8_t MOSI = 21;
static const uint8_t MISO = 22;
static const uint8_t SCK = 20;
static const uint8_t SS = 23;

static const uint8_t D1 = 7;
static const uint8_t D2 = 2;
static const uint8_t D3 = 6;

static const uint8_t IR_TX_PIN = 9;
static const uint8_t BEEP_PIN = 11;

static const uint8_t GROVE_IO_0 = 5;
static const uint8_t GROVE_IO_1 = 4;

static const uint8_t LORA_IRQ = 15;
static const uint8_t LORA_CS = 23;
static const uint8_t LORA_BUSY = 19;

static const uint8_t SYS_IRQ = 3;

static const uint8_t LCD_CS = 17;
static const uint8_t LCD_RS = 16;

#if !defined(MAIN_ESP32_HAL_GPIO_H_) && defined(__cplusplus)
/* address: 0x43/0x44 */
class ExpanderPin {
public:
ExpanderPin(uint16_t _pin) : pin(_pin & 0xFF), address(_pin & 0x100 ? 0x44 : 0x43){};
uint8_t pin;
uint8_t address;
};

class NessoBattery {
public:
NessoBattery(){};
void enableCharge(); // enable charging
float getVoltage(); // get battery voltage in Volts
uint16_t getChargeLevel(); // get battery charge level in percents
};

extern ExpanderPin LORA_LNA_ENABLE;
extern ExpanderPin LORA_ANTENNA_SWITCH;
extern ExpanderPin LORA_ENABLE;
extern ExpanderPin POWEROFF;
extern ExpanderPin GROVE_POWER_EN;
extern ExpanderPin VIN_DETECT;
extern ExpanderPin LCD_RESET;
extern ExpanderPin LCD_BACKLIGHT;
extern ExpanderPin LED_BUILTIN;
extern ExpanderPin KEY1;
extern ExpanderPin KEY2;

void pinMode(ExpanderPin pin, uint8_t mode);
void digitalWrite(ExpanderPin pin, uint8_t val);
int digitalRead(ExpanderPin pin);
#endif

#endif /* Pins_Arduino_h */