Skip to content
Draft
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
6 changes: 5 additions & 1 deletion .github/workflows/build-clang-doxy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -370,7 +370,8 @@ jobs:
"dfrobot_beetle_esp32c3",
"wippersnapper_qtpy_esp32c3",
"espressif_esp32c5_devkitc_1_n8r4",
"wippersnapper_feather_esp32c6"
"wippersnapper_feather_esp32c6",
"arduino_nesso_n1"
]
include:
- offset: "0x1000"
Expand All @@ -382,6 +383,8 @@ jobs:
arduino-platform: "espressif_esp32c5_devkitc_1_n8r4"
- offset: "0x0"
arduino-platform: "wippersnapper_feather_esp32c6"
- offset: "0x0"
arduino-platform: "arduino_nesso_n1"
steps:
- name: "skip if unwanted"
continue-on-error: true
Expand Down Expand Up @@ -418,6 +421,7 @@ jobs:
with:
repository: adafruit/Wippersnapper_Boards
path: ws-boards
ref: arduino-nesso-n1
- name: Install CI-Arduino
run: bash ci/actions_install.sh
- name: Install extra Arduino libraries
Expand Down
1 change: 1 addition & 0 deletions examples/Wippersnapper_demo/.arduino_nesso_n1.generate
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

1 change: 1 addition & 0 deletions examples/wippersnapper_debug/.arduino_nesso_n1.test.skip
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

22 changes: 21 additions & 1 deletion platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ lib_deps =

; Common build environment for ESP32 platform
[common:esp32]
platform = https://github.com/pioarduino/platform-espressif32/releases/download/55.03.33/platform-espressif32.zip
platform = https://github.com/tyeth/platform-espressif32/releases/download/55.03.33-nesso.1/platform-espressif32-55.03.33-nesso.1.zip
; This is needed for occasional new features and bug fixes
; platform = https://github.com/pioarduino/platform-espressif32#develop
lib_ignore = WiFiNINA, WiFiNINA_-_Adafruit_Fork, WiFi101, OneWire
Expand Down Expand Up @@ -201,6 +201,26 @@ build_flags =
board_build.filesystem = littlefs
board_build.partitions = min_spiffs.csv

; Arduino Nesso-N1 (Espressif ESP32-C5 16MB FLASH)
[env:arduino_nesso_n1]
extends = common:esp32
board = arduino_nesso_n1
build_type = debug
; debug_tool = esp-builtin
; upload_protocol = esp-builtin
; debug_init_break = tbreak setup
build_flags =
-DARDUINO_ARDUINO_NESSO_N1
; -DDEBUG=1
; -DARDUINO_USB_MODE=1
; -DARDUINO_USB_CDC_ON_BOOT=1
; -DESP_LOG_LEVEL=5
; -DARDUINO_LOG_LEVEL=5
; -DCORE_DEBUG_LEVEL=5
; -DMQTT_DEBUG=1
board_build.filesystem = littlefs
board_build.partitions = huge_app.csv

; Espressif ESP32-C6 4MB NO PSRAM esp32-c6-devkitm-1
[env:espressif_esp32-c6-devkitm-1]
extends = common:esp32
Expand Down
7 changes: 7 additions & 0 deletions src/Wippersnapper_Boards.h
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@
#define USE_LITTLEFS
#define USE_STATUS_LED
#define STATUS_LED_PIN 0
#define STATUS_LED_INVERTED
#elif defined(ARDUINO_ADAFRUIT_ITSYBITSY_ESP32)
#define BOARD_ID "itsybitsy-esp32"
#define USE_LITTLEFS
Expand All @@ -165,6 +166,12 @@
#define USE_LITTLEFS
#define USE_STATUS_LED
#define STATUS_LED_PIN 13
#elif defined(ARDUINO_ARDUINO_NESSO_N1)
#define BOARD_ID "arduino-nesso-n1"
#define USE_LITTLEFS
#define USE_STATUS_LED
#define STATUS_LED_PIN LED_BUILTIN
#define STATUS_LED_INVERTED
#elif defined(ARDUINO_ADAFRUIT_FEATHER_ESP32C6)
#define BOARD_ID "feather-esp32c6"
#define USE_LITTLEFS
Expand Down
52 changes: 48 additions & 4 deletions src/components/digitalIO/Wippersnapper_DigitalGPIO.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,20 +66,28 @@ void Wippersnapper_DigitalGPIO::initDigitalPin(
wippersnapper_pin_v1_ConfigurePinRequest_Direction_DIRECTION_OUTPUT) {

#ifdef STATUS_LED_PIN
#if !defined(ARDUINO_ARDUINO_NESSO_N1)
// if (String("D") + pinName == STATUS_LED_PIN.pin)
// #else
// deinit status led, use it as a dio component instead
if (pinName == STATUS_LED_PIN)
releaseStatusLED();
#endif
#endif
pinMode(pinName, OUTPUT);

WS_DEBUG_PRINT("Configured digital output pin on D");
WS_DEBUG_PRINTLN(pinName);

// Initialize LOW
#if defined(ARDUINO_ESP8266_ADAFRUIT_HUZZAH)
// The Adafruit Feather ESP8266's built-in LED is reverse wired so setting
// the pin LOW will turn the LED on.
digitalWrite(STATUS_LED_PIN, !0);
#if defined(ARDUINO_ESP8266_ADAFRUIT_HUZZAH) // not until we support ExpanderPins || defined(STATUS_LED_INVERTED)
if (pinName == STATUS_LED_PIN) {
// The Adafruit Feather ESP8266's built-in LED is reverse wired so setting
// the pin LOW will turn the LED on.
digitalWrite(STATUS_LED_PIN, !0);
} else {
digitalWrite(pinName, LOW);
}
#else
pinMode(pinName, OUTPUT);
digitalWrite(pinName, LOW); // initialize LOW
Expand Down Expand Up @@ -155,9 +163,11 @@ void Wippersnapper_DigitalGPIO::deinitDigitalPin(

// if prv. in-use by DIO, release pin back to application
#ifdef STATUS_LED_PIN
#if !defined(ARDUINO_ARDUINO_NESSO_N1) // not until we support ExpanderPins
if (pinName == STATUS_LED_PIN)
initStatusLED();
#endif
#endif
}

/********************************************************************/
Expand All @@ -175,6 +185,40 @@ int Wippersnapper_DigitalGPIO::digitalReadSvc(int pinName) {
return pinVal;
}

#if defined(ARDUINO_ARDUINO_NESSO_N1)
/********************************************************************/
/*!
@brief High-level digitalRead service impl. which performs a
digitalRead.
@param pin
The ExpanderPin instance
@returns The pin's value.
*/
/********************************************************************/
int Wippersnapper_DigitalGPIO::digitalReadSvc(ExpanderPin pin) {
// Service using arduino `digitalRead`
int pinVal = digitalRead(pin);
return pinVal;
}

/*******************************************************************************/
/*!
@brief Writes a value to a pin.
@param pinName
The pin's name.
@param pinValue
The pin's value.
*/
/*******************************************************************************/
void Wippersnapper_DigitalGPIO::digitalWriteSvc(ExpanderPin pin, int pinValue) {
WS_DEBUG_PRINT("Digital Pin Event: Set ");
WS_DEBUG_PRINT(pin.pin);
WS_DEBUG_PRINT(" to ");
WS_DEBUG_PRINTLN(pinValue);
digitalWrite(pin, pinValue);
}
#endif

/*******************************************************************************/
/*!
@brief Writes a value to a pin.
Expand Down
12 changes: 12 additions & 0 deletions src/components/digitalIO/Wippersnapper_DigitalGPIO.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,18 @@ class Wippersnapper_DigitalGPIO {

int digitalReadSvc(int pinName);
void digitalWriteSvc(uint8_t pinName, int pinValue);
#if defined(ARDUINO_ARDUINO_NESSO_N1)
// void
// initDigitalPin(wippersnapper_pin_v1_ConfigurePinRequest_Direction direction,
// ExpanderPin pinName, float period,
// wippersnapper_pin_v1_ConfigurePinRequest_Pull pull);
// void
// deinitDigitalPin(wippersnapper_pin_v1_ConfigurePinRequest_Direction direction,
// ExpanderPin pinName);

int digitalReadSvc(ExpanderPin pinName);
void digitalWriteSvc(ExpanderPin pinName, int pinValue);
#endif
void processDigitalInputs();

digitalInputPin *_digital_input_pins; /*!< Array of gpio pin objects */
Expand Down
2 changes: 1 addition & 1 deletion src/components/pwm/ws_pwm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ void ws_pwm::detach(uint8_t pin) {
void ws_pwm::writeDutyCycle(uint8_t pin, int dutyCycle) {
#if defined(ARDUINO_ARCH_ESP32)
_ledcMgr->analogWrite(pin, dutyCycle);
#elif defined(ARDUINO_ESP8266_ADAFRUIT_HUZZAH) && defined(STATUS_LED_PIN)
#elif (defined(ARDUINO_ESP8266_ADAFRUIT_HUZZAH) || defined(STATUS_LED_INVERTED)) && defined(STATUS_LED_PIN)
// Adafruit Feather ESP8266's analogWrite() is inverted because its LED pin is
// reverse-wired
analogWrite(pin, 255 - dutyCycle);
Expand Down
86 changes: 74 additions & 12 deletions src/components/statusLED/Wippersnapper_StatusLED.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -82,13 +82,33 @@ void initStatusLED() {
// Turn off LED initially
#if defined(ARDUINO_ESP8266_ADAFRUIT_HUZZAH)
analogWrite(STATUS_LED_PIN, 255);
#elif defined(ARDUINO_ARDUINO_NESSO_N1) || defined(STATUS_LED_INVERTED)
digitalWrite(STATUS_LED_PIN, HIGH);
#elif defined(ARDUINO_ARCH_ESP32)
WS._pwmComponent->attach(STATUS_LED_PIN, LEDC_BASE_FREQ, LEDC_TIMER_12_BIT);
WS._pwmComponent->writeDutyCycle(STATUS_LED_PIN, 0); // turn OFF
WS._pwmComponent->writeDutyCycle(STATUS_LED_PIN,
#if defined(STATUS_LED_INVERTED)
255
#else
0
#endif
); // turn OFF
#elif defined(ARDUINO_ARCH_RP2040)
digitalWrite(STATUS_LED_PIN, 0);
digitalWrite(STATUS_LED_PIN,
#if defined(STATUS_LED_INVERTED)
255
#else
0
#endif
); // turn OFF
#else
analogWrite(STATUS_LED_PIN,
#if defined(STATUS_LED_INVERTED)
255
#else
analogWrite(STATUS_LED_PIN, 0);
0
#endif
); // turn OFF
#endif

WS.lockStatusLED = true; // set global pin "lock" flag
Expand Down Expand Up @@ -116,7 +136,13 @@ void releaseStatusLED() {
#endif

#ifdef USE_STATUS_LED
digitalWrite(STATUS_LED_PIN, 0); // turn off
digitalWrite(STATUS_LED_PIN,
#if defined(STATUS_LED_INVERTED)
255
#else
0
#endif
); // turn OFF
pinMode(STATUS_LED_PIN,
INPUT); // "release" for use by setting to input (hi-z)
WS.lockStatusLED = false; // un-set global pin "lock" flag
Expand Down Expand Up @@ -181,14 +207,32 @@ void setStatusLEDColor(uint32_t color) {
#ifdef USE_STATUS_LED
if (!WS.lockStatusLED)
return; // status pixel is in-use elsewhere
#ifdef ARDUINO_ARCH_RP2040
digitalWrite(STATUS_LED_PIN, color > 0);
#if defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_ARDUINO_NESSO_N1) || defined(STATUS_LED_INVERTED)
digitalWrite(STATUS_LED_PIN,
#if defined(STATUS_LED_INVERTED)
!(color > 0)
#else
color > 0
#endif
);
#else
if (color != BLACK)
WS._pwmComponent->writeDutyCycle(
STATUS_LED_PIN, map(WS.status_pixel_brightness, 0.0, 1.0, 0, 1023));
STATUS_LED_PIN, map(WS.status_pixel_brightness, 0.0, 1.0,
#if defined(STATUS_LED_INVERTED)
1023, 0
#else
0, 1023
#endif
));
else
WS._pwmComponent->writeDutyCycle(STATUS_LED_PIN, 0);
WS._pwmComponent->writeDutyCycle(STATUS_LED_PIN,
#if defined(STATUS_LED_INVERTED)
1023
#else
0
#endif
);
#endif
#endif
}
Expand Down Expand Up @@ -240,15 +284,33 @@ void setStatusLEDColor(uint32_t color, int brightness) {
if (!WS.lockStatusLED)
return;

#ifdef ARDUINO_ARCH_RP2040
digitalWrite(STATUS_LED_PIN, color > 0);
#if defined(ARDUINO_ARCH_RP2040) || defined(ARDUINO_ARDUINO_NESSO_N1)
digitalWrite(STATUS_LED_PIN,
#if defined(STATUS_LED_INVERTED)
!(color > 0)
#else
color > 0
#endif
);
#else
if (color != BLACK) {
// re-map for pixel as a LED
int pulseWidth = map(brightness, 0, 255, 0, 1023);
int pulseWidth = map(brightness, 0, 255,
#if defined(STATUS_LED_INVERTED)
1023, 0
#else
0, 1023
#endif
);
WS._pwmComponent->writeDutyCycle(STATUS_LED_PIN, pulseWidth);
} else {
WS._pwmComponent->writeDutyCycle(STATUS_LED_PIN, 0);
WS._pwmComponent->writeDutyCycle(STATUS_LED_PIN,
#if defined(STATUS_LED_INVERTED)
1023
#else
0
#endif
);
}
#endif
#endif
Expand Down
2 changes: 1 addition & 1 deletion src/provisioning/littlefs/WipperSnapper_LittleFS.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
* BSD license, all text here must be included in any redistribution.
*
*/
#if defined(ARDUINO_FEATHER_ESP32) || \
#if defined(ARDUINO_FEATHER_ESP32) || defined(ARDUINO_ARDUINO_NESSO_N1) || \
defined(ARDUINO_ESP8266_ADAFRUIT_HUZZAH) || \
defined(ARDUINO_ADAFRUIT_ITSYBITSY_ESP32) || \
defined(ARDUINO_ADAFRUIT_FEATHER_ESP32_V2) || \
Expand Down
2 changes: 1 addition & 1 deletion src/provisioning/tinyusb/Wippersnapper_FS.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
defined(ARDUINO_ADAFRUIT_FEATHER_ESP32S3_REVTFT) || \
defined(ARDUINO_ADAFRUIT_FEATHER_ESP32S2_REVTFT) || \
defined(ARDUINO_ADAFRUIT_QTPY_ESP32S3_N4R2) || \
defined(ARDUINO_XIAO_ESP32S3) || \
defined(ARDUINO_XIAO_ESP32S3) || \
defined(ARDUINO_ADAFRUIT_FRUITJAM_RP2350)

#include "Wippersnapper_FS.h"
Expand Down
Loading