Назад

222 модуля Seeed Grove теперь работают в браузере

Grove — это система «подключи и работай» от Seeed Studio: четырёхконтактный разъём, один кабель и несколько сотен модулей, которые его используют. Кнопка, датчик температуры, реле, OLED, тепловизионная камера и радиомодуль LoRa — всё это подключается в один и тот же разъём, поэтому так много первых проектов строится на нём.

По состоянию на сентябрь 2026 года 222 из 279 модулей каталога Grove от Seeed работают в Velxio. У каждого есть собственная деталь на холсте, нарисованная по фотографии продукта, карточка с даташитом и ссылкой на магазин Seeed, а также пример из галереи, адаптированный из вики Seeed и подключённый к плате XIAO. Эта статья рассказывает, что это значит на практике.

Как модуль Grove выглядит на холсте

Шестнадцать модулей Grove в том виде, как их рисует Velxio: Button, Light Sensor v1.2, SHT31, OLED 0.96", Ultrasonic Distance Sensor, DHT22 Pro, Chainable RGB LED V2, Relay, тепловизионная камера MLX90640, Vision AI Module V2, LoRa Radio 868 MHz, NFC PN532, 16x2 LCD RGB Backlight, I2C Motor Driver TB6612FNG, Triple Color E-Ink 2.13" и модуль CAN BUS

Каждый модуль нарисован по фотографии продукта Seeed, с разъёмом, компонентами и шелкографией там, где они находятся на плате, и носит точное название продукта Seeed. Контакты — это четыре линии разъёма, названные так, как их обозначает шелкография, поэтому провод от SIG или SDA попадает туда, куда попал бы на столе.

Что вы получаете с каждой деталью:

Чтобы найти их, откройте выбор компонентов и введите «Grove» или откройте галерею примеров и отфильтруйте по Seeed Studio.

Попробуйте три из них

Шаги одинаковы для каждого примера:

  1. Откройте ссылку на пример. Учётная запись не нужна.
  2. Нажмите кнопку воспроизведения на панели инструментов. Скетч компилируется на серверах Velxio, а плата загружается в вашем браузере.
  3. Двигайте ползунки модуля, нажимайте его кнопки или наблюдайте, как он рисует.

Тепловизионная камера. MLX90640 — это матрица термопар размером 32 на 24. Скетч считывает калибровочный EEPROM датчика, получает кадр и выполняет собственную радиометрическую математику Melexis, а затем выводит кадр в монитор последовательного порта в виде ASCII-графики. Деталь показывает тот же кадр в виде тепловой карты; ползунок задаёт, где находится горячая точка и насколько она тёплая.

Тепловизионная камера MLX90640 на холсте, подключённая к XIAO ESP32-C6, показывает тёплое пятно в середине кадра 32 на 24

Два мотора на одном драйвере. I2C Motor Driver несёт TB6612FNG за небольшим STM32, который говорит на командном протоколе. Пример запускает два двигателя постоянного тока вперёд, назад и тормозит; роторы на холсте вращаются с заданной скоростью и в заданном направлении, а торможение их блокирует.

Grove I2C Motor Driver на холсте, управляющий двумя двигателями постоянного тока, подключённый к XIAO ESP32-C6

OLED. 0.96” SSD1315 — это дисплей, с которым поставляется большинство наборов Grove. Пример — это Seeed-версия u8g2 hello world: строка текста и счётчик, отправляемые по I2C на адрес 0x3C и отрисовываемые моделью контроллера.

Grove OLED 0.96" на холсте, показывающий Hello World и счётчик, подключённый к XIAO ESP32-C6

Как эмулируется модуль

Здесь ничего не подделывается на уровне библиотек. Скетч компилируется настоящим arduino-cli для выбранной вами платы, прошивка выполняется на эмуляторе Velxio для этого SoC, а модуль отвечает по линии так, как ответила бы настоящая деталь. От модуля к модулю различается то, что представляет собой «линия»:

Модели устройств короткие, потому что большинство деталей следуют одной из нескольких форм: карта регистров с автоинкрементным указателем, командное устройство в стиле Sensirion с CRC-8 на каждом слове или плоский кадр, который потоково передаёт датчик. Модель 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 с кодом Хэмминга, а MLX90621, для которого Seeed ничего не публикует, был сделан по референсному драйверу Melexis.

Пример драйвера мотора использует сырой Wire. Библиотека Seeed для платы TB6612FNG включает I2C-помощник эпохи AVR, который не компилируется для 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, длина, команда, полезная нагрузка и CRC по MODBUS.

У каждой модели есть тест, который управляет ею так же, как её драйвер, байт за байтом: 1804 таких теста по всему каталогу в сентябре 2026 года. Примеры из галереи тоже запускались на развёрнутом приложении, а не только в наборе тестов.

Чего нет в каталоге

Скажем прямо о пробелах: 57 из 279 артикулов не смоделированы, и три группы объясняют те из них, которые можно было бы сделать.

Остальное — кабели, крепёж и наборы.

Куда двигаться дальше

Графика модулей отрисована по продуктовым фотографиям Seeed Studio.


Поделиться:
David Montero

Автор

David Montero

Creator of Velxio, the open-source circuit and Arduino simulator.

GitHub velxio.dev

Похожие статьи


Следующая статья
Новые платы XIAO с IPS-дисплеями от Seeed — работают в браузере через несколько дней после анонса