最新の情報はFlashAir Developersをどうぞ
W-04特設ページ
W-04特設ページ
関数名 | 機能 | 記載ミス、記載不足等に対する正しいと思われる使い方 |
---|---|---|
request | HTTPリクエストの発行(ポート番号対応) | |
HTTPGetFile | HTTPを使用したファイルのダウンロード | |
pio | SDインターフェースのPIO制御 | |
ftp | FTPを使用したファイルのアップロード、ダウンロード | |
hash | ハッシュの計算 | |
Scan | SSIDスキャンの実行 | 事前に fa.Disconnect() を実行する |
GetScanInfo | SSIDスキャン結果の取得 | numは0〜count-1を指定する。電波の強い順に並んでいる |
Connect | STAモードで無線LANの有効化 | |
Establish | APモードで無線LANの有効化 | |
Bridge | インターネット同時接続モードで無線LANの有効化 | |
Disconnect | 無線LANの停止 | |
sleep | 指定時間(ms単位)だけスクリプトの実行を停止します | |
sharedmemory | 共有メモリからデータを読み込み或いは書き込みを行います | |
SetCert | ルート証明登録 | |
strconvert | 文字列変換 | sjis2utf8、utf82sjisのどちらも正常に動作しない |
SetChannel | 無線チャネルを設定する | |
MailSend | メール送信を行う | |
ping | pingを発行する result = fa.ping(ip) result: 1 = Success , nill = Error | |
pwm | PWM(Pulse Width Modulation)機能 2019/6に公開 | |
spi | SPI操作を行う | periodの範囲は 1〜。クロック周波数の最大は1.6MHz |
dataには、num, string, table(from [1] to [#table]) が指定できる | ||
ビット割当 CMD : MOSI(out) DAT0: SCLK(out) DAT1: /SS(out) DAT2: MISO(in) | ||
ReadStatusReg | iSDIOステータスレジスタを読みだす | |
remove | ファイルの削除 | |
rename | ファイル名変更 | |
ip | IPアドレスを設定 | |
WlanLink | 接続状態 | |
ConnectedSTA | 接続子機数とIP・MAC一覧 | |
websocket | WebSocketクライアント? | |
watchdog("start") | WatchDogのタイマースタート | |
watchdog("stop") | WatchDogのタイマー停止 | |
watchdog("event") | WatchDogのタイマーリセット | |
watchdog("status") | WatchDogの状態取得 | |
i2c | I2Cマスタ | freqにはnumberを指定する。例. freq = 400 |
type="binary" 形式で読めるのは16バイトまで 17バイト以上は res, str = fa.i2c{mode="read", bytes=24, type="string"} d1, d2, d3, ... = str:byte(1, #str) とする テーブルで受けるときは dat = {str:byte(1, #str)} とすればよい | ||
PIOのビット割当はDAT1 | ||
search | 最新ファイル検索 | |
serial | UART通信機能 2019/6に公開 | |
control("time") | 日時(16bit)メモ | |
control("fioget") | Wi-Fi接続オンオフ取得 | |
control("fioset") | Wi-Fi接続オンオフ(CONFIGに従う) | |
control("hid_set_pass") | 秘匿領域への保存のためのパスワードを設定 | |
control("hid_change_pass") | 秘匿領域に設定したパスワードの変更 | |
control("hid_store") | スクリプトを秘匿領域へ保存 | |
control("hid_get") | 秘匿領域に保存したスクリプトを取得 | |
control("hid_clear") | 保存したスクリプトファイルを全て削除 | |
control("hid_hash") | ハッシュ文字列を作成 |
getStatus | 接続種別取得 |
IBSS | アドホックモードで無線LANの有効化 |
SetCurrentTime | 現在時刻をFAT形式で設定する |
StartWPS | WPS設定を開始する |
ReadResponse | (iSDIOのレスポンスを読む?) |
SetSecretCode | (不明) |
GetSecretCode | (不明) |
ClrSecretCode | (不明) |
SetRmHeader | (不明) |
sysclk | (change System clk 0, 10, 20, 80, 160, 213) |
task | (マルチタスク管理?) |
reboot | 再起動する |
udp | UDP通信を行う |
stack | スタックの使用量らしきものを得る |
math | 数学ライブラリ |
os | OSライブラリ(非公式) os.clock()はW4.00.00では 1000秒=1、W4.00.03では 1秒=1なので注意 |
debug | debugライブラリ(非公式) |
corutine | corutineライブラリ |
getStatus | 接続種別取得 result = fa.getStatus() result: "Bridge"/ "AP_CONNECTED" / "AP" / "STA" / "NO CONNECTED" |
IBSS | アドホックモードで無線LANの有効化 result = fa.IBSS(ssid, networkkey, encmode) result: IP Address(string) |
SetCurrentTime | 現在時刻をFAT形式で設定する SetCurrentTime(FAT_YMD_bits,FAT_HMS_bits) |
StartWPS | WPS設定を開始する |
ReadResponse | (iSDIOのレスポンスを読む?) |
SetSecretCode | (不明) |
GetSecretCode | (不明) |
ClrSecretCode | (不明) |
SetRmHeader | (不明) |
sysclk | (不明) |
task | (マルチタスク管理?) |
reboot | 再起動する。その際、CONFIGが読み直される。 fa.reboot() |
udp | UDP通信を行う |
stack | スタックの使用量らしきものを得る。 result = fa.stack() result: 81% |
fa.udp("ホスト名",ポート番号,"message","メッセージ内容") でUDP送信らしい.
fa.udp("ホスト名",ポート番号,"file","ファイルパス") でUDPでファイル内容を送信らしい.
両者ともに,UDPテストツールで受信に成功した.
短時間で複数送信しようとしたところ,次のfa.udpで,UDP : already started.や,UDPtask is busy.が出たことから,
非同期に送信が行われている様子.
192.168.0.255 のディレクテッドブロードキャストはできたが
255.255.255.255のリミテッドブロードキャストはできなかった.
fa.udp("ホスト名",ポート番号,"file","ファイルパス") でUDPでファイル内容を送信らしい.
両者ともに,UDPテストツールで受信に成功した.
短時間で複数送信しようとしたところ,次のfa.udpで,UDP : already started.や,UDPtask is busy.が出たことから,
非同期に送信が行われている様子.
192.168.0.255 のディレクテッドブロードキャストはできたが
255.255.255.255のリミテッドブロードキャストはできなかった.
--開始 stat,msg = fa.udp({mode="recv",address="192.168.0.255",port=4000, message="Hello World"}) print(stat,msg) --受信したデータを取り出す方法は今のところ不明 --停止(だと思うがフリーズ) stat,msg = fa.udp({mode="stop"})
print "HTTP/1.1 200 OK" print "" function runSell(comm) a,b,c,d,e,f,g = os.execute(comm) -- print(a,b,c,d,e,f,g) --print("\n--output--") res = fa.request("http://192.168.0.1/eva.cgi") print(res) end runSell("help") runSell("version") runSell("fat ls") runSell("fat")
コルーチンが使えるようになったので,協調的マルチタスクが使えるようになりました.
協調的マルチタスクとは,各タスクが自主的に制御を短い間隔で返納する方式です.
つまり,各関数が「待ち時間を入れたい」とか「ここは忙しくない」といったタイミングで
処理の返却を宣言し,他の処理が終わったら続きから再開される,というものです.
コルーチンは,関数の途中で処理をやめ,あとからそこに戻ってくることができます.
ローカル変数等ももちろんそのまま使えます.
下の例では,
※taskSleepの代わりにSleepを使うと,時間が正確になる代わりに,
他の処理がブロックされたままになります
FlashAirでは仕様上,使いみちが限られ,マイコン的に使うときくらいにしか使えませんが
例えば液晶画面を更新しつつ,ボタン入力も受け付け,といった用途に使用できます.
協調的マルチタスクとは,各タスクが自主的に制御を短い間隔で返納する方式です.
つまり,各関数が「待ち時間を入れたい」とか「ここは忙しくない」といったタイミングで
処理の返却を宣言し,他の処理が終わったら続きから再開される,というものです.
コルーチンは,関数の途中で処理をやめ,あとからそこに戻ってくることができます.
ローカル変数等ももちろんそのまま使えます.
下の例では,
- taskSleepが一定時間待ち,その間は他のタスクに処理を回す
- taskYieldは処理を返すが,他の処理が終わったら即座に再開したい
- taskExitは処理を終了したい
※taskSleepの代わりにSleepを使うと,時間が正確になる代わりに,
他の処理がブロックされたままになります
FlashAirでは仕様上,使いみちが限られ,マイコン的に使うときくらいにしか使えませんが
例えば液晶画面を更新しつつ,ボタン入力も受け付け,といった用途に使用できます.
print "HTTP/1.1 200 OK" print "" print "Hello World" task1 = function() local i=0 for i=0,10 do print("[task1]A:"..i) taskSleep(20) print("[task1]B:"..i) taskSleep(120) end taskExit() end task2 = function() local i=0 while true do print("[task2]:"..i) taskSleep(70) i=i+1 end end --main rutine function main() local end_time = (1/1000) + os.clock() --1sec=0.001 この場合1秒間実行する local co_task1 = coroutine.wrap(task1) local co_task2 = coroutine.wrap(task2) local co_time1 = 0 local co_time2 = 0 print("start") while true do if((co_time1 < os.clock()))then co_time1 = co_task1() end if((co_time2 < os.clock()))then co_time2 = co_task2() end if(end_time < os.clock())then break end sleep(1) --SystemThread end print("end") end function taskSleep(t) coroutine.yield((t/1000000) + os.clock()) end function taskYield() coroutine.yield(0) end function taskExit() coroutine.yield(1/0) --Inf end --os.clock()は1000秒=1っぽい? main()
print "HTTP/1.1 200 OK" print "" print "Hello World" task1 = function() local i=0 for i=0,10 do print("[task1]:"..i) sleep(20) --yield end end task2 = function() local i=0 while true do print("[task2]:"..i) sleep(70) i=i+1 end end --main rutine function main() local end_time = (1/1000) + os.clock() --1sec=0.001 この場合1秒間実行する local co_task1 = coroutine.create (task1) local co_task2 = coroutine.create (task2) local co_time1 = 0 local co_time2 = 0 print("start") while true do -- print("system:"..os.clock()) -- print(" co1:"..co_time1) -- print(" co2:"..co_time1) if((coroutine.status(co_task1) == "suspended")and (co_time1 < os.clock()))then stat,co_time1 = coroutine.resume(co_task1) end if((coroutine.status(co_task2) == "suspended")and (co_time2 < os.clock()))then stat,co_time2 = coroutine.resume(co_task2) end if(end_time < os.clock())then break end sleep(1) --SystemThread end print("end") end --sleepをオーバーライド sleep = function(t) coroutine.yield((t/1000000) + os.clock()) end function yield() coroutine.yield(0) end --os.clock()は1000秒=1っぽい? main()
request | HTTPリクエストの発行 |
HTTPGetFile | HTTPを使用したファイルのダウンロード |
pio | SDインターフェースのPIO制御 |
ftp | FTPを使用したファイルのアップロード、ダウンロード |
hash | ハッシュの計算 |
Scan | SSIDスキャンの実行 |
GetScanInfo | SSIDスキャン結果の取得 |
Connect | STAモードで無線LANの有効化 |
Establish | APモードで無線LANの有効化 |
Bridge | インターネット同時接続モードで無線LANの有効化 |
Disconnect | 無線LANの停止 |
sleep | 指定時間だけスクリプトの実行を停止します |
sharedmemory | 共有メモリからデータを読み込み或いは書き込みを行います |
SetCert | ルート証明登録 |
strconvert | 文字列変換 |
SetChannel | 無線チャネルを設定する |
MailSend | メール送信を行う |
ping | pingを発行する result = fa.ping(ip) result: 1 = Success , nill = Error |
spi | SPI操作を行う |
ReadStatusReg | iSDIOステータスレジスタを読みだす |
remove | ファイルの削除 |
rename | ファイル名変更 |
ip | IPアドレスを設定 |
WlanLink | 接続状態 |
ConnectNum | 接続台数取得 |
getStatus | 接続種別取得 |
IBSS | アドホックモードで無線LANの有効化 |
SetCurrentTime | 現在時刻をFAT形式で設定する |
StartWPS | WPS設定を開始する |
ReadResponse | (不明) |
SetSecretCode | (不明) |
ClrSecretCode | (不明) |
SetRmHeader | (不明) |
request | HTTPリクエストの発行 b, c, h = fa.request(url [, method [, headers [, file [, body [, bufsize [, redirect]]]]]]) b, c, h = fa.request{url="http://example.com/",file="Hello.txt"} |
HTTPGetFile | HTTPを使用したファイルのダウンロード result = fa.HTTPGetFile(uri, filepath [, user, pass]) result: 1 = Success , nill = Error |
pio | SDインターフェースのPIO制御 s, indata = fa.pio(ctrl, data) ctrl : 1 = OUTPUT, 0 = INPUT data/indata : 1 = HIGH, 0 = LOW s: 1 = OK , 0 = Error |
ftp | FTPを使用したファイルのアップロード、ダウンロード result = fa.FTP(cmd, uri, filename) result: 1 = Success , nill = Error |
hash | ハッシュの計算 hash=fa.hash(name, data, key) name: string(md5,sha1,sha256,hmac-sha256) hash: string(HEX) |
Scan | SSIDスキャンの実行 count = fa.Scan([ssid]) disconnect状態でのみ有効。 |
GetScanInfo | SSIDスキャン結果の取得 ssid, other = fa.GetScanInfo(num) num: index |
Connect | STAモードで無線LANの有効化 fa.Connect(ssid, networkkey) |
Establish | APモードで無線LANの有効化 fa.Establish(ssid, networkkey, encmode) encmode: 0=Open, 1=Open/WEP, 2=Shared/WEP, 3=WPA TKIP, 4=WPA AES, 5=WPA2 TKIP, 6=WPA2 AES |
Bridge | インターネット同時接続モードで無線LANの有効化 fa.Bridge(ssid, networkkey, encmode, brgssid, brgnetworkkey) |
Disconnect | 無線LANの停止 fa.Disconnect() |
sleep | 指定時間だけスクリプトの実行を停止します sleep(millisec) |
sharedmemory | 共有メモリからデータを読み込み或いは書き込みを行います result = fa.sharedmemory(command, addr, len, wdata) addr: [0 - 511] len: [0 - 512] wdata: string command: "write", "read" result: Write > 1 = Success , nill = Error result: Read > (Read string) = Success , nill = Error |
SetCert | ルート証明登録 result = fa.SetCert(filename) result: 1 = Success , nill = Error |
strconvert | 文字列変換 result = fa.strconvert(format, orgstr) format: "sjis2utf8" or "utf82sjis" result: (Converted string) = Success , nill = Error |
SetChannel | 無線チャネルを設定する fa.SetChannel(channelNo) |
MailSend | メール送信を行う result = fa.MailSend(from,headers,body,server,user,password, attachment, ContentType) fa.MailSend {from = "a@a.jp", headers = "To:..."} result: "MailSend is success." or "Error: It failed to send." |
spi | SPI操作を行う result = fa.spi(command,data) command: "init", "mode", "bit", "write", "read" data: num, string, table(from [1] to [#table]) result: write > num(Received data) result: read > num(Received data) result: other > status(?) dataにどの型が使えるかは公式に説明がないため、実験での確認結果を記載。 |
remove | ファイルの削除 fa.remove(fname) |
rename | ファイル名変更 fa.rename(src,snk) 変更先のファイル名が重複している場合は(1)などが自動で付加される。 |
WlanLink | 接続状態 result = fa.WlanLink() result: 1=Connected, nil = Disconnected |
ConnectNum | 接続台数取得 result = fa.ConnectNum() result: num = (How many Connected Terms) |
getStatus | 接続種別取得 result = fa.getStatus() result: "Bridge"/ "AP_CONNECTED" / "AP" / "STA" / "NO CONNECTED" |
IBSS | アドホックモードで無線LANの有効化 result = fa.IBSS(ssid, networkkey, encmode) result: IP Address(string) |
ReadStatusReg | iSDIOステータスレジスタを読みだす result = fa.ReadStatusReg() |
SetCurrentTime | 現在時刻をFAT形式で設定する SetCurrentTime(FAT_YMD_bits,FAT_HMS_bits) |
StartWPS | WPS設定を開始する |
ReadResponse | (不明) |
SetSecretCode | (不明) |
ClrSecretCode | (不明) |
SetRmHeader | (不明) |
reboot | 再起動する。その際、CONFIGが読み直される。 fa.reboot() |
sysclk | ??? |
stack | スタックの使用量らしきものを得る。 result = fa.stack() result: 81% |
コメントをかく