

このライブラリは、SBUSレシーバーとサーボと通信し、ArduinoおよびCmakeビルドシステムと互換性があります。
SBUSは、レシーバーがサーボにコマンドを送信するためのバスプロトコルです。 PWMとは異なり、SBUSはバスアーキテクチャを使用します。バスアーキテクチャでは、単一のシリアルラインを最大16個のサーボで接続でき、それぞれが一意のコマンドを受け取ります。
SBUSプロトコルは、100000、8データビット、パリティ、2ストップビットのボーレートで倒立シリアルロジックを使用します。 SBUSパケットは、次の25バイトです。
トランスミッターとレシーバーの間にフレームが失われたときに失われたフレームが示されていることに注意してください。 FailSafeのアクティベーションでは、通常、多くのフレームが連続して失われる必要があり、受信機がFailSafeモードに移動したことを示します。パケットは、システム構成に応じて、約10ミリ秒または20ミリ秒ごとに送信されます。
「高速SBU」と呼ばれるSBUのバリエーションが使用され始めました。これは、200000のボードレートとより速い更新レートを使用します。
CH17およびCH18に注意:チャンネル17とチャンネル18は、デジタルオン/オフチャネルです。これらは、すべてのSBUSレシーバーとサーボで普遍的に利用可能ではありません。
Frskyレシーバーは、172〜1811の範囲を出力し、チャネルは-100%〜 +100%の範囲に設定されます。 -150%〜 +150%の拡張制限を使用すると、0〜2047の範囲が出力されます。
SBUSはデジタルバス形式であるため、送信機とSBUS対応の受信機からパイロットコマンドを受信する優れた手段です。 SBUSサーボが航空機で使用されている場合、SBUSはアクチュエータコマンドを送信する優れた手段でもあります。サーボコマンドは、レイテンシを低くすることができます。単一のピンを使用して最大16個のサーボをコマンドすることで、他の用途に追加のマイクロコントローラーピンが解放されます。
SBUSは、Arduinoで一般的にサポートされていない逆シリアルプロトコルを使用しています。このライブラリは、次のマイクロコントローラーに反転したシリアルを使用できます。
他のすべてのマイクロコントローラーについては、シリアルインバーターを使用する必要があります。このライブラリを他のマイクロコントローラーと連携するように変更した場合は、プルリクエストを送信してください。
zippedライブラリをArduino/ライブラリフォルダーにクローンまたはダウンロードして抽出するだけです。ライブラリは次のように追加されます。
# include " sbus.h "例は、例/arduino/sbus_example/sbus_example.inoにあります。このライブラリは、Teensy 3.x、4.x、およびLCデバイスでテストされており、他のArduinoデバイスで動作するはずです。
Cmakeは、 SBUSと呼ばれるライブラリターゲットとしてエクスポートされるこのライブラリの構築に使用されます。ヘッダーは次のように追加されます。
# include " sbus.h "ライブラリは、ビルドディレクトリを作成するcmakeイディオムを使用して、そのディレクトリ内から発行する次のようにコンパイルすることもできます。
cmake .. -DMCU=MK66FX1M0
make
これにより、 sbus_exampleと呼ばれるライブラリとサンプル実行可能ファイルが構築されます。例の実行可能ソースファイルは、Examples/cmake/sbus_example.ccにあります。 Cmakeコマンドには、コードがコンパイルされているマイクロコントローラーの指定を定義することに注意してください。これは、コード、CPU周波数、およびコンパイル/リンカーオプションを正しく構成するために必要です。利用可能なMCUは次のとおりです。
これらは、Teensy製品で使用されているのと同じパッケージで動作することが知られています。また、パッケージの変更にすぎない限り、パッケージの切り替えはうまく機能することが知られています。
SBUS_exampleターゲットは、SBUSレシーバーとサーボと通信するための実行可能ファイルを作成します。このターゲットには、HEXファイルを作成するための_HEXと、Teensy CLIアップローダーを使用してTeensyをフラッシュするための_uploadもあります。ビルド環境をセットアップするための手順は、ビルドツールリポジトリにあります。
このライブラリは、名前空間BFS内にあります。
この構造体は、 SBUSRXオブジェクトによって読み取られて返されるか、 SBUSTXオブジェクトによってセットおよび送信されるSBUSデータを定義します。
bool lost_frameフレームが失われたかどうか。
bool failSafe受信者がfailSafeモードに入ったのか、それともfailSafeモードに入るようにservosを指揮するか。
ブールCH17、CH18チャンネル17およびチャネル18の状態。
静的constexpr int8_t num_ch = 16 SBUSチャネルの数。
int16_t ch [num_ch] sbusチャネルデータの配列。
このクラスは、SBUS対応レシーバーからSBUSデータを受信するために使用されます。
SBUSRX(HardWareserial *Bus)は、 SBUSRXオブジェクトを作成します。使用されるシリアルポートに対応するシリアルオブジェクトへのポインターが渡されます。シリアルポートのRXピンには、SBUSパケットが受信されます。
bfs::SbusRx sbus (&Serial1);SBUSRX(Hardwareserial *Bus、const Bool Inv)は、 SBUSRXオブジェクトを作成します。使用されているシリアルポートに対応するシリアルオブジェクトへのポインターは、反転したシリアルが使用されるかどうかを設定する2番目のパラメーターINVとともに渡されます。 INVが真である場合、信号は標準の逆SBUSであり、それ以外の場合は非逆SBUです。
bfs::SbusRx sbus (&Serial1, false );Sbusrx(Hardwareserial *Bus、const bool Inv、const bool fast)上記のコンストラクターと同じですが、 FAST SBUS BAUDRATE(200000)を選択することができます。
(ESP32のみ)SBUSRX(Hardwareserial *Bus、const int8_t rxpin、const int8_t txpin、const bool inv)は、 sbusrxオブジェクトを作成します。使用されるシリアルポートに対応するシリアルオブジェクトへのポインターは、RX PIN番号( RXPIN )、TX PIN番号( TXPIN )、および逆シリアルが使用されるかどうか( INV )とともに渡されます。 INVが真である場合、信号は標準の逆SBUSであり、それ以外の場合は非逆SBUです。
(ESP32のみ)SBUSRX(Hardwareserial *Bus、const int8_t rxpin、const int8_t txpin、const bool inv、const bool fast)上記のコンストラクターと同じですが、高速の場合は高速SBUSボーレート(200000)を選択できます。
void begin() SBUS通信を初期化します。
sbus.Begin();bool read() parses sbusパケットは、sbusパケットを正常に受信することでtrueを返します。
if (sbus.Read()) {
// Do something with the received data
}SBUSDATAデータ()は、最後に受信したパケットのデータが入力されたSBUSDATA構造を返します。
if (sbus.Read()) {
bfs::SbusData data = sbus. data ();
}このクラスは、SBUSデータをSBUS対応サーボに送信するために使用されます。
sbustx(hardwareserial *bus) Sbustxオブジェクトを作成します。使用されるシリアルポートに対応するシリアルオブジェクトへのポインターが渡されます。シリアルポートのTXピンには、SBUSパケットが受信されます。
bfs::SbusTx sbus (&Serial1);sbustx(hardwareserial *bus、const bool inv)は、 sbustxオブジェクトを作成します。使用されているシリアルポートに対応するシリアルオブジェクトへのポインターは、反転したシリアルが使用されるかどうかを設定する2番目のパラメーターINVとともに渡されます。 INVが真である場合、信号は標準の逆SBUSであり、それ以外の場合は非逆SBUです。
bfs::SbusTx sbus (&Serial1, false );(ESP32のみ)SBUSTX(Hardwareserial *Bus、const int8_t rxpin、const int8_t txpin、const bool inv) Sbustxオブジェクトを作成します。使用されるシリアルポートに対応するシリアルオブジェクトへのポインターは、RX PIN番号( RXPIN )、TX PIN番号( TXPIN )、および逆シリアルが使用されるかどうか( INV )とともに渡されます。 INVが真である場合、信号は標準の逆SBUSであり、それ以外の場合は非逆SBUです。
void begin() SBUS通信を初期化します。
sbus.Begin();void write()はSBUSパケットを書き込みます。パケットはすぐに記述されます。SBUSシステムのセットアップに応じて、約100 Hzまたは50 Hzの周波数を維持するために、サーボにパケットを送信するタイミングを調整する必要があります。
sbus.Write();voidデータ(const sbusdata&data)は、次の書き込み方法で送信されるSBUSデータを設定します。
bfs::SbusData data;
data.ch[ 0 ] = 900 ;
sbus.data(data);SBUSDATA DATA()は、 SBUSTXオブジェクトにバッファリングされたSBUSデータを返します。これは、次の書き込みメソッドで送信されます。
bfs::SbusData data = sbus.data();