戻る

222個のSeeed Groveモジュールがブラウザで動作するようになりました

GroveはSeeed Studioのプラグアンドプレイシステムです。4ピンのコネクタ、1本のケーブル、そしてそれを共有する数百のモジュールで構成されています。ボタン、温度センサー、リレー、OLED、サーモカメラ、LoRa無線がすべて同じソケットに接続できるため、多くの最初のプロジェクトがこれを使って作られています。

2026年9月現在、SeeedのGroveカタログにある279モジュールのうち222個がVelxioで動作します。それぞれがキャンバス上に独自のパーツとして描画され、製品写真をもとにした外観、Seeedのストアへのリンク付きデータシートカード、そしてSeeed自身のwikiからXIAOボード向けに配線を適合させたギャラリー例を備えています。この記事では、それが実際に何を意味するのかを順に見ていきます。

キャンバス上でのGroveモジュールの見え方

Velxioが描画する16個のGroveモジュール — 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の正確な製品名を保持しています。ピンはコネクタの4本のラインで、シルク印刷の名称どおりに命名されているため、SIGやSDAからの配線は実機の作業台と同じ場所に接続されます。

各パーツで得られるものは次のとおりです。

見つけるには、コンポーネントピッカーを開いて「Grove」と入力するか、サンプルギャラリーを開いてSeeed Studioでフィルタリングしてください。

3つを試してみる

手順はどの例でも同じです。

  1. サンプルのリンクを開きます。アカウントは不要です。
  2. ツールバーの再生ボタンを押します。スケッチはVelxioのサーバーでコンパイルされ、ボードがブラウザ内で起動します。
  3. モジュールのスライダーを動かすか、ボタンをクリックするか、描画を眺めます。

サーモカメラ。 MLX90640は32×24のサーモパイルアレイです。スケッチはセンサーのキャリブレーションEEPROMを読み出し、1フレームを取得してMelexis自身の放射測定演算を実行し、そのフレームをASCIIアートとしてシリアルモニターに出力します。パーツは同じフレームをヒートマップとして表示し、スライダーでホットスポットの位置と温度を設定できます。

キャンバス上のMLX90640サーモカメラ。XIAO ESP32-C6に配線され、32×24フレームの中央に温かいスポットを表示している

1つのドライバで2つのモーター。 I2C Motor Driverは、コマンドプロトコルを話す小型のSTM32の背後にTB6612FNGを搭載しています。サンプルは2つのDCモーターを正転、逆転、ブレーキで動作させます。キャンバス上のローターは指令された速度と方向で回転し、ブレーキはそれらをロックします。

キャンバス上のGrove I2C Motor Driverが2つのDCモーターを駆動。XIAO ESP32-C6に配線されている

OLED。 0.96インチのSSD1315は、ほとんどのGroveキットに同梱されているディスプレイです。サンプルはSeeedのu8g2 hello worldで、1行のテキストとカウンターをI2Cの0x3C経由で送信し、コントローラーのモデルがそれを描画します。

キャンバス上のGrove OLED 0.96インチがHello Worldとカウンターを表示。XIAO ESP32-C6に配線されている

モジュールはどのようにエミュレートされるか

ここではライブラリレベルで偽装されているものは何もありません。スケッチは選択したボード向けに本物のarduino-cliでコンパイルされ、ファームウェアはそのSoC向けのVelxioのエミュレーター上で動作し、モジュールは実機と同じように回線上で応答します。モジュールごとに異なるのは「回線」が何であるかです。

デバイスモデルは短くて済みます。ほとんどのパーツはいくつかの形のうちの1つに従うからです。自動インクリメントポインタ付きのレジスタマップ、各ワードに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は2つのスライダーです。変換はSHT31のデータシートにあるものを逆に実行したものです。スライダーが25度を示せば、モデルはドライバーが再び25度に変換する生のワードを、CRCも含めて生成します。

モデルの出所

各モデルは、あるドキュメントに基づいて書かれています。それは部品のデータシート、あるいはその部品と通信するベンダーライブラリであり、一行ずつ読み込まれます。どちらも存在しない場合、モジュールは推測されるのではなく、除外されました。その意味を示す3つのケースを紹介します。

サーマルカメラは転記ではなく導出が必要でした。 サーマルドライバは温度を読むことはありません。832ワードのEEPROMを読み出し、約200個のキャリブレーション定数を抽出し、832ワードのフレームデータを読み取り、メーカーのモデルを実行します。そこでMLX90640モデルは、すべての補正項が消える縮退したキャリブレーションを提供し、スライダーが要求する温度からそれを生成する生のワードへと逆算します。Cコードを書く前に、ドライバの移植版と照合して確認されました。-20~300度の目標値は0.02度以内で往復します。MLX90641には同じトリックに加えてハミング符号化されたEEPROMが必要で、Seeedが何も公開していないMLX90621は、Melexisのリファレンスドライバから作られました。

モータードライバの例は生のWireを使用しています。 SeeedのTB6612FNGボード用ライブラリは、ESP32ではコンパイルできないAVR時代のI2Cヘルパーを同梱しているため、例ではプロトコルを直接扱います。それはコマンドバイトとそのペイロードです。

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がモデル化されておらず、モデル化できたもののうち3つのグループが該当します。

残りはケーブル、取り付けハードウェア、キットです。

次にどこへ行くか

モジュールのアートはSeeed Studioの製品写真から描かれています。


共有:
David Montero

執筆者

David Montero

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

GitHub velxio.dev

関連記事


次の記事
Seeedの新しいXIAO IPSディスプレイボードが、発売から数日でブラウザ上で動作