Grove 是 Seeed Studio 的即插即用系统:一个四针连接器、一根线缆,以及数百个共用它的模块。一个按钮、一个温度传感器、一个继电器、一块 OLED、一台热成像相机和一个 LoRa 无线电,全都插在同一个插座上,这也是为什么如此多的入门项目都建立在它之上。
截至 2026 年 9 月,Seeed 的 Grove 目录中 279 个模块里有 222 个可以在 Velxio 中运行。每一个模块在画布上都有自己的元件,依据产品照片绘制,带有一张数据手册卡片(内含 Seeed 商店的链接),以及一个改编自 Seeed 自家 wiki 的示例库示例,并已连接到一块 XIAO 开发板。本文带你了解这在实践中意味着什么。
Grove 模块在画布上是什么样子

每个模块都依据 Seeed 的产品照片绘制,连接器、元件和丝印都位于它们在板子上的实际位置,并且使用 Seeed 的准确产品名称。引脚就是连接器的四条线,按照丝印上的名称命名,因此从 SIG 或 SDA 引出的导线会落在它在实验台上该落的位置。
每个元件你都能得到:
- 一张数据手册卡片。 点击元件,对话框会显示该模块是什么、搭载了哪颗芯片、它的 I2C 地址(如果有的话),以及一个指向 Seeed 商店的 Product page 按钮。
- 真实模块所需的控件。 模拟传感器会得到一个用于它所测量物理量的滑块。按钮可以点击。继电器会咔哒作响并点亮它的 LED。显示屏会绘制 sketch 发送的内容。无线电会得到一个面板,用来播放链路另一端的内容。
- 一个示例库示例。 每个模块都附带一个改编自 Seeed wiki 的 sketch,连接到一块 XIAO ESP32-C6,并且该 sketch 所需的库都已声明好。打开它,按下 Run,模块就会响应。
要找到它们,打开元件选择器并输入 “Grove”,或者打开示例库并按 Seeed Studio 筛选。
试试其中三个
每个示例的步骤都一样:
- 打开示例链接。你不需要账号。
- 按下工具栏上的播放按钮。sketch 会在 Velxio 的服务器上编译,开发板会在你的浏览器中启动。
- 移动模块的滑块、点击它的按钮,或者看着它绘制。
一台热成像相机。 MLX90640 是一个 32 乘 24 的热电堆阵列。该 sketch 会读取传感器的校准 EEPROM,读取一帧并运行 Melexis 自家的辐射测量数学运算,然后将该帧以 ASCII 艺术的形式打印到串口监视器。元件会以热力图的形式显示同一帧;滑块设定热点在哪里以及有多热。

一个驱动器上的两个电机。 I2C Motor Driver 在一颗小型 STM32 后面搭载了一颗 TB6612FNG,该 STM32 使用一种命令协议通信。该示例让两个直流电机正转、反转和制动;画布上的转子会按命令的速度和方向转动,而制动会将它们锁住。

一块 OLED。 0.96” SSD1315 是大多数 Grove 套件附带的显示屏。该示例是 Seeed 的 u8g2 hello world:一行文本和一个计数器,通过 I2C 在 0x3C 地址发送,由控制器的模型绘制出来。

模块是如何被仿真的
这里没有任何东西是在库层面伪造的。sketch 由真正的 arduino-cli 针对你所选的开发板编译,固件在 Velxio 针对该 SoC 的仿真器上运行,模块会像真实元件那样在总线上响应。模块与模块之间的区别在于”总线”是什么:
- 模拟模块(共 32 个:光线、声音、湿度、气体、电流、温度)会在
SIG上放置一个由滑块设定的电压。sketch 通过开发板的 ADC 模型用analogRead()读取它。 - 数字输入和输出是
SIG上的一个电平:一侧是按钮、开关、PIR 和触摸传感器,另一侧是 LED、继电器和蜂鸣器。 - 脉冲和时序模块,例如 Ultrasonic Ranger 和 DHT 系列,使用线路模型:边沿按被仿真 CPU 自己的时钟来调度,因为一个 DHT22 帧是微秒级的,而一个浏览器帧是十六毫秒。
- NeoPixel 和 PWM 模块会解码 sketch 产生的波形。
- I2C、UART 和 SPI 模块是最大的一组:84 个模块基于 78 个用 C 编写并编译为 WebAssembly 的设备模型。每个模型都会响应厂商驱动发送的寄存器读取和命令,同一份 C 源代码既在浏览器内运行,也在 Velxio 的云端仿真器中为在那里运行的开发板运行。
设备模型都很短,因为大多数元件都遵循少数几种形态之一:带自动递增指针的寄存器映射、每个字都带 CRC-8 的 Sensirion 风格命令设备,或者传感器流式输出的扁平帧。SHT31 模型就是 Seeed 温湿度传感器的全部内容,去掉注释后:
static uint32_t handle(sn_dev* d, uint16_t cmd, const uint16_t* args, uint32_t nargs, uint16_t* w) {
(void)d; (void)args; (void)nargs;
switch (cmd) {
case 0x306D: heater = true; return 0;
case 0x3066: heater = false; return 0;
case 0x30A2: heater = false; return 0; /* soft reset */
case 0x3093: return 0; /* break */
case 0x3041: return 0; /* clear status */
case 0xF32D: { /* status register */
uint16_t st = heater ? 0x2000 : 0x0000;
w[0] = st; return 1;
}
default: break;
}
/* Everything else is a measurement request (single shot, periodic, fetch). */
double t = vx_attr_read(A_temp) + (heater ? 2.0 : 0.0);
double h = vx_attr_read(A_hum);
w[0] = gc_u16((gc_clamp(t, -45, 130) + 45.0) * 65535.0 / 175.0);
w[1] = gc_u16(gc_clamp(h, 0, 100) * 65535.0 / 100.0);
return 2;
}
A_temp 和 A_hum 就是那两个滑块。转换就是 SHT31 数据手册中的那个,反向运行:滑块说 25 度,模型产生驱动会再转回 25 度的原始字,CRC 等等一应俱全。
模型从何而来
每个模型都是依据一份文档编写的:要么是元件的数据手册,要么是与它通信的厂商库,逐行阅读。当两者都不存在时,该模块会被略过,而不是靠猜测。有三个案例可以说明这意味着什么。
热成像相机必须推导,而非照搬。 热成像驱动从不直接读取温度。它会拉取 832 字的 EEPROM,提取约两百个校准常数,读取 832 字的帧数据,然后运行厂商的模型。因此,MLX90640 模型提供了一份退化校准,其中每一项修正项都为零,并从滑块所要求的温度反向推算出产生该温度的原始字。在编写任何 C 代码之前,它已对照该驱动的移植版本进行了验证;目标范围 -20 到 300 度,往返误差在 0.02 度以内。MLX90641 需要同样的技巧,外加一个汉明编码的 EEPROM;而 Seeed 未发布任何资料的 MLX90621,则来自 Melexis 的参考驱动。
电机驱动示例使用原生 Wire。 Seeed 为 TB6612FNG 板提供的库内置了一个 AVR 时代的 I2C 辅助程序,无法为 ESP32 编译,因此该示例直接使用协议通信。它是一个命令字节及其负载:
const uint8_t ADDR = 0x14;
const uint8_t BRAKE = 0x00, CW = 0x02, CCW = 0x03;
const uint8_t STANDBY = 0x04, NOT_STANDBY = 0x05;
const uint8_t CHA = 0, CHB = 1;
void cmd(uint8_t c, const uint8_t* payload, uint8_t n) {
Wire.beginTransmission(ADDR);
Wire.write(c);
for (uint8_t i = 0; i < n; i++) Wire.write(payload[i]);
Wire.endTransmission();
delay(1);
}
void run(uint8_t channel, int speed) {
uint8_t p[2] = { channel, (uint8_t)(speed < 0 ? -speed : speed) };
cmd(speed >= 0 ? CW : CCW, p, 2);
}
CAN BUS 模块并非 Seeed 的设计。 它最初被略过,因为 Seeed 没有为其发布任何协议和库。该板由 Longan Labs 制造,他们两者都发布了,模型遵循他们的帧格式:0xAA、一个长度、一个命令、负载以及一个 MODBUS CRC。
每个模型都有一个测试,按照其驱动的方式逐字节驱动它:截至 2026 年 9 月,整个目录中共有 1,804 个测试。图库示例也已在部署的应用上运行过,而不仅仅是在测试套件中。
目录中缺少什么
坦诚面对这些缺口:279 个 SKU 中有 57 个尚未建模,而其中本可以建模的部分由三个类别构成。
- DMX512 模块。 该板是一个线路驱动器;难点在于没有任何 Arduino 库能以该板期望的方式在 XIAO 上生成 DMX 帧。
- 433 MHz Simple RF Link 套件。 它的示例程序使用 VirtualWire,而该库不在 Arduino 库索引中,并且接收端需要该模块向板生成比特流,而不是应答它。
- 三块以 Grove 名义销售的板:Grove Beginner Kit、Arduino Sensor Kit Base 和 GrovePi+。它们是带有微控制器的板,而非模块,需要各自的板定义。
其余的是线缆、安装硬件和套件。
接下来去哪里
- 元件选择器:在画布上按 Add Component,然后输入 “Grove”。每张卡片都是一个模块;描述说明了它的功能。
- velxio.dev/examples 上的示例图库,按 Seeed Studio 筛选,每个模块都有一个示例。
- 这些模块在 Seeed 商店的 Grove 分类下;每个元件的数据手册卡片都链接到其页面。
模块插图取自 Seeed Studio 的产品照片。