RaspberryPi3とMF-01の通信方式
RaspberryPi3とMF-01は、シリアル通信にて情報を交換します。
RaspberryPi3側使用端子
ーTXD0

GPIO14

ーRXD0

GPIO15

通信フォーマットー38400bps
ーデータ部８bit
ースタート1bit
ーストップ１bit
ーパリティビットなし

初期状態では、シリアル通信時に、処理負荷によりビットレートが変動するため、変動しないように設定を行う必要があります。
設定方法は次ページより参照してください。

10

IPソケット通信機能
MF-01S.pyは、コンソールモードで待機中は、IPソケット通信で外部ソフトウェアからの要求を受け取り、内部ソフトウェアおよびMF-01を制御することができます。
IPソケット通信機能は、サーバ側機能として実行され、外部からの接続要請と、コマンド要求に対して応答する形式になります。
IPソケットは、内部IP１２７．０．０．１、ポートは６４３２１が使用されています。
外部プログラムは、ip経由で上記アドレスとポートに接続することで、通信を行うことができます。
通信は下記の手順で行います。
IPソケット通信を開始します。
コネクションの確立ーポートの接続後、コマンドを送信してコネクションを確立します。
コマンドの要求と応答の受信
ー必要数のコマンド要求と応答の受信を繰り返し、動作を行わせます。
コネクションの解消
ー必要な処理が完了後に、専用コマンドを送信してコネクションを解消します。
IPソケット通信を終了します。

71

基本プロトコル
IPソケット通信を経由した単純なハンドシェーク手順
ソケット接続により開通
接続コマンドMFCO

コマンドリクエスト

MFC＋

コマンド文字列

アンサー

MFA＋応答文字列切断コマンド

MFCC

アンサー

MFAC

上記コマンドでセッションが閉じる。
サンプル
import socketwith socket.socket(socket.AF̲INET,socket.SOCK̲STREAM) as s:s.connect(('127.0.0.1',64321))s.sendall(b'MFCC')
data = s.recv(1024)

72

セッション接続コマンド
セッションを接続し、通信を開始します。
送信
MFCO
受信
MFAO
サンプル
s.sendall(b'MFCO')
data = s.recv(1024)73

サーボ現在位置書き込みコマンド
本コマンド受信後、直ちにサーボモーター位置が更新されます。
送信
MFCA+ (サーボ０位置16進数表記４桁）+．．．+(サーボ23位置16進数表記４桁)

受信
MFAA
サンプル
s.sendall(b'MFCA0000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000')
data = s.recv(1024)

74

サーボP2P動作コマンド
現在のサーボ位置から、指定されたホームポジション相対位置まで、24サーボの同期動作をおこないます。
移動速度は、1秒間を２３４４とした数値で、時間指定を行います。（最大2秒まで）
送信
MFCR +(サーボ０位置

極性コード（符号なし）16進数表記4桁）
極性コード+＋

相対位置（符号なし）16進数表記4桁）＋．．．＋（サーボ23位置

極性コード＋相対位置（再生時間16進数表記４桁）

ホームポジションより正の方向への場合＋、負の方向へ場合­、動作対象から外したい場合 X

受信MFAR
サンプルs.sendall(b'MFCR-03E8+0000+0000+0000+0000+0000+0000+0000+0000+0000+0000+0000+0000+0000+0000+0000+0000+0000+0000+0000+0000+0000+0000+0000N1250')
data = s.recv(1024)
再生時間は、1秒を２３４４として整数化した数値を、16進数表記4桁に変換したもので、最大指定可能な時間は、MF-01S上では2秒間の４６８８まで、ボード単体でオリジナルソフトウェアを作成する場合は、３２７６７まで指定することが可能です。

75

モーション再生コマンド
MF­01Sで登録し、リモコンキーに割り当てたモーションファイルを実行します。
送信
MFCM＋モーションコード（リモコン受信状態文字列と同じ）

受信MFAMサンプル
s.sendall(b'MFCMFAA00')
data = s.recv(1024)

76

サーボON・OFFコマンド（FUTABA用）
FUTABAのサーボモーターを使用しているときに限り使用できる、モーター出力ON・OFFコマンドです。
送信
MFCT＋

ʼON・OFF文字列、０（OFF）もしくは１（ON）ʼの24文字羅列

受信MFATサンプル
s.sendall(bʼMFCT000000000000000000000000')
data = s.recv(1024)
s.sendall(b'MFCT111111111111111111111111')
data = s.recv(1024)

77

サーボ現在位置読み出しコマンド
サーボモーターの絶対位置を読み出します。
送信
MFCP
受信
MFAP + (サーボ０位置16進数表記４桁）+．．．+(サーボ23位置

サンプル
s.sendall(bʼMFCP')
data = s.recv(1024)78

16進数表記４桁)

ジャイロセンサーパラメータ書き込みコマンド
ジャイロセンサー０、１、２について、それぞれサーボ8個分のパラメータを設定する。
設定数が8個より少ない場合は、サーボ０に係数０を設定する。
0以外の係数が設定されたサーボ番号のパラメータは、対応するジャイロセンサーから変位を検出すると、その変位に係数を乗じて、その結果を対象のサーボの出力値に加算する。
送信
MFCX + (ジャイロセンサー０設定データ列）+ (ジャイロセンサー1設定データ列）+ (ジャイロセンサー2設定データ列）※ジャイロセンサー設定データ列
サーボモータ番号16進数表記２桁＋ジャイロセンサーパラメータ

16進数表記2桁「最上位ビット符号付」

受信
MFAX
サンプル
s.sendall(b'MFCX0000000000000000000000000000000000E00000000000000000000000000000000000000000
00000000000000000000')
data = s.recv(1024)

79ジャイロセンサー効果ON・OFF&初期化コマンド
ジャイロセンサーの効果をON・OFFする、もしくはジャイロセンサーのセンター値（初期値）を、現在の値に初期化する。
送信
MFCG + (スイッチ０１２０，１，２）

OFFONINIT

受信
MFAG
サンプル
s.sendall(b'MFCG1')
data = s.recv(1024)
time.sleep(10)s.sendall(b'MFCG0')
data = s.recv(1024)

80

ホームポジション設定コマンド
ホームポジションを定義します。
送信MFCH＋(サーボ０位置16進数表記４桁）+．．．+(サーボ23位置16進数表記４桁)

受信MFAH
サンプル.sendall(bʼMFCH06400640064006400640064006400640064006400640064006400640064006400640064006400
6400640064006400640')
data = s.recv(1024)81

リモコン受信機読出し
リモコン送信機の状態と、汎用AD入力の状態を読み出します。
送信MFCJ
受信MFAJ + リモコン受信状態文字列16進数表記５桁＋16進数表記２桁
先の16進数表記5桁がリモコンキーの状態を表し、続く16進数表記２桁が汎用AD入力の状態を表す。
サンプル
s.sendall(b'MFCJ')
data = s.recv(1024)
joycode = (data.decode())[4:9]
if joycode == '00100':s.sendall(b'MFCMFAA00')
data = s.recv(1024)

82

セッション切断コマンド
セッションを切断し通信を終了します。
送信
MFCC
受信
MFAC
サンプル
s.sendall(b'MFCC')
data = s.recv(1024)

83