Firmata

Firmataライブラリ

Firmataライブラリはホストコンピュータ上のソフトウェアと通信するためのFirmataプロトコルを実装する。これによりプログラム環境ごとに独自プロトコルやオブジェクトをを作成することなく、カスタムファームウェアを書くことができる。

このライブラリを使うためには、以下を宣言する。

#include <Firmata.h> 

メソッド

void begin();
ライブラリを開始する。
void begin(long);
ライブラリを開始する。デフォルトの通信速度をオーバーライドする。
void begin(Stream &s);
ライブラリを(シリアルやEthernetClientではなく)Streamを使って開始する。
void printVersion(void);
プロトコルバージョンをホストコンピュータに送信する。
void blinkVersion(void);
プロトコルバージョンを13番ピンで点滅させる。
void printFirmwareVersion(void);
ファームウェア名とバージョンをホストコンピュータに送信する。
setFirmwareVersion(x, y);
スケッチのファイル名から.inoをとったファイル名を使って、ファームウェア名とバージョンを設定する。(訳者註:xがメジャーバージョン、yがマイナーバージョンです。ファイル名は自動設定されます。また、原文では、「.ino」をとると書いてありますが、ソースコードでは、「.cpp」がとられています。 )
void FirmataClass::setFirmwareNameAndVersion(const char *name, byte major, byte minor);
ファームウェアの名前とバージョンの両方を設定する。

メッセージ送信

void sendAnalog(byte pin, int value);
アナログメッセージを送信する。
sendDigitalPorts(byte pin, byte firstPort, byte secondPort)
デジタルポートを個別のバイトとして送信する。 (訳者註:このメソッドはソースコードには入っていませんでした。かわりに、void sendDigitalPort(byte portNumber, int portData); というメソッドの定義はありました。 )
void sendString(const char* string);
文字列をホストコンピュータに送信する。
void sendString(byte command, const char* string);
カスタムコマンドを使って文字列をホストコンピュータに送信する。
void sendSysex(byte command, byte bytec, byte* bytev);
任意のバイト配列を送信する。
void FirmataClass::write(byte c);
ストリームに1バイト書き込む。

メッセージ受信

int available(void);
バッファにメッセージを受信しているか調べる。
void processInput(void);
バッファに受信したメッセージを処理し、登録されたコールバック関数にデータを送信する。
void attach(byte command, callbackFunction newFunction);
メッセージタイプに従ったコールバック関数を登録する。
void detach(byte command);
メッセージタイプに従ったコールバック関数を削除する。

ユーティリティメソッド

void FirmataClass::sendValueAsTwo7bitBytes(int value);
値を2バイトで書き込む
void FirmataClass::startSysex(void);
sysexメッセージを開始する。
void FirmataClass::endSysex(void);
sysexメッセージを終了する。

コールバック関数

メッセージタイプに対応したコールバック関数を登録するためには、コールバック関数は標準コールバック関数に適合する必要がある。現在のFirmataには、genericとstring、sysexの3種類のコールバック関数の型が存在する(訳者註:system_resetを含めた4種類存在します)。

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 // 一つのピンのアナログ値

DIGITAL_MESSAGE // 一つのピンの8ビットのデジタルポート

REPORT_ANALOG // アナログピンのレポートの許可/禁止

REPORT_DIGITAL // デジタルポートのレポートの許可/禁止

SET_PIN_MODE // ピンモードをINPUT/OUTPUT/PWM/その他に切り替える

STRING_DATA // C言語スタイルの文字列。コールバック関数にはstringCallbackFunctionを使う

SYSEX_START // 汎用の任意長のメッセージ(MIDIのSysExプロトコルを利用)。コールバック関数にはsysexCallbackFunctionを使う

SYSTEM_RESET // ファームウェアを初期状態にするためのメッセージ。コールバック関数にはsystemResetCallbackFunctionを使う

使用例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <Firmata.h>

byte analogPin;

void analogWriteCallback(byte pin, int value)
{
  pinMode(pin, OUTPUT);
  analogWrite(pin, value);
}

void setup()
{
  Firmata.setFirmwareVersion(FIRMATA_MAJOR_VERSION, FIRMATA_MINOR_VERSION);
  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));
  }
}

オリジナルのページ

https://docs.arduino.cc/hacking/software/FirmataLibrary

最終更新日

January 8, 2024

inserted by FC2 system