最新の情報は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% |

コメントをかく