FlashAirで、周囲のWiFiのアクセスポイントを検索して、そのログを取るソフトを作ってみている。
とりあえず、一定時間毎に、時間と、SSIDとRSSIを記録するというのを作ってみた。
ログを取ったあと、そのログを解析して、無線AP情報から緯度経度を推定するサービスと連動させて移動の軌跡を出せるかなあ、とか考えている。
コードはLua言語で書いた。FlashAir W-04で動かしている。
test.luaというファイル名でFlashAirのSDカードストレージのルートフォルダーに入れる。
local file = io.open("/log.txt", "a") file:write("WiFi SSID Logging data\r\n") file:write("---\r\n") file:close() fa.SetCurrentTime(0x2821,0) hh=0 mm=0 ss=0 sleep(100) while true do file = io.open("/log.txt", "a") file:write("time , "..hh..","..mm..","..ss.."\r\n") count = fa.Scan() for i=0, (count-1), 1 do ssid, other = fa.GetScanInfo(i) if ssid ~= "" then file:write("SSID,"..ssid.."\r\n") for key, val in pairs(other) do if key=="RSSI" then file:write(" RSSI,"..val.."\r\n") end end end end file:write("---\r\n") file:close() fat_time = lfs.attributes("/log.txt") hh = bit32.band (bit32.rshift(fat_time.modification, 11),0x1F); mm = bit32.band (bit32.rshift(fat_time.modification, 5),0x3F); ss = bit32.band (fat_time.modification,0x1F)*2; sleep(1000*30) end
FlashAirのSD_WLANという名前の隠しフォルダーの中にCONFIGというファイルがあるので、CONFIGを編集し、
LUA_RUN_SCRIPT=/text.lua
を追加し、電源投入時に上記のスクリプトが自動で実行されるようにする。(参考)
その他、CONFIG内で、WiFiアクセスポイントに自動で接続するような設定をしている場合は、それを解除/削除しておくこと。
FlashAirをAirioというテスト用基板に挿して、FlashAirに電源を供給した。電源はUSBコネクタをモバイルバッテリーにつないで供給した。
Airioでなくても、何らかの電源供給用の回路があれば動かせるだろう。
電源を入れたら、あとは自動でFlashAirがログを取ってくれる。
ログは、log.txtというファイルに書き出されていて、次のようになっている。
時間は、スタート時を0時0分0秒として数字3つが時間ともに増えて記録される。上記のコードだと30秒ごとにしてある。
あとは、このログにあるSSIDとRSSIを使って、後処理で緯度経度を調べるというのを試してみる予定だ。
Google WiFi GeoLocation APIは、昔ちょっと試したことがあった。
・Google WiFi GeoLocation APIを使って位置情報を表示する
前にやったGeoLocation APIのことを、読み返して思い出したが、
BSSIDとRSSIを使わないと駄目そうだ。
なので、上記のログ取り用のluaのコードはBSSIDも保存するように改造しなくてはならない。