#FlashAir W-04が発売に!
2017年6月についに第4世代目のFlashAir W-04が発売となりました。新しく追加されたり強化された機能は、以下のサイトを参考にしてください。
第4世代FlashAir W-04
FlashAir開発者向け非公式wiki - W-04特設ページ
#LuaスクリプトにI2C機能が追加!
W-04では、Luaスクリプトの機能強化、機能追加が行われています。そのなかで、今回はI2C機能に注目してみました。
今回は、新しい関数の一つであるfa.i2c関数を使って、FlashAirからI2C接続したモータードライバDRV8830を制御してみます。
#構成
必要なものは以下のとおりです。
今回、DRV8830はアドレス設定ピンA0、A1をともに何も接続しないopen状態として、0xC8に設定しています。
FlashAirとDRV8830は、以下の表の通りに接続します。
FlashAirでは、2番ピン(CMD)がSCL、7番ピン(DAT0)がSDAとなっていますので、DRV8830のそれぞれ10番ピンと9番ピンに接続します。
今回、「SDカードスロットDIP化モジュール」を使用しているので、SCLとSDAはともに10KΩ抵抗でプルアップされています。
#CONFIGファイルの設定
FlashAirのSD_WLANフォルダ内のCONFIGファイルに、以下のオプションを追加します。IFMODEはFlashAirのGPIOモードをONにしています。LUA_RUN_SCRIPTはFlashAirの電源投入後すぐに指定のLuaスクリプトを起動するための設定です。
LUA_RUN_SCRIPT=/drv8830sample.lua
※SD_WLANフォルダとCONFIGファイルは不可視属性ファイルなので注意してください。
#Luaスクリプトファイル
FlashAirのルートフォルダに以下のコードを記述したテキストファイル(drv8830sample.lua)をコピーします。
このコードでは、最高速度(0x3F)で5秒間正転(0x01)させて、その後、最高速度(0x3F)で5秒間逆転(0x02)させて、停止します。
FlashAirのI2CはMasterとして作動し、接続しているDRV8830はSlaveとして作動します。I2C機能で、Slaveのアドレスを指定する場合は、7bit表記で指定します。DRV8830のデータシートに記載されているアドレスは8bit表記なので、1bit右にシフトさせた数値になります。
今回、DRV8830のエラー処理は省略しています。
-- FlashAir + DRV8830
local md_addr = 0x64 --アドレス0xC8を7bit表現で指定
function write_i2c_command(addr, data1, data2)
res = fa.i2c{ mode="start", address=addr, direction="write" }
res = fa.i2c{ mode="write", data=data1 }
res = fa.i2c{ mode="write", data=data2 }
res = fa.i2c{ mode="stop" }
end
function sendMotorDrive(addr, reg, vset, data)
local vdata = bit32.bor(bit32.lshift(vset, 2), data)
write_i2c_command(addr, reg, vdata)
end
res = fa.i2c{ mode="init", freq="100" }
sendMotorDrive(md_addr, 0x00, 0x00, 0x00)
sleep(1000)
sendMotorDrive(md_addr, 0x00, 0x3F, 0x01)
sleep(5000)
sendMotorDrive(md_addr, 0x00, 0x3F, 0x02)
sleep(5000)
sendMotorDrive(md_addr, 0x00, 0x00, 0x00)
#動作確認
上記Luaスクリプトが動作し、モータードライバDRV8830のOUT1、OUT2に約-5V〜5Vの出力が行われます。線路に接続すれば鉄道模型の車両が前後に動きます。
今回使ったDRV8830は、動作電源電圧範囲が2.75V~6.8Vであり、今回は5Vを入力としているため、一般的に最大12V対応のNゲージ車両では低速運転となります。車両のモーターの状態によっては電圧不足で動かない場合もあります。
#まとめ
以上で、FlashAirのI2C機能を使って、モータードライバDRV8830を制御することができました。これまでSPI-I2C変換ICのお世話になっていたところを、ダイレクトに接続できるようになったのは素晴らしいですね。さらに手軽にI2Cデバイスが利用できるようになりました。
#参考資料
FlashAir W-04について
第4世代FlashAir W-04
FlashAir開発者向け非公式wiki - W-04特設ページ
Lua関数リファレンス
Lua関数リファレンス - I2C
モータードライバDRV8830について
DRV8830データシート