UDP通信を使ってScratchと連携し,Airio Playのボタン情報を送信します.
ブロードキャストを使用しているため,IPアドレスの指定が不要です.
遠隔センサープロトコルを用いているため,Scratchからの許可が必要です.
詳しくはこちらをご覧ください.
関連項目:Lua: Scratchとの連携
ブロードキャストを使用しているため,IPアドレスの指定が不要です.
遠隔センサープロトコルを用いているため,Scratchからの許可が必要です.
詳しくはこちらをご覧ください.
遠隔センサとは - おまけ程度のツール置き場 https://sites.google.com/site/gpsnmeajp/scratch/yu...
関連項目:Lua: Scratchとの連携
WTFPLです。
- 実行にはAirio Playまたは互換基板が必要です.
購入はこちら→Airio Play 家電のケンちゃん
- 最新のFlashAir W-04でのみ動作します
- Scratch 1.4にのみ対応しています
- 半角空白は含めますが,日本語は含められません
- ファイアーウォールの許可が必要です
- UDPのため送信のみで受信は対応していません(Scratchの変化を取り込むことができません)
- ブロードキャストの場合同じネットワーク内のすべてのScratchに送信されます.(許可していない場合は受信しません.また複数台に1台から情報を送信できるということでもあります)
遠隔センサ接続を有効にしてください.(右クリックで出現します)
ブラウザから実行するなり,自動起動設定するなりしてください
--IPアドレス文字列から32bitIPアドレス数値に変換 function ipadr2ipnum(ipadr) local ip_itr = string.gmatch(ipadr, "%d+") local ip = 0 for i=1,4 do ip = bit32.lshift(ip,8) ip = bit32.bor(ip,tonumber(ip_itr())) end return ip end --32bitIPアドレス数値からIPアドレス文字列に変換 function ipnum2ipadr(ipnum) local ipadr="" for i=1,4 do ipadr = tostring(bit32.band(ipnum,0xFF)) .. "." .. ipadr ipnum = bit32.rshift(ipnum,8) end return string.sub(ipadr,0,-2) end --Scartchへ変数を設定する function ScratchSetValue(ip,var,value) fa.udp(broadcast_adr,42001,"message","sensor-update \""..var.."\" \""..value.."\"") end --Scartchへメッセージを送信する function ScratchSendMessage(ip,msg) fa.udp(broadcast_adr,42001,"message","broadcast \""..msg.."\"") end --サンプル-- --現在のFlashAirのIPアドレスとサブネットマスクを取得し、数値に変換 ip,sub,gate = fa.ip() ip_num = ipadr2ipnum(ip) sub_num = ipadr2ipnum(sub) --ブロードキャストアドレスを計算し、文字列に戻す broadcast_num = bit32.bor(ip_num,bit32.bnot(sub_num)) broadcast_adr = ipnum2ipadr(broadcast_num) --ブロードキャストして受信可能なすべてのScratchへ変数を設定 ScratchSetValue(broadcast_adr,"Hello","This is message from FlashAir!") --ブロードキャストして受信可能なすべてのScratchへメッセージ送信 ScratchSendMessage(broadcast_adr,"Run Function") print("OK") --ボタン情報を取得→送信のループ --UDP送信には時間がかかるので待ち時間を入れる必要がある while true do s,dat = fa.pio(0,0) if (bit32.band(dat , 0x07)==0x6)then --up ScratchSetValue(broadcast_adr,"up","1") else ScratchSetValue(broadcast_adr,"up","0") end sleep(10) if (bit32.band(dat , 0x07)==0x5)then --down ScratchSetValue(broadcast_adr,"down","1") else ScratchSetValue(broadcast_adr,"down","0") end sleep(10) if (bit32.band(dat , 0x07)==0x1)then --left ScratchSetValue(broadcast_adr,"left","1") else ScratchSetValue(broadcast_adr,"left","0") end sleep(10) if (bit32.band(dat , 0x07)==0x2)then --right ScratchSetValue(broadcast_adr,"right","1") else ScratchSetValue(broadcast_adr,"right","0") end sleep(10) if (bit32.band(dat , 0x10)==0x0)then --b ScratchSetValue(broadcast_adr,"b","1") else ScratchSetValue(broadcast_adr,"b","0") end sleep(10) if (bit32.band(dat , 0x08)==0x0)then --a ScratchSetValue(broadcast_adr,"a","1") else ScratchSetValue(broadcast_adr,"a","0") end sleep(10) collectgarbage() end
コメントをかく