You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The **Arduino® Nesso N1** is an all-in-one enclosed development board. Based on the ESP32-C6 System on Chip (SoC), it integrates a suite of communication protocols, including 2.4 GHz Wi-Fi® 6, Bluetooth® 5, 802.15.4 (Thread/Zigbee®), and long-range LoRa®. It also includes a 1.14" color touchscreen, buttons, and a built-in LiPo battery for immediate user interaction in portable applications.
26
+
The **Arduino® Nesso N1** is an all-in-one enclosed development board. Based on the ESP32-C6 System on Chip (SoC), it integrates a suite of communication protocols, including 2.4 GHz Wi-Fi® 6, Bluetooth® 5.3 LE, 802.15.4 (Thread/Zigbee®), and long-range LoRa®. It also includes a 1.14" color touchscreen, buttons, and a built-in LiPo battery for immediate user interaction in portable applications.
27
27
28
28
This document serves as a comprehensive user manual for the Nesso N1, providing technical specifications, setup guides, and detailed explanations of its features to help you bring your projects to life.
29
29
@@ -59,7 +59,7 @@ The full datasheet is available as a downloadable PDF from the link below:
59
59
60
60
### Main Components
61
61
62
-
-**ESP32-C6 SoC**: A powerful single-core RISC-V microcontroller with integrated Wi-Fi® 6, Bluetooth® 5, and 802.15.4 radios.
62
+
-**ESP32-C6 SoC**: A powerful single-core RISC-V microcontroller with integrated Wi-Fi® 6, Bluetooth® 5.3 LE, and 802.15.4 radios.
63
63
-**SX1262 LoRa® Module**: A long-range, low-power LoRa® transceiver for communication in remote or challenging environments.
64
64
-**1.14" Color Touchscreen**: An intuitive IPS display for user interaction and data visualization.
65
65
-**BMI270 IMU**: A 6-axis Inertial Measurement Unit for precise motion and orientation sensing.
@@ -115,52 +115,13 @@ The Nesso N1 can be powered in three ways:
115
115
116
116
***WARNING: Handle the internal LiPo battery with care. Do not puncture, short-circuit, or expose it to high temperatures.***
117
117
118
-
###Battery Management
118
+
## Battery Management
119
119
120
120
The board incorporates a power management system featuring the **AW32001** power path management chip and the **BQ27220** battery monitoring chip. This system provides:
121
121
122
122
-**Automatic Charging**: The battery charges automatically when a 5 V source is connected via USB-C®.
123
123
-**Real-Time Monitoring**: You can programmatically access battery voltage, current, and capacity to monitor the power status of your application.
124
124
-**Over-Current & Over-Voltage Protection**: Ensures safe and stable operation during charging and discharging cycles.
125
-
-**Power Source Detection**: The `VIN_DETECT` expander pin can be read to determine if external power is connected (`HIGH` if connected, `LOW` if running on battery).
126
-
-**Digital Power Off**: The `POWEROFF` expander pin allows you to shut down the device programmatically.
127
-
128
-
You can interact with the battery system using the `NessoBattery` object and expander pins.
129
-
130
-
```arduino
131
-
#include "Arduino.h"
132
-
133
-
// The NessoBattery object is available by default
134
-
NessoBattery battery;
135
-
136
-
void setup() {
137
-
Serial.begin(115200);
138
-
139
-
// Enable battery charging (it is enabled by default)
140
-
battery.enableCharge();
141
-
142
-
// Configure VIN_DETECT as an input
143
-
pinMode(VIN_DETECT, INPUT);
144
-
}
145
-
146
-
void loop() {
147
-
// Check if external power is connected
148
-
if (digitalRead(VIN_DETECT) == HIGH) {
149
-
Serial.println("External power connected.");
150
-
} else {
151
-
Serial.println("Running on battery.");
152
-
}
153
-
154
-
delay(5000);
155
-
156
-
// Example: power off the device after 30 seconds
157
-
if (millis() > 30000) {
158
-
Serial.println("Powering off...");
159
-
pinMode(POWEROFF, OUTPUT);
160
-
digitalWrite(POWEROFF, HIGH); // This will shut down the device
161
-
}
162
-
}
163
-
```
164
125
165
126
## Microcontroller (ESP32-C6)
166
127
@@ -174,7 +135,7 @@ At the core of the Nesso N1 is the **ESP32-C6**, a highly integrated SoC from Es
174
135
The ESP32-C6 features a comprehensive set of connectivity options:
175
136
176
137
- 2.4 GHz Wi-Fi® 6 (802.11ax).
177
-
- Bluetooth® 5 and Bluetooth® Low Energy.
138
+
- Bluetooth® 5.3 Low Energy.
178
139
- 802.15.4 radio for Thread and Zigbee® protocols.
179
140
- Support for the Matter protocol.
180
141
@@ -229,51 +190,60 @@ The Nesso N1 uses two PI4IOE5V6408 I/O expanders (addresses `0x43` and `0x44`) t
229
190
230
191
To use an expander pin, you must first initialize it with `pinMode()`, then you can use `digitalWrite()` and `digitalRead()` as with standard pins.
231
192
232
-
## Built-in Programmable LED
233
193
234
-
The board has an onboard green LED that can be controlled using the `LED_BUILTIN` object. It is visible on the side of the board through the power button gaps.
194
+
## Battery
235
195
236
-

196
+
You can interact with the battery system using the `NessoBattery` object and expander pins.
197
+
198
+
### Enable Charge
237
199
238
200
```arduino
239
-
#include "Arduino.h"
201
+
// The NessoBattery object is available by default
202
+
NessoBattery battery;
240
203
241
204
void setup() {
242
-
// Configure the built-in LED as an output
243
-
pinMode(LED_BUILTIN, OUTPUT);
205
+
Serial.begin(115200);
206
+
207
+
// Enable battery charging (it is enabled by default)
208
+
battery.enableCharge();
209
+
244
210
}
245
211
246
212
void loop() {
247
-
// Blink the LED
248
-
digitalWrite(LED_BUILTIN, LOW); // Turn LED ON
249
-
delay(500);
250
-
digitalWrite(LED_BUILTIN, HIGH); // Turn LED OFF
251
-
delay(500);
252
213
}
253
214
```
215
+
### Read Battery Voltage
254
216
255
-
***Please note that `LED_BUILTIN` uses inverted logic. Writing `LOW` to the pin turns the LED on, while writing `HIGH` turns it off.***
217
+
218
+
Additionally the `VIN_DETECT` expander pin can be read to determine if external power is connected (`HIGH` if connected, `LOW` if running on battery).
219
+
220
+
221
+
## Buttons and LED
222
+
223
+
The Nesso N1 features several physical controls for user interaction.
256
224
257
225
### Power Button
258
226
259
-
A multi-function button for power control:
227
+
The Nesso N1 has a multi-function button for power control:
260
228
261
229
-**Click (from off state)**: Power on.
262
230
-**Click (from on state)**: Reset the device.
263
-
-**Double-click (during startup)**: Power off.
231
+
-**Double-click (from on state)**: Power off.
264
232
-**Press and hold (from on state)**: Enter Download/Bootloader mode.
265
233
266
234

267
235
236
+
237
+
Additionally the `POWEROFF` expander pin allows you to shut down the device programmatically.
238
+
239
+
268
240
### User Buttons
269
241
270
-
The Nesso N1 has two physical buttons, **KEY1** and **KEY2**, that are connected to the I/O expander. These can be read using `digitalRead()`.
242
+
The board has two physical buttons, **KEY1** and **KEY2**, that are connected to the I/O expander. These can be read using `digitalRead()`.
271
243
272
244

273
245
274
246
```arduino
275
-
#include "Arduino.h"
276
-
277
247
void setup() {
278
248
Serial.begin(115200);
279
249
pinMode(KEY1, INPUT_PULLUP);
@@ -292,14 +262,38 @@ void loop() {
292
262
}
293
263
```
294
264
265
+
### Built-in Programmable LED
266
+
267
+
The board has an onboard green LED that can be controlled using the `LED_BUILTIN` object. It is visible on the side of the board through the power button gaps.
268
+
269
+

270
+
271
+
```arduino
272
+
void setup() {
273
+
// Configure the built-in LED as an output
274
+
pinMode(LED_BUILTIN, OUTPUT);
275
+
}
276
+
277
+
void loop() {
278
+
// Blink the LED
279
+
digitalWrite(LED_BUILTIN, LOW); // Turn LED ON
280
+
delay(500);
281
+
digitalWrite(LED_BUILTIN, HIGH); // Turn LED OFF
282
+
delay(500);
283
+
}
284
+
```
285
+
286
+
***Please note that `LED_BUILTIN` uses inverted logic. Writing `LOW` to the pin turns the LED on, while writing `HIGH` turns it off.***
287
+
288
+
295
289
## Display & Touchscreen
296
290
297
291
The Nesso N1 features a 1.14-inch IPS color touchscreen with a resolution of 135 x 240 pixels.
298
292
299
293
-**Display Controller**: ST7789, controlled via SPI.
300
294
-**Touch Controller**: FT6336U, controlled via I2C.
301
295
302
-
The display can be programmed using the **M5GFX** library, which is included as a dependency in the board package.
296
+
The display can be programmed using the **M5GFX** library, which can be installed using the Arduino IDE Library Manager.
303
297
304
298
Here is an example to display touch input as text on the screen:
305
299
@@ -350,13 +344,15 @@ void loop() {
350
344
The ESP32-C6 provides a rich set of wireless protocols, making the Nesso N1 a powerful hub for IoT projects.
351
345
352
346
-**Wi-Fi® 6**: Offers higher efficiency, lower latency, and improved performance in dense wireless environments.
353
-
-**Bluetooth® 5 & BLE**: Enables communication with a wide range of mobile devices and low-power sensors.
347
+
-**Bluetooth® 5.3 Low Energy (LE)**: Enables communication with a wide range of mobile devices and low-power sensors.
354
348
-**Thread & Zigbee®**: The 802.15.4 radio allows the Nesso N1 to participate in low-power mesh networks, essential for smart home and industrial applications. It also supports the **Matter** protocol for interoperability.
355
349
356
350
### LoRa®
357
351
358
352
The onboard **SX1262** module provides long-range, low-power communication capabilities, operating in the 850–960 MHz frequency range. It comes with a detachable external antenna that connects via an MMCX connector.
***WARNING: To avoid damage to your board, always use the LoRa® module with the antenna attached.***
361
357
362
358
The LoRa® module is controlled via SPI and several dedicated pins on both the ESP32-C6 and the I/O expander.
@@ -417,39 +413,74 @@ void loop() {
417
413
418
414
The **BMI270** is a high-performance 6-axis Inertial Measurement Unit (IMU) that combines a 3-axis accelerometer and a 3-axis gyroscope. It connects to the ESP32-C6 via the I2C bus (`SCL` on GPIO8, `SDA` on GPIO10) and provides an interrupt signal on `SYS_IRQ` (GPIO3). It is ideal for motion tracking, gesture recognition, and orientation sensing.
419
415
420
-
Here is a minimal example using the [SparkFun BMI270 library](https://github.com/sparkfun/SparkFun_BMI270_Arduino_Library):
416
+
Here is a minimal example using the [Arduino_BMI270_BMM150](https://github.com/arduino-libraries/arduino_bmi270_bmm150) library:
421
417
422
418
```arduino
423
-
#include <SparkFun_BMI270_Arduino_Library.h>
424
-
425
-
BMI270 imu;
426
-
TwoWire& i2c_bus = Wire;
419
+
#include <Arduino_BMI270_BMM150.h>
427
420
428
421
void setup() {
429
422
Serial.begin(115200);
430
-
i2c_bus.begin();
423
+
while (!Serial); // Wait for serial port to connect
431
424
432
-
if (!imu.beginI2C(i2c_bus)) {
433
-
Serial.println("BMI270 not found. Halting.");
434
-
while(1);
425
+
Serial.println("Initializing IMU...");
426
+
if (!IMU.begin()) {
427
+
Serial.println("Failed to initialize IMU!");
428
+
while (1);
435
429
}
430
+
431
+
Serial.print("Accel Rate: ");
432
+
Serial.print(IMU.accelerationSampleRate());
433
+
Serial.println(" Hz");
434
+
435
+
Serial.print("Gyro Rate: ");
436
+
Serial.print(IMU.gyroscopeSampleRate());
437
+
Serial.println(" Hz");
438
+
439
+
Serial.println("X\tY\tZ\t\t| X\tY\tZ");
440
+
Serial.println("Accel (g)\t\t| Gyro (°/s)");
436
441
}
437
442
438
443
void loop() {
439
-
// Get all sensor data
440
-
imu.getSensorData();
441
-
442
-
Serial.print("Accel X: ");
443
-
Serial.print(imu.getAccelX());
444
-
Serial.print("\tY: ");
445
-
Serial.print(imu.getAccelY());
446
-
Serial.print("\tZ: ");
447
-
Serial.println(imu.getAccelZ());
444
+
float ax, ay, az;
445
+
float gx, gy, gz;
446
+
447
+
if (IMU.accelerationAvailable() && IMU.gyroscopeAvailable()) {
448
+
IMU.readAcceleration(ax, ay, az);
449
+
IMU.readGyroscope(gx, gy, gz);
450
+
451
+
Serial.print(ax, 2);
452
+
Serial.print('\t');
453
+
Serial.print(ay, 2);
454
+
Serial.print('\t');
455
+
Serial.print(az, 2);
456
+
Serial.print("\t| ");
457
+
Serial.print(gx, 2);
458
+
Serial.print('\t');
459
+
Serial.print(gy, 2);
460
+
Serial.print('\t');
461
+
Serial.println(gz, 2);
462
+
}
448
463
449
464
delay(100);
450
465
}
451
466
```
452
467
468
+
### Buzzer
469
+
470
+
A passive buzzer connected to `BEEP_PIN` (GPIO11) provides audible feedback. You can generate simple tones using the standard `tone()` function.
471
+
472
+
```arduino
473
+
void setup() {
474
+
// No setup needed for tone()
475
+
}
476
+
477
+
void loop() {
478
+
// Play a 1 kHz tone for 500 ms
479
+
tone(BEEP_PIN, 1000, 500);
480
+
delay(2000);
481
+
}
482
+
```
483
+
453
484
### Infrared (IR) Transmitter
454
485
455
486
An onboard IR LED connected to `IR_TX_PIN` (GPIO9) allows the Nesso N1 to function as a remote control for various electronic devices.
@@ -472,21 +503,7 @@ void loop() {
472
503
}
473
504
```
474
505
475
-
### Buzzer
476
-
477
-
A passive buzzer connected to `BEEP_PIN` (GPIO11) provides audible feedback. You can generate simple tones using the standard `tone()` function.
478
-
479
-
```arduino
480
-
void setup() {
481
-
// No setup needed for tone()
482
-
}
483
-
484
-
void loop() {
485
-
// Play a 1 kHz tone for 500 ms
486
-
tone(BEEP_PIN, 1000, 500);
487
-
delay(2000);
488
-
}
489
-
```
506
+
***Please note: There is a known hardware timer conflict between the tone() function and the IRremote library. To use both features in the same sketch, you must fully reset the pin and re-initialize the IR sender before each transmission. First, set the pin mode to INPUT to release it from the timer, then call IrSender.begin() to reconfigure it for IR.***
0 commit comments