Firmataは、ホストコンピュータ上のソフトウェアからArduinoや86Duinoなどのマイクロコントローラと通信するための汎用プロトコルです。プロトコルの詳細はWikiページをご覧ください。Firmataプロトコルの詳細については、http://firmata.orgをご覧ください。
Firmata ライブラリは Firmata プロトコルを実装しており、使用しているプログラミング環境用に独自のプロトコルやオブジェクトを作成することなく、カスタムファームウェアを作成できます。(Firmata ライブラリを介して 86Duino が Processing と通信する様子を示す ビデオ をご覧いただくと興味深いかもしれません。)
方法
Firmata.begin: ライブラリを起動するFirmata. begin(long): ライブラリを起動し、デフォルトのボーレートを上書きしますFirmata.printversion: プロトコルバージョンをホストコンピュータに送信するFirmata.blinkVersion: ピン13のプロトコルバージョンを点滅させるFirmata.printFirmwareVersion: ファームウェアの名前とバージョンをホストコンピュータに送信しますFirmata.setFirmwareVersion(byte major, byte minor): スケッチのファイル名から .pde を除いたファームウェア名とバージョンを設定します。
メッセージの送信:
Firmata.sendAnalog(byte pin, int value): アナログメッセージを送信するFirmata.sendDigitalPorts(byte pin, byte firstPort, byte secondPort): デジタルポートをindividual bytesとして送信します。Firmata.sendDigitalPortPair(byte pin, int value): デジタルポートを1つのintとして送信するFirmata.sendSysex(byte command, byte bytec, byte* bytev): 任意のバイト配列を含むコマンドを送信するFirmata.sendString(const char* string):ホストコンピュータに文字列を送信するFirmata.sendString(byte command, const char* string): カスタムコマンドタイプを使用してホストコンピュータに文字列を送信します
メッセージの受信:
Firmata.available(): バッファに着信メッセージがあるかどうかを確認しますFirmata.processInput(): バッファから受信したメッセージを処理し、登録されているコールバック関数にデータを送信します。Firmata.attach(byte command, callbackFunction myFunction): 受信メッセージタイプに関数を添付するFirmata.detach(byte command): 受信メッセージタイプから関数を切り離す
コールバック関数
関数をメッセージタイプにアタッチするには、関数が標準のコールバック関数と一致している必要があります。Firmataには現在、generic、string、sysexの3種類のコールバック関数があります。
- generic
void callbackFunction(byte pin, int value); - system_reset
void systemResetCallbackFunction(void); - string
void stringCallbackFunction(char *myString); - sysex
void sysexCallbackFunction(byte pin, byte byteCount, byte *arrayPointer);
メッセージの種類:
これらは関数を添付できるさまざまなメッセージ タイプです。
ANALOG_MESSAGE: 1つのピンのアナログ値DIGITAL_MESSAGE: 8ビットのデジタルピンデータ(1ポート)REPORT_ANALOG: アナログピンのレポートを有効/無効にするREPORT_DIGITAL: デジタルポートのレポートを有効/無効にするSET_PIN_MODE: ピン モードをINPUT/OUTPUT/PWMなどに変更します。FIRMATA_STRING: Cスタイルの文字列。関数型にはstringCallbackFunctionを使用します。SYSEX_START: 汎用の任意長メッセージ(MIDI SysExプロトコル経由)。関数タイプにはsysexCallbackFunctionを使用します。SYSTEM_RESET: ファームウェアをデフォルト状態にリセットするメッセージ。関数タイプにはsystemResetCallbackFunctionを使用します。
例
この例では、Firmata を使用してアナログ メッセージを送受信する方法を示します。
#include <Firmata.h>
byte analogPin;
void analogWriteCallback(byte pin, int value)
{
pinMode(pin,OUTPUT);
analogWrite(pin, value);
}
void setup()
{
Firmata.setFirmwareVersion(0, 1);
Firmata.attach(ANALOG_MESSAGE, analogWriteCallback);
Firmata.begin();
}
void loop()
{
while(Firmata.available()) {
Firmata.processInput();
}
for(analogPin = 0; analogPin < TOTAL_ANALOG_PINS; analogPin++) {
Firmata.sendAnalog(analogPin, analogRead(analogPin));
}
}デモビデオ
ライブラリリファレンスホーム
86Duinoリファレンスのテキストは、Arduinoリファレンスを改変したもので、Creative Commons Attribution-ShareAlike 3.0ライセンスに基づいてライセンスされています。リファレンス内のコードサンプルはパブリックドメインとして公開されています。