mcpField
M
matlab-connect-arduino

matlab-connect-arduino

github.com/matlab開発1.2k53 回インストール1 日前に更新
リポジトリ

matlab-connect-arduino について

matlab-connect-arduinoは、USB経由でArduinoボードを検出し、MATLABから接続する手順を案内するスキルです。接続前に検出結果を示し、ポートの選択をユーザーに求めます。

主な機能

  1. 01ボードと利用可能なシリアルポートを検出
  2. 02デバイスのポート識別を案内
  3. 03ボードとポートをユーザーが選択
  4. 04標準ライブラリとタスク用ライブラリを選択
  5. 05接続エラー時に自動再試行せず停止

活用シーン

  1. 01USB接続されたArduinoボードを探す
  2. 02選択したボードにMATLABから接続
  3. 03センサーやアクチュエーター作業の接続準備

MCP 対応

このスキルはMATLAB MCP呼び出しを使い、ポートとボードの検出、およびArduino接続を行います。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/matlab/matlab-agentic-toolkit --skill matlab-connect-arduino

インストール後、Claude Code で/matlab-connect-arduinoを入力して読み込まれたか確認します。

同梱ファイルmanifest.yaml

詳細

MATLAB で Arduino ボードをセットアップする

USB 経由で Arduino ボードを検出、設定し、接続する手順をエージェントに案内します。各ステップで、ユーザーに状況を伝え、操作をユーザーが管理できるようにします。

使用する場面

  • ユーザーが MATLAB から Arduino ボードに接続したい場合
  • ユーザーが接続中の Arduino ボードの検出や一覧表示を求めている場合
  • ユーザーのタスクで、前提条件として Arduino への接続が必要な場合(センサーの読み取り、アクチュエーターの制御、I2C のスキャンなど)
  • ユーザーが Arduino、COM ポート、シリアルポート、またはハードウェアのセットアップについて言及した場合

使用しない場面

  • サポートされていない周辺機器用のカスタムアドオンライブラリを作成する場合(matlab-create-custom-arduino-library を参照)
  • Bluetooth または WiFi で Arduino に接続する場合(ここでは対象外です)
  • Arduino IDE またはサポートパッケージのインストールに関する問題
  • Simulink のハードウェアインザループのワークフロー
  • ワークスペースにすでに有効な arduino オブジェクトがあるタスク

ワークフロー

以下の手順を順番に実行してください。手順を省略したり、値を推測したりしないでください。

基本原則: 決して決めつけないでください。情報が不明確または曖昧な場合は、先に進む前に必ずユーザーに確認してください。

手順 1:ボードを検出する

必ず両方のコマンドを実行してください。arduinolist ですでにボードが見つかっていても、serialportlist を省略しないでください。これは必須要件です。

list = arduinolist
ports = serialportlist("available")

両方の呼び出しが必須です。 serialportlist を省略しないでください。arduinolist だけでは、サポートパッケージのファームウェアがないボードを検出できません。

arduinolist は、Port、Board、Status、Libraries の各列を含むテーブルを返します。ただし、R2026a 時点では接続中のすべてのボードを一覧表示できず、複数のボードが接続されていても 1 台しか表示されない場合があります。利用可能なポートをすべて検出するため、必ず serialportlist("available") も実行してください。

arduinolist が利用できない場合(R2024a より前)は、これをスキップし、serialportlist("available") のみを使用してください。

両方の結果をユーザーに提示してください。

手順 1b:「ボードが検出されない」場合の対応

arduinolist が空のテーブルを返し、かつ serialportlist("available") に明らかな Arduino のポートが表示されない場合(またはすべての接続試行が失敗する場合)、すべてのポートを手当たり次第に試さないでください。 代わりに、以下を実行してください。

  1. すぐに確認します:「Arduino ボードは USB で物理的に接続されていますか?」
  2. OS のツールを使った確認を案内します: オペレーティングシステムに応じて、適切な手順をユーザーに提示してください。
    • Windows:「デバイス マネージャー → ポート(COM と LPT)を開いてください。『Arduino』または『USB-SERIAL CH340』/『USB Serial Device』と表示されたデバイスはありますか? ない場合は、ボードが接続されていないか、ドライバーが必要な可能性があります。」
    • macOS:「ターミナルで ls /dev/cu.usb* を実行してください。Arduino ボードは通常、/dev/cu.usbmodem* または /dev/cu.usbserial* として表示されます。」
    • Linux:「ボードを接続した後、dmesg | tail -20 を実行してください。/dev/ttyACM* または /dev/ttyUSB* を探してください。」
  3. よくある解決策を提案します:
    • 別の USB ケーブルを試します(充電専用でデータ通信に対応していないケーブルもあります)
    • 別の USB ポートを試します
    • ボードの USB ドライバーをインストールします(クローン品には CH340、その他のボードには FTDI)
    • 他のアプリケーション(Arduino IDE のシリアルモニター、PuTTY など)がポートを使用していないことを確認します
    • arduino オブジェクトをクリアせずにボードを手動で切断した場合は、MATLAB を再起動してから再接続します
    • 詳細なトラブルシューティングについては、次のページをユーザーに案内します: https://www.mathworks.com/help/matlab/supportpkg/arduino-connection-failure.html
  4. 停止して待ちます。 ユーザーが応答するまで、手順 2 以降に進まないでください。ボードが接続されていないとユーザーが確認した場合は、ここでトラブルシューティングを続けてください。接続されている場合は、手順 1 に戻り、検出を再実行してください。
手順 2:ポートの特定をユーザーに案内する

シリアルポート名だけでは、どのデバイスが接続されているかユーザーにはわかりません。どのポートが Arduino ボードに対応しているか、ユーザーが特定できるよう案内してください。

  • Windows:「デバイス マネージャーの[ポート]セクションを確認し、どの COM ポートが Arduino ボードに対応しているかを調べてください。」
  • macOS:「/dev/cu.usbmodem* または /dev/cu.usbserial* の項目を探してください。通常、これらが Arduino ボードです。」
  • Linux:「dmesg | grep tty を確認するか、/dev/ttyACM* および /dev/ttyUSB* デバイスを探してください。」
ステップ 3:ユーザーにボードを選んでもらう

検出されたボード/ポートを提示し、接続するものをユーザーに尋ねます。 ボードを自動選択してはいけません。

次の項目を尋ねます。

  1. ポート(必須)— 接続先の COM ポート/デバイスパス
  2. ボードタイプ(任意)— ユーザーがわからない場合は、 arduino('<port>') を使用します。ボードタイプが自動検出されます。

複数のボードを使用する場合は、ポートごとに各ボードを特定し、 それぞれの用途をユーザーに尋ねます。

ステップ 4:ライブラリを決定する

デフォルトのライブラリは {'I2C', 'SPI', 'Servo'} です。Libraries 引数を指定しない場合、MATLAB によって自動的に読み込まれます。

ライブラリの方針:

  1. デフォルトのライブラリから開始します:{'I2C', 'SPI', 'Servo'}
  2. 次の対応表を使用して、ユーザーのプロンプトから追加のライブラリを推測します。
ユーザーが言及した内容追加するライブラリ
超音波、距離センサー、HC-SR04'Ultrasonic'
シフトレジスター、74HC595'ShiftRegister'
ロータリーエンコーダー、直交エンコーダー'RotaryEncoder'
モーターシールド、Adafruit モーター'Adafruit/MotorShieldV2'
モーターキャリア、MKR モーター'MotorCarrier'
CAN バス'CAN'
シリアルデバイス、UART'Serial'
APDS9960、ジェスチャー、カラーセンサー'APDS9960'

上の表からライブラリを推測するのは、明確に一致し、曖昧さがない場合に限ります。 不確かな場合は、ライブラリを推測せずユーザーに尋ねます。

  1. ユーザーに伝えます:含めるライブラリとその理由
  2. ユーザーに尋ねます:ほかに必要なライブラリがあるか
  3. 利用可能なライブラリを尋ねられた場合は、listArduinoLibraries を実行し、 全リストを提示します
ステップ 5:接続する

収集した情報に基づいて arduino() の呼び出しを組み立てます。

% TEMPLATE — not executable
% With board type known + custom libraries:
a = arduino('<port>', '<board>', 'Libraries', {'I2C', 'SPI', 'Servo', ...});

% With board type known, default libraries only:
a = arduino('<port>', '<board>');

% Auto-detect board type (uses libraries already flashed on board):
a = arduino('<port>');

重要: ボードタイプを指定せずに 'Libraries' を指定することはできません。ユーザーがボードタイプを知らないものの、追加のライブラリが必要な場合は、まず arduino('<port>') を実行して自動検出し、次に a.Board を読み取って、ボードタイプとライブラリを指定して再接続します。

接続に失敗した場合:

  1. 直ちに停止します — 自動で再試行してはいけません
  2. 正確なエラーメッセージをユーザーに報告します
  3. エラーに基づいて、対象を絞った修正方法を 1~2 件提示します
  4. ユーザーが明示的に指示しない限り、異なるポートやボードタイプで再試行してはいけません

よくある問題:

  • ポートが使用中(別のアプリケーションがポートを開いている)
  • 「Device in use」— ワークスペースに arduino オブジェクトがすでに存在しています。再接続する前に、ユーザーが clear する必要があります
  • 指定されたボードタイプが間違っている
  • ボードのファームウェアをリセットする必要がある(リセットボタンをすばやく 2 回押す)
ステップ 6:確認して引き継ぐ

接続が成功したら:

  1. ユーザーに確認します: 「ライブラリ:[リスト] を使用して、[ポート] 上の [ボード] への接続が確立されました。」
  2. ユーザーのプロンプトに接続以外のタスクが含まれている場合(例: 「LED を点滅させる」「超音波センサーを読み取る」)、次のように伝えます:「[タスク] を続行します……」その後、後続のワークフローに進みます。

主な関数

関数目的利用可能なバージョン
arduinolist接続されている Arduino ボードを検出します(テーブル形式で出力)R2024a
serialportlist("available")利用可能なシリアルポートをすべて一覧表示しますR2019b
arduino(port)ボードタイプを自動検出して接続します(デフォルトのライブラリを使用)R2014b
arduino(port, board)指定したボードに接続します(デフォルトのライブラリを使用)R2014b
arduino(port, board, 'Libraries', libs)指定したボードとカスタムライブラリを使用して接続しますR2014b
listArduinoLibraries利用可能なアドオンライブラリをすべて一覧表示しますR2014b

パターン

単一ボードの接続
% TEMPLATE — not executable
% Step 1: Discover
list = arduinolist;
ports = serialportlist("available");

% Step 3-5: Connect (after user selects port and board is known)
a = arduino('COM8', 'Nano33BLE', 'Libraries', {'I2C', 'SPI', 'Servo', 'Ultrasonic'});
複数ボードの接続
% TEMPLATE — not executable
% Connect to each board with its own variable and libraries
a1 = arduino('COM8', 'Nano33BLE', 'Libraries', {'I2C', 'SPI', 'Servo'});
a2 = arduino('COM52', 'Uno', 'Libraries', {'I2C', 'SPI', 'Servo', 'Ultrasonic'});

よくある間違い

間違い誤りである理由正しい方法
引数を指定せずに arduino() を使用するユーザーの同意なく任意のボードに接続します必ず最初に検出し、ユーザーに選択してもらいます
COM ポートまたはボードの種類を推測する間違ったポートで時間を浪費したり、誤ったボードを書き換えたりしますユーザーに確認するか、ポートのみを指定して自動検出を使用します
必要なライブラリだけを読み込む後からライブラリを追加して再接続すると、30 秒以上かかりますデフォルトの {'I2C','SPI','Servo'} に、推測される追加ライブラリを加えて読み込みます
ボードを指定せずに arduino(port, 'Libraries', libs) を使用するエラー:名前と値のペアより前に、ポートとボードの両方を指定する必要がありますarduino(port, board, 'Libraries', libs) を使用するか、デフォルトで自動検出するには arduino(port) を使用します
arduinolist が成功したときに serialportlist を省略するサポートパッケージのファームウェアがないボードや、R2024a より前のボードを見逃します必ず両方を実行します。arduinolist が結果を返す場合でも、serialportlist は必須です
ポートを空けるためにプロセスを終了するユーザーの同意なく破壊的な操作を行いますポートの競合を報告し、他のアプリケーションを終了するようユーザーに依頼します

規約

  • 検出手順ごとに、必ず arduinolist と serialportlist("available") の両方を実行します。arduinolist ですでにボードが見つかっている場合も同様です。serialportlist は arduinolist が認識しないボードを検出します。
  • 操作を行う前に、検出した情報を必ずユーザーに提示します
  • ボードの種類は任意です。ユーザーが分からない場合は、MATLAB に自動検出させます
  • デフォルトのライブラリ {'I2C', 'SPI', 'Servo'} は必ず含めます
  • ユーザーに確認せず、破壊的な操作(プロセスの終了、ワークスペースの消去など)を決して行いません
  • 接続手順と、その後のタスク実行を明確に分けます
  • Arduino ハードウェアは共有できません。一度に接続を保持できる MATLAB セッションは、各ボードにつき 1 つだけです。それぞれが Arduino ハードウェアへの接続を試みる複数のエージェントを並行して実行しないでください。Arduino のワークフローは順番に実行します。

Copyright 2026 The MathWorks, Inc.


コメント