适用于 Seeed Studio XIAO nRF54L15 的 Arduino
本文基于 XIAO nRF54L15 Sense 与 Arduino 平台进行开发。
致谢
特别感谢开发者 lolren 为 nRF54L15 芯片提供 Arduino 适配支持。这使得 XIAO nRF54L15 能够在 Arduino 生态中进行开发与实际应用。同时也感谢他在相关开源生态建设中持续付出的努力与贡献。
入门指南
硬件准备
在开始之前,请准备 XIAO nRF54L15 或 XIAO nRF54L15 Sense 硬件中的任意一款。
软件
如果这是你第一次使用 Arduino,我们强烈建议你参考Arduino 入门指南。
-
步骤 1. 根据你的操作系统下载并安装稳定版本的 Arduino IDE。
-
步骤 2. 添加开发板管理器 URL
打开 File → Preferences

在 Additional Boards Manager URLs 字段中添加用于支持 XIAO nRF54L15 的 URL。
https://raw.githubusercontent.com/lolren/nrf54-arduino-core/main/package_nrf54l15clean_index.json

- 步骤 3. 选择 XIAO nRF54L15 / Sense 和串口

- 步骤 4. 上传程序
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, LOW);
delay(500);
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
}

结果:

数字接口
数字引脚是 MCU 用于读写高/低电平逻辑的接口,可以获取外部数据并控制外设。本节通过实现 LED 的开关控制和 PWM 呼吸灯效果来说明数字引脚的功能。
硬件准备
你需要准备 XIAO nRF54L15 Sense 和 Grove 器件。
| Seeed Studio XIAO nRF54L15 Sense | Seeed Studio Grove Base for XIAO | Grove – Chainable RGB LED |
|---|---|---|
![]() | ![]() | ![]() |
软件
在 lolren 的仓库中,XIAO nRF54L15 的 D0 到 D10 引脚被重新定义为 PIN_D0 到 PIN_D10。
void setup() {
pinMode(PIN_D0, OUTPUT);
}
void loop() {
digitalWrite(PIN_D0, LOW);
delay(500);
digitalWrite(PIN_D0, HIGH);
delay(500);
for (int i = 0; i <= 255; i++) {
analogWrite(PIN_D0, i); // The duty cycle increases gradually.
delay(5);
}
for (int i = 255; i >= 0; i--) {
analogWrite(PIN_D0, i); // The duty cycle decreases gradually.
delay(5);
}
}
结果
将 Grove – Chainable RGB LED 连接到 Seeed Studio Grove Base for XIAO 的 0 号引脚。Grove – Chainable RGB LED 将呈现闪烁和渐亮渐暗的呼吸效果。

UART
UART 是一种异步半双工通信协议,常用于设备调试、日志输出和数据传输。XIAO nRF54L15 提供了一组 UART 引脚。本节通过串口数据打印来演示 UART 的使用方法。
硬件准备
你需要准备 XIAO nRF54L15 和 CH340 器件。
| Seeed Studio XIAO nRF54L15 Sense | CH340G USB to Serial (TTL) Module&Adapter |
|---|---|
![]() | ![]() |
软件
在 XIAO nRF54L15 上,D6 和 D7 分别对应 TX 和 RX 引脚。在 lolren 的引脚重定义文件中,D6 和 D7 被定义为 PIN_SERIAL1_RX 和 PIN_SERIAL1_TX。可用的串口为 Serial1 或 Serial2。
如果你不熟悉 XIAO nRF54L15 的引脚分布,请点击 XIAO nRF54L15 Pin List 查看。
不要将 PIN_SERIAL1_RX 和 PIN_SERIAL1_TX 用于 Serial(USB 串口)。
这会干扰默认的下载和调试通道,并可能导致程序烧录失败(SWD/CDC 故障)。
#define RX_PIN PIN_SERIAL1_RX
#define TX_PIN PIN_SERIAL1_TX
#define BAUD 115200
void setup() {
// Set RX and TX pins
Serial1.setPins(RX_PIN, TX_PIN);
// Initialize baud rate and communication configuration
Serial1.begin(BAUD, SERIAL_8N1);
}
void loop() {
Serial1.print("Hello XIAO nRF54L15!\n");
delay(1000);
}
结果
接线
| XIAO nRF54L15 | CH340G USB 转串口 (TTL) 模块与适配器 |
|---|---|
| RX | TX |
| TX | RX |
| GND | GND |
| VBUS | 5V |
打开任意串口监视工具,将波特率设置为 115200,即可观察输出数据。

模拟量
模拟引脚用于通过 ADC 读取连续的电压信号。它们可以连接到各种传感器,例如电位器、光敏电阻、用于温度检测的热敏电阻、模拟灰度传感器和红外传感器。本节通过读取电位器旋钮的调节值来演示模拟引脚的功能。
硬件准备
你需要准备 XIAO nRF54L15 Sense 和 Grove 设备。
| Seeed Studio XIAO nRF54L15 Sense | Grove-旋转角度传感器 | Seeed Studio Grove Base for XIAO |
|---|---|---|
![]() | ![]() | ![]() |
软件
在 XIAO nRF54L15 上有四组模拟引脚,即 A0 到 A3。在 lolren 提供的引脚重定义中,这些引脚被定义为 PIN_A0 到 PIN_A3。
如果你不熟悉 XIAO nRF54L15 的引脚分布,请点击 XIAO nRF54L15 Pin List 查看。
const int analogPin = PIN_A0;
void setup() {
Serial.begin(115200);
analogReadResolution(12);
}
void loop() {
int analogValue = analogRead(analogPin);
// Assume reference voltage is 3.3V
int voltage_mv = analogValue * 3300 / 4095;
Serial.printf("ADC value = %d\n", analogValue);
Serial.printf("Voltage = %d mV\n", voltage_mv);
delay(1000);
}
结果
将 Grove-旋转角度传感器连接到 Seeed Studio Grove Base for XIAO。

旋转旋钮,Arduino 串口监视器会打印 ADC 读数值和换算后的模拟电压。

I2C
I2C 是一种同步串行通信协议,它通过 SCL 时钟线和 SDA 数据线实现主从设备之间的多设备通信。XIAO nRF54L15 / Sense 提供了两组 I2C 接口。本节通过控制 Expansion Board Base for XIAO 上的 OLED 显示屏来演示 I2C 的功能。
硬件准备
你需要准备 XIAO nRF54L15 Sense 和带有 I2C 接口的设备。
软件
在 XIAO nRF54L15 上,D4 和 D5 分别作为 SCL 和 SDA 引脚。 在 lolren 框架中,引脚 D4 被重定义为 PIN_WIRE_SCL,引脚 D5 被重定义为 PIN_WIRE_SDA。
如果你不熟悉 XIAO nRF54L15 的引脚分布,请点击 XIAO nRF54L15 Pin List 查看。
#include <U8x8lib.h>
#include <Wire.h>
#define SCL PIN_WIRE_SCL
#define SDA PIN_WIRE_SDA
U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(/* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); // OLEDs without Reset of the Display
void setup(void) {
u8x8.begin();
u8x8.setFlipMode(0);
}
void loop(void) {
u8x8.setFont(u8x8_font_chroma48medium8_r);
u8x8.setCursor(2, 10);
u8x8.print("Hello World!");
u8x8.setCursor(1, 28);
u8x8.print("XIAO nRF54L15!");
}
结果
上传程序后,Expansion Board Base for XIAO 上会显示 “Hello World!” 和 “XIAO nRF54L15!” 这两行文字。

SPI
SPI 是一种同步串行、全双工通信协议。它通常使用四根线——SCK 时钟、MOSI、MISO 和 CS——在主从设备之间实现高速数据传输。与 I2C 相比,SPI 具有更高的传输速率、更低的延迟以及更简单直观的通信方式。但它需要更多的引脚,每个从设备通常占用一条独立的片选线。它常用于连接 Flash 存储器、SD 卡、LCD/OLED 显示屏、ADC/DAC 模块和高速传感器等高速外设。本节通过连接一块电子纸显示屏来演示 SPI 的用法。
硬件准备
你需要准备一块 XIAO nRF54L15 和一款支持 SPI 通信的设备。
| Seeed Studio XIAO nRF54L15 Sense | ePaper Driver Board for Seeed Studio XIAO | 2.9" Monochrome eInk |
|---|---|---|
![]() | ![]() | ![]() |
软件
- 安装 GxEPD2 库

根据 Lolren 的引脚重定义文件,修改并宏定义 SPI 引脚。
#include <Arduino.h>
#include <SPI.h>
#include <GxEPD2_BW.h>
#include <Fonts/FreeMonoBold9pt7b.h>
#include <Fonts/FreeMonoBold12pt7b.h>
// -------- Pin Definitions (from pins_arduino.h) --------
// PIN_D0=RST, PIN_D1=CS, PIN_D3=DC, PIN_D5=BUSY
// SPI: SCK=PIN_D8, MISO=PIN_D9, MOSI=PIN_D10 (macros are already defined)
#define EPD_RST PIN_D0 // 0
#define EPD_CS PIN_D1 // 1
#define EPD_DC PIN_D3 // 3
#define EPD_BUSY PIN_D2 // 5
// -------- 029BN-T94-D2 Driver --------
GxEPD2_BW<GxEPD2_290_T94_V2, GxEPD2_290_T94_V2::HEIGHT> display(
GxEPD2_290_T94_V2(EPD_CS, EPD_DC, EPD_RST, EPD_BUSY)
);
const char* LINE1 = "Hello XIAO nRF54L15";
void setup() {
Serial.begin(115200);
delay(2000);
Serial.println("=== EPaper Start ===");
// Close serial port to avoid TX(D1) interfering with CS(D1)
delay(100);
Serial.end();
// Directly specify using macros, fully consistent with pins_arduino.h
SPI.setPins(PIN_SPI_SCK, PIN_SPI_MISO, PIN_SPI_MOSI, -1);
SPI.begin();
// Pass 0 to disable GxEPD2 internal serial debug output
display.init(0);
display.setRotation(1); // Landscape 296×128
display.setTextColor(GxEPD_BLACK);
display.setFullWindow();
display.firstPage();
do {
display.fillScreen(GxEPD_WHITE);
// ---- LINE1: Large font, upper half ----
display.setFont(&FreeMonoBold12pt7b);
int16_t tbx, tby;
uint16_t tbw, tbh;
display.getTextBounds(LINE1, 0, 0, &tbx, &tby, &tbw, &tbh);
uint16_t x1 = (display.width() - tbw) / 2 - tbx;
uint16_t y1 = display.height() / 2 - 4;
display.setCursor(x1, y1);
display.print(LINE1);
} while (display.nextPage());
display.hibernate();
// Reopen serial port for confirmation after screen refresh
Serial.begin(115200);
delay(100);
Serial.println("=== Done ===");
}
void loop() {
delay(1000000);
}
结果
上传程序后,Hello XIAO nRF54L15 将显示在电子纸屏幕上。

常见问题
-
Q1:上传程序时,提示没有 py 的路径。
-
A:C:\Users\yourname\AppData\Local\Arduino15\packages\nrf54l15clean\hardware\nrf54l15clean\0.6.27\platform.txt。
- 将
tools.python3.cmd.windows=py修改为tools.python3.cmd.windows=python。 - 将
tools.python3.args.windows=-3修改为tools.python3.args.windows=。
- 将
技术支持与产品讨论
感谢您选择我们的产品!我们将为您提供多种支持,以确保您在使用我们产品的过程中尽可能顺利。我们提供多种沟通渠道,以满足不同的偏好和需求。









