Flash AirのGPIO機能
2017年4月21日
FlashAirにはGPIOという機能があります。
本来FlashAirはSDカードで写真などを保存するのに持ちいられます。
このGPIO機能とはデータ保存の機能とは全く違う機能でFlashAirの無線通信機能を使って出力端子のHigh/Lowの制御ができます。
arduinoやRaspberry PIなどの制御用コンピューターもこのGPIO端子で接続されたLEDやモーターを制御しています。
FlashAirは5つの端子をGPIO端子として使えそれぞれ個別にLow/High制御ができます。
壊れたSD/microSD逆変換アダプターがあったのでこれを利用しました。
壊れたといってもフラットケーブルが断線しただけなので端子にリード線をハンダ付けをすれば十分活用できます。
使わない端子もありますが一応端子全部(9個)にリード線を付けておきました。
また端子どおしを結線するところもありますが外で接続しました。
FlashAirの電源は3.3Vですが、3V〜4Vの範囲で動いてくれるようです。
乾電池2本で3Vなので動かない事はないのですが電圧が低くなってくるとFlashAirの接続が不安定になります。
外部電源だと確実につなげるのですが無線コントロールするためにはバッテリィーに接続したいのでリチュームイオン充電池を使いました。
上の商品は超小型ロボットに搭載するように買ったものでもう少し大きくて容量のある物の方がいいと思います。
この手のものは大抵3.6〜3.7Vで少し高めですが安定してつながってくれるようです。
FlashAirの設定
FlashAirのGPIO機能を使うにはFlashAirのファームウェアのバージョンが2.00.03以上でなければいけません。(W-03の場合はすべてのバージョンで対応)
バージョンを確認するにはFlashAirを接続して「http://flashair/command.cgi?op=108」とURLを入力する事で確認できます。
バージョンがこれ以下の場合はファームウェアのバージョンアップしてください。
FlashAirによるリモート接続を行うにはFlashAirの設定が必要です。
FlashAirをパソコンに接続(通常のSDカードとして)してSD_WLANというフォルダーにあるCONFIGというファイルをメモ帳等で最後に「IFMODE=1」という行を追加してください。
これはSDインターフェイス端子を、汎用のI/O信号端子として利用し、信号の読み書きを行う機能を有効にするものです。
FlashAirの電源を入れるとAndroid端末と無線LANによる通信が可能になります。
Android端末のWi-Fi設定機能でFlashAirとの通信設定を行います。
Android端末がFlashAirを検出できると接続のためのパスワードを聞いてきます。
「12345678」を入力すると接続に成功する事ができます。
詳しいWi-Fi設定方法は各Android端末の説明書に従ってください。
またFlashAirの設定ファイルの書き換えに際しては必ずファイルのバックアップを取っておいてください。
なおAndroidで説明していますがWindowsの場合も同様に接続する事ができます。
LEDの接続
最初にLEDを接続してみます。
LEDであればFlashAirのGPIO端子で直接制御できますので簡単な回路で実現できます。
電源を4番に+、3番6番に-を供給します。(SDカードのピン番号は特殊なので注意してください)
GPIO端子は2番7番8番9番1番の5つでCMD,D0,D1,D2,D3に対応します
今回直接GPIO端子に接続しましたが電流が流れ過ぎないように各GPIO端子とLEDの間に抵抗を入れる事をお勧めします。
制御はFlashAirのcommand.cgiを動かす事でできます。
http://flashair/command.cgi?op=190&CTRL=0x1F&DATA=xxxx
FlashAirに接続した状態でWebブラウザで上記のURLを入力する事によってcommand.cgiを動かす事ができます。
xxxxはGPIOに対する制御データです。
各GPIO端子はデータのビット位置に割り当てられています。
GPIO |
- |
- |
- |
D3 |
D2 |
D1 |
D0 |
CMD |
16進数 |
0x80 |
0x40 |
0x20 |
0x10 |
0x08 |
0x04 |
0x02 |
0x01 |
10進数 |
128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
GPIO端子をHighにしたい場合はビットを1にLowにしたい時は0にします。
複数のGPIO端子を同時に制御する場合はHighにする値を合計します。
例えばD3とCMDをHighにその他をLowにする場合は0x10+0x01で0x11(17)となります。
値は16進数でも10進数でも構いません。(16進数の場合は頭に0x付けます)
下記のHTMLファイルをFlashAirのSD_WLANフォルダに入れておくとFlashAirにアクセス(http://flashair)する事で動かす事ができます
List.htm
ボタンを押すと各GPIOのHigh/Lowが制御できます。
すでに別のファイルがこのファイル名で入っている場合はバックアップを取っておいてください。
モーターの接続
次にモーターを接続してみます。
さすがにモーターはGPIO端子で直接動かす事はできません。
そこでモータードライバーを使います。
いつもTA7291Pを自分で配線して使っていますが今回は完成を購入してみました。
L9110という2CH(モーター2台分)のモータードライブモジュールです。
2CHでこの値段には驚きました。(半導体のモータードライバーより大分安いです)
値段が値段だけに当たり外れがあります。
今回2つ購入したのですがひとつは片方のチャネルが壊れていました。
また中国から送られるので到着までかなりの日数がかかります。
電源はFalshAirと共通にできますが、モーターが回転し始めるとFlashAirの接続が切れるので別系統にします。
モーターのスピードはモータードライブモジュールの電圧によって変わりますがこのモータードライブモジュールを動かすのに最低3V以上は必要なようです。(スペックは2.5V〜12V)
今回乾電池2本(3V)で行いました
FlashAirのGPIO端子のうち4つ(CMD,D0,D1,D2,D3)を入力端子に接続します。
モーターはそれぞれ出力端子に接続しますが、今回のプログラムでは前進の場合、同一方向に回転するため左右で反転させて取り付ける場合は+-の接続を逆にしてください。
こちらもLEDの時と同じ命令で動かす事ができます。
それぞれのモーターの入力端子のHighとLowの組み合わせでモーターの回転方向が変わってきます。
HighとLowの場合は正転、LowとHighの組み合わせで反転、LowとLowで停止、HighとHighの場合も停止ですが回転を急停止させる事ができます。
今回androidの専用アプリを作りました。
ボタン操作でFlashAirのGPIO端子がコントロールできます。
ボタンと機能は次の通りです。
ボタン |
▲ |
● |
▼ |
← |
→ |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
C |
DATA |
0x05 |
0x0f |
0x0a |
0x06 |
0x09 |
+0x01 |
+0x02 |
+0x04 |
+0x08 |
+0x10 |
-0x01 |
-0x02 |
-0x04 |
-0x08 |
-0x10 |
0x1f |
0x00 |
機能 |
前進 |
停止 |
後進 |
左折 |
右折 |
CMD H |
D0 H |
D1 H |
D2 H |
D3 H |
CMD L |
D0 L |
D1 L |
D2 L |
D3 L |
全端子H |
全端子L |
ボタン0〜9のDATAの+-はその値のビットを1にする(+)か0にする(-)を表していて他のビットはそのままの状態を保ちます。
前進/後進/右折/左折はモーターの向きによって変わります。
正しい方向になるようにモーターの接続で調整してください。
専用アプリケーションは下記URLよりダウンロードしてください。
http://www.mcc3.mbsrv.net/robox/GPIOCon.apk
インストール方法はandroid端末の説明書に従ってください。
実際に動かしている動画です。
今回行った作業はハンダ付けによる作業が含まれ配線を間違えるとFlashAirの破損を伴いますのであくまでも自己責任という事でお願いします。
特に電源の+-を間違えたり規定以上の電圧をかけるFlashAirが壊れますので十分気を付けてください。
目次に戻る