Lua機能

Lua言語で書かれたスクリプトファイルをFlashAirに保存することで、 下記のような簡易なバッチ処理が行えます。

  • FlashAirに保存されたファイルを、任意のサーバー等にアップロード。(ダイレクトアップロード)
  • FlashAirにファイルを生成する。
  • 動的にHTMLファイルを生成する。

本機能は、FlashAir W-03以上で利用できます。


Lua言語について

Luaは、パワフルで、高速で、軽量で、埋め込み可能な、スクリプト言語です。

Luaは、シンプルな手続き型構文をと強力なデータ記述構造を、連想配列と拡張可能なセマンティクスを用いて組み合わせています。 Luaは動的型付けであり、レジスタベースの仮想マシン向けのバイトコードを解釈することによって実行されます。 また、インクリメンタルガベッジコレクションによる自動メモリ管理を備えており、 設定、スクリプティング、ラピッドプロトタイピングに最適です。

Lua言語の詳細は、関連情報をご覧ください。


利用できる機能

FlashAirのLua機能では、下記のライブラリ関数が利用できます。


制約事項

メモリ制約のため、標準ライブラリの以下の機能は使用できません。

  • コルーチン操作
  • OS機能
  • デバッグライブラリ

Lua関数リファレンス

関数名 機能 ファームウェアバージョン
Bridge インターネット同時接続モードで無線LANの有効化 3.00.00+
Connect STAモードで無線LANの有効化 3.00.00+
ConnectedSTA AP接続時の接続ステーション数 4.00.00+
control(“fioget”) 無線LAN On/Off状態の取得 4.00.00+
control(“fioset”) 無線LAN On/Off 4.00.00+
control(“hid_change_pass”) 秘匿領域に設定したパスワードの変更 4.00.04+
control(“hid_clear”) パスワード、APIで保存したスクリプトファイルを全て削除 4.00.04+
control(“hid_get”) 秘匿領域に保存したスクリプトを取得 4.00.04+
control(“hid_hash”) 設定したパスワードと指定する文字列からハッシュ文字列を作成 4.00.04+
control(“hid_set_pass”) 秘匿領域への保存のためのパスワードを設定 4.00.04+
control(“hid_store”) スクリプトを秘匿領域へ保存 4.00.04+
control(“time”) 日時メモ保存 4.00.00+
Disconnect 無線LANの停止 3.00.00+
Establish APモードで無線LANの有効化 3.00.00+
ftp FTPを使用したファイルのアップロード、ダウンロード 3.00.00+
GetScanInfo SSIDスキャン結果の取得 3.00.00+
hash ハッシュの計算 3.00.00+
HTTPGetFile HTTPを使用したファイルのダウンロード 3.00.00+
i2c I2C操作 4.00.00+
ip IPアドレスを取得または設定 3.00.00+
MailSend メールの送信 3.00.01+
deletedmd5 MD5ハッシュの計算 3.00.00
ping 指定IPへPINGを発行 3.00.00+
pio SDインターフェースのGPIO制御 3.00.00+
pwm(“duty”) pwm操作時の周波数とデューティ比を設定 4.00.03+
pwm(“init”) pwmの有効化、チャンネル数の設定 4.00.03+
pwm(“start”) pwm操作時の指定チャンネルを動作 4.00.03+
pwm(“stop”) pwm操作時の指定チャンネルを停止 4.00.03+
ReadStatusReg FlashAir自身のステータスレジスタを取得 3.00.00+
remove ファイルの削除 3.00.00+
rename ファイル名の変更 3.00.00+
request HTTPリクエストの発行 3.00.00+
Scan SSIDスキャンの実行 3.00.00+
search ファイルサーチ機能 4.00.00+
serial(“init”) シリアルの有効化、ボーレートの設定 4.00.03+
serial(“read”) シリアル操作時のデータの受信 4.00.03+
serial(“write”) シリアル操作時のデータの送信 4.00.03+
SetCert ルート証明登録 3.00.00+
SetChannel 無線チャネルを設定する 3.00.01+
sharedmemory 共有メモリのデータを読み込み或いは書き込み 3.00.00+
sleep 指定時間だけスクリプトの実行を停止 3.00.00+
spi SPI操作を行う 3.00.01+
spi(“bit”) 転送ビット数の指定 4.00.03+
spi(“cs”) チップセレクト信号の制御 4.00.03+
spi(“init”) インターフェースを初期化し、クロック周期の変更を行う 4.00.03+
spi(“mode”) SPIモードの指定 4.00.03+
spi(“read”) ライトおよびリード 4.00.03+
spi(“write”) ライトおよびリード 4.00.03+
strconvert 文字列変換 3.00.00+
udp UDP送信 4.00.04+
udp {mode=”recv”} UDP受信 4.00.04+
udp {mode=”send”} UDP送信 4.00.04+
udp {mode=”send_interval”} UDP指定間隔送信 4.00.04+
udp {mode=”stop”} UDP送受信停止 4.00.04+
udp(“state”) UDP送受信状態取得 4.00.04+
watchdog(“event”) WatchDogのタイマーリセット 4.00.03+
watchdog(“start”) WatchDogのタイマースタート 4.00.03+
watchdog(“status”) WatchDogの状態取得 4.00.03+
watchdog(“stop”) WatchDogのタイマー停止 4.00.03+
websocket WebSocket機能 4.00.00+
WlanLink 接続確認 3.00.00+

Bridge

インターネット同時接続モードで無線LANを有効化します。

書式

fa.Bridge(ssid, networkkey, encmode, brgssid, brgnetworkkey)

引数

ssid

string。 FlashAirのSSID。

networkkey

string。 FlashAirのセキュリティキー。

encmode

string。 FlashAirのセキュリティモード。 指定可能な値についてはEstablishを参照して下さい。

brgssid

string。 接続先無線LAN APのSSID。

brgnetworkkey

string。 接続先無線LAN APのセキュリティキー。

戻り値

なし


Connect

STAモードで無線LANを有効化します。

書式

fa.Connect(ssid, networkkey)

引数

ssid

string。 接続先無線LAN APのSSID名。

networkkey

string。 接続先無線LAN APのセキュリティキー。

戻り値

なし


ConnectedSTA

AP接続時の接続されているステーション数、ip、macを返します。

書式

cnt,tbl = fa.ConnectedSTA()

戻り値

cnt

接続しているステーションの個数を返却する。

Tbl

取得したクライアントのテーブルを返却する。cntが0に場合nilを返却する。

AP起動時に何台接続しているか確認する。
local cnt, tbl = fa.ConnectedSTA()
print(cnt,tbl)
for i,t in ipairs(tbl) do 
  for k,v in pairs(t) do
  print(k,v)
   end
end
結果
1       table: 856B1C
mac     40:48:0f:7b:37:92
ip      192.168.0.11

control(“fioget”)

無線LANのOn/Off状態を取得します。

書式

result = fa.control("fioget")

引数

第1引数は”fioget”固定。

戻り値

result

number。現在の無線LANの状態。

  • 1:無線LANはOn。
  • 0:無線LANはOff。

control(“fioset”)

無線LANのOn/Offを行います。

書式

result = fa.control("fioset", enable)

引数

第1引数は”fioset”固定。</dd>

enable

number。1 または 0を指定。

  • 1:無線LANをOnにする。モードやSSIDなどの設定はCONFIGファイルの内容が適用される。
  • 0:無線LANをOffにする。

戻り値

result

number。現在の無線LANの状態。

  • 1:無線LANはOn。
  • 0:無線LANはOff。

control(“hid_change_pass”)

秘匿領域に設定したパスワードを変更します。

書式

ret = fa.control("hid_change_pass", old_password, new_password)

引数

第1引数は”hid_change_pass”固定。

old_password

string。設定済みパスワード。

new_password

string。新規パスワード。

戻り値

ret

number

0
成功。
1
設定エラー。
-1
パスワード長エラー。

control(“hid_clear”)

パスワード、APIで保存したスクリプトファイルを全て削除します。

書式

fa.control("hid_clear")

引数

第1引数は”hid_clear”固定。

戻り値

なし


control(“hid_get”)

秘匿領域に保存したスクリプトを取得します。

書式

fa.control("hid_get", filename , dstfilename, password)

引数

第1引数は”hid_get”固定。

filename

string。保存しているスクリプト。

dstfilename

string。コピー先ファイル名。

password

string。パスワード。

戻り値

なし

fa.control("hid_get", "h:sys.lua", "tmp/option.lua", "mysecret")

注意事項

ホストからアクセス可能な領域で実行されたLuaスクリプトから、秘匿領域へ保存されたファイルへアクセスは出来ません。


control(“hid_hash”)

秘匿領域に設定したパスワードと指定する文字列からハッシュ文字列を作成します。

書式

ret = fa.control("hid_hash", string)

引数

第1引数は”hid_change_pass”固定。

string

string。設定文字列。

戻り値

ret

string。ハッシュ値。


control(“hid_set_pass”)

秘匿領域への保存のためのパスワードを設定します。

書式

fa.control("hid_set_pass", password)

引数

第1引数は”hid_set_pass”固定。

password

string。パスワード。

戻り値

なし


control(“hid_store”)

スクリプトを秘匿領域へ保存します。

書式

a.control("hid_store", filename, password)

引数

第1引数は”hid_store”固定。

filename

string。保存するスクリプト。

password

string。パスワード。

戻り値

なし

fa.control("hid_store", "test.lua", "12345678")

保存したファイルをCONFIGで指定する

LUA_RUN_SCRIPT=H:filename
LUA_SD_EVNET=H:filename

control(“time”)

日時メモの保存または取得を行います。

書式

result = fa.control("time"[, savetime])

引数

第1引数は”time”固定。

savetime

number。保存する日時。FAT形式で指定する。

  • savetime引数ありの場合、指定された日時を保存する。
  • savetime引数なしの場合、保存された日時を取得する。
  • FAT形式の日時について
    • 32ビットの整数値で、上位16ビットが日付、下位16ビットが時刻。
    • 日付と時刻は、command.cgiのop=100を実行した際に取得できる値と同じフォーマット。

戻り値

result

number。取得した日時。

  • savetime引数ありの場合、指定された日時そのものを返す。
  • savetime引数なしの場合、保存された日時を返す。
    • 日時が保存されていない場合は、-1を返す。
  • エラーの場合は nil を返す。

“2017/06/01 12:34:56” を保存する。
result = fa.control("time", 0x4ac1645c)
保存された日時を取得する。
result = fa.control("time")
if result ~= nil then
  print(string.format("time: 0x%08x", result))
end

Disconnect

無線LANを停止します。

書式

fa.Disconnect()

引数

なし

戻り値

なし


Establish

APモードで無線LANを有効化します。

書式

fa.Establish(ssid, networkkey, encmode)

引数

ssid

string。 FlashAirのSSID。

networkkey

string。 FlashAirのセキュリティキー。

encmode

number。 FlashAirのセキュリティモード。

戻り値

なし

備考

FlashAirセキュリティモードには、下記のうち一つを指定します。

意味
0 オープンシステム、暗号化なし
1 オープンシステム、WEP
3 WPA-PSK、TKIP
4 WPA-PSK、AES
5 WPA2-PSK、TKIP
6 WPA2-PSK、AES

ftp

FTP (File Transfer Protocol) によるファイルのダウンロードまたはアップロードを実行します。

書式

result = fa.ftp(cmd, uri, filename)

引数

cmd

string。 FTPコマンド。

"get"
ファイルのダウンロード。
"put"
ファイルのアップロード。
url

string。 FTPサーバーのURI。

filename

string。 FlashAirカード内のファイルパス。

戻り値

result

number

1
正常動作。
nil
エラー。

備考

  • FlashAirの対応しているデータ転送モードはパッシブ(PASV)モードのみとなります。
  • FTPS接続を使用する場合はURLをftps://とすると実行可能です。implicit, explicitモード両方とも利用可能です。
  • ポート指定はホスト名の後ろにポート番号を付けてください。

動作例

 result = fa.ftp("get", "ftp://user:pass@ftp.test.com:21/test.txt", "test.txt");
 result = fa.ftp("put", "ftps://user:pass@ftp.test.com:990/test.txt;implicit", "test.txt");
 result = fa.ftp("put", "ftps://user:pass@ftp.test.com:990/test.txt;explicit", "test.txt");

GetScanInfo

Scan関数で得られた情報を取得します。

書式

ssid, other = fa.GetScanInfo(num)

引数

num

number。 Scanリストの番号を指定。

戻り値

ssid

string。 SSID。

other

table。 Scan結果情報。

備考

Connect, Establish, または Bridge コマンドにより無線LANが有効になっていると利用できません。

count = fa.Scan()
for i=0,count-1 do
  ssid,other = fa.GetScanInfo(i)
  for key, val in pairs(other) do
    print(key, val)
  end
end

hash

ハッシュ値を計算します。

書式

hash = fa.hash(name, data, key)

引数

name

string。 hashの種類選択(md5,sha1,sha256,hmac-sha256)。

data

string。 データ。

key

string。 秘密鍵(nameがhmac-sha256時利用)。

戻り値

hash

string。 16進数で表したハッシュ値。


HTTPGetFile

HTTPを使用してファイルをダウンロードします。

書式

result = fa.HTTPGetFile(uri, filepath [, user, pass])

引数

uri

string。 取得元のURI。

filepath

string。 保存先ファイル名。

user

string。 Basic認証におけるUser文字列。

pass

string。 Basic認証におけるPass文字列。

戻り値

result

number

1
正常動作。
nil
エラー。

注意事項

  • この関数でHTTPS通信を実行する場合、実行前にfa.SetCert関数でルート証明書を設定することが推奨されています。ルート証明書を設定せずにHTTPS通信を実行した場合、ルート証明書を用いたサーバ証明書の検証が行われないまま、通信が行われます。
  • ルート証明書を用いてサーバ証明書を検証した結果、検証が失敗した場合、この関数の実行は失敗となります。

i2c

FlashAirよりI2C操作を行います。i2cはMasterとして動作します。

書式

res, data1, data2, data3, ... = fa.i2c(table)
res, string = fa.i2c(table)
res, data, ctrl = fa.i2c{mode = "getpio"}

引数

table

以下のフィールドがあります。

mode
_string_。I2C操作の属性。
freq
_number_。I2Cクロック周波数(単位:kHz)。設定可能な値は、`45`、`100`、`189`、`400`の4つ。省略時は`100`が設定されます。
timeout
_number_。スレーブ応答のタイムアウト時間(単位:msec)。省略時は`10`が設定されます。
address
_number_。接続デバイスのスレーブアドレスを指定します。
direction
_string_。データの方向を指定します。設定可能な値は`"read"`と`"write"`です。`"read"`を指定した場合、接続デバイスからデータを読み出します。`"write"`を指定した場合、接続デバイスへデータを送ります。
data
_string_ or _number_。送信データを設定します。string形式で指定した場合は、設定したデータを全て送ります。number形式で指定した場合は`0`~`255`までの値を設定できます。`"setpio"` の場合、0または1でPIOの出力を指定します。
4.00.03 Null文字のサポートしました。
bytes
_number_。受信データサイズを指定します。typeが`"binary"`のとき、`1`~`16`までの値を指定できます。typeが`"string"`のとき、最小値は`1`、最大値はメモリ依存となります。省時には`1`が設定されます。
type
_string_。受信データ形式を指定します。設定可能な値は`"binary"`、`"string"`です。省略時には、`"binary"`が設定されます。
ctrl4.00.03
_number_。PIOの方向を指定します。0のとき入力、1のとき出力となります。
  デバイス初期化 スタートコンディションの送信 リスタートコンディションの送信 接続デバイスからデータ読み出し 接続デバイスへデータ書き込み ストップコンディションを送信し、コネクションを閉じる 4.00.03
PIO設定
4.00.03
PIO取得
mode "init" "start" "restart" "read" "write" "stop" "setpio" "getpio"
freq 省略可 不要 不要 不要 不要 不要 不要 不要
timeout 省略可 不要 不要 不要 不要 不要 不要 不要
address 不要 必須 必須 不要 不要 不要 不要 不要
direction 不要 必須 必須 不要 不要 不要 不要 不要
data 不要 不要 不要 不要 必須 不要 必須 不要
bytes 不要 不要 不要 省略可 省略可 不要 不要 不要
type 不要 不要 不要 省略可 不要 不要 不要 不要
ctrl 不要 不要 不要 不要 不要 不要 必須 不要

備考

ビット割当
  • CMD: SCL
  • D0: SDA

SCL/SDAはプルアップしてください。
CLKはプルダウンしてください。
4.00.03"setpio" /"getpio" ではD1が使用できます。

複数バイト送信

バイナリデータを複数バイト送信したい場合は、データ書き込みを続けて実行することで、複数バイト送信することができます。

戻り値

res

string。成功時は"OK"を返します。失敗時はそれ以外の文字列を返します。

data1, data2, data3, …

number0255までの値が格納されます。接続デバイスからデータ読み出し、type = "binary"指定時のみ使用します。

string

string。受信データが格納されます。接続デバイスからデータ読み出し、type = "string"指定時のみ使用します。

data

4.00.03 number。PIOの取得値が格納されます。type = "getpio"指定時のみ使用します。

control

4.00.03 number。PIOの方向設定値が格納されます。0 のとき入力、1 のとき出力となります。type = "getpio"指定時のみ使用します。

res = fa.i2c{mode = "init", freq = 100}
res = fa.i2c{mode = "start", address = 50, direction = "write"}
res = fa.i2c{mode = "restart", address = 50, direction = "read"}
res, data1, data2, data3, ... = fa.i2c{mode = "read", type = "binary"}
res, string = fa.i2c{mode = "read", type = "string"}
res = fa.i2c{mode = "write", data = 0}
res = fa.i2c{mode = "stop"}
アドレス50のスレーブから5バイト読み出す
res = fa.i2c{mode = "init", freq = 100}
res = fa.i2c{mode = "start", address = 50, direction = "read"}
res, r1, r2, r3, r4, r5 = fa.i2c{mode = "read", bytes = 5, type = "binary"}
res = fa.i2c{mode = "stop"}
アドレス50のスレーブに0を書き込んでから1バイト読み出す
res = fa.i2c{mode = "init", freq = 100}
res = fa.i2c{mode = "start", address = 50, direction = "write"}
res = fa.i2c{mode = "write", data = 0}
res = fa.i2c{mode = "restart", address = 50, direction = "read"}
res, data = fa.i2c{mode = "read", bytes = 1, type = "binary"}
fa.i2c{mode = "stop"}
PIOの操作

4.00.03

res = fa.i2c {mode ="init", freq=100}
res = fa.i2c {mode ="setpio", data=1, ctrl=1} -- 出力High
res = fa.i2c {mode ="setpio", data=0, ctrl=1} -- 出力Low

res = fa.i2c {mode ="setpio", data=0, ctrl=0} -- 入力
res, data, ctrl = fa.i2c {mode="getpio"}

ip

FlashAir自身のIPアドレスを取得または設定します。

書式

ip, mask, gw = fa.ip(ipaddress, subnetmask, gateway)

引数

ipaddress

string。 FlashAirに設定するIPアドレス。

subnetmask

string。 サブネットマスク値。

gateway

string。 ゲートウェイのIPアドレス。

戻り値

ip

string。 IPアドレス。

mask

string。 サブネットマスク。

gw

string。 ゲートウェイ。

-- 値取得時
ip, mask, gw = fa.ip()
-- 値設定時
fa.ip("192.168.11.2", "255.255.255.0", "192.168.11.1")

MailSend

FlashAirよりメール送信を行う(ファイルの添付も可能)。

書式

fa.MailSend(table)

引数

table

以下のフィールドがあります。

from
_string_。 送信元メールアドレス。
headers
_string_。 メールヘッダ。
body
_string_。 メール本文。
server
_string_。 メールサーバ(smtp)。
user
_string_。 ユーザーID。
password
_string_。 パスワード。
attachment
_string_。 添付ファイル指定(任意)。
ContentType
_string_。 コンテンツタイプ指定(attachment指定時に有効で必須)。
port 4.00.03
_number_。ポート番号を指定します。デフォルトは465。

レスポンス

成功: MailSend is success.
失敗: Error: It failed to send.

動作例

from = "fromaddr@yahoo.co.jp"
rcpt = "toaddr@gmail.com"
a = fa.MailSend {
  from = from,
  headers = "To: "..rcpt.."\r\nFrom: "..from.."\r\nSubject: test",
  body = "HELLO HELLO",
  server = "smtp.mail.yahoo.co.jp",
  user = "flashair",
  password ="1234567890",
  attachment = "FBYF.jpg",
  ContentType = "image/jpg"
}

md5

hash(ハッシュの計算)へ統合されました。


ping

指定IPへPINGを発行します。

書式

result = fa.ping(ip)

引数

ip

string。 ipアドレス。

戻り値

result

number

1
正常動作。
nil
エラー。

動作例

result = fa.ping("192.168.130.1")

pio

SDインターフェースのPIO (Programmed Input/Output) 制御を行います。

書式

s, indata = fa.pio(ctrl, data)

引数

ctrl

number。 ピンの入出力指定。 読み込みたい端子に対応するビットに0 を、 書き込みたい端子に対応するビットに1 を指定します。

data

number。 出力ピン状態の指定。 書き込みたい端子に対応する各ビットに、0 を設定するとLow、1 を設定するとHighを出力します。

戻り値

s

number。 インターフェース制御の状態。

1
成功。
0
失敗。
indata

number。 入力ピン情報。

備考

ビット割当
  • CMD : 0x01
  • D0 : 0x02
  • D1 : 0x04
  • D2 : 0x08
  • D3 : 0x10

pwm(“duty”)

FlashAirでpwm操作を行う際、周波数とデューティ比を設定します。

書式

res = fa.pwm("duty", ch, freq, duty)

引数

ch

number。動作指定するPin情報です。04のチャンネルを指定できます。

freq

number。周波数(Hz単位)。浮動小数点で指定可能。

duty

number。デューティ比(0~100%)。浮動小数点で指定可能。

戻り値

res

number

1
成功。
nil
失敗。

pwm(“init”)

FlashAirでpwm操作を行う際、pwmの有効化、チャンネル数の設定を行います。

書式

ret = fa.pwm("init", ch, enable)

引数

ch

number。pwmモードを設定するチャンネルを1つ指定します。04のチャンネルを指定できます。

enable

number。1 または 0を指定。

1
pwmモードを有効にする。
0
pwmモードを無効にする。

戻り値

res

number

1
成功。
nil
失敗。

注意事項

  • CONFIGにIFMODE=1を設定する必要があります。
  • ビット割当
    • CMD: 0ch
    • D0: 1ch
    • D1: 2ch
    • D2: 3ch
    • D3: 4ch

pwm(“start”)

FlashAirでpwm操作を行う際、指定したチャンネルを動作させます。0~4のチャンネルを指定できます。

書式

res = fa.pwm("start", ch)

引数

ch

number。動作指定するPin情報です。04のチャンネルを指定できます。

戻り値

res

number

1
成功。
nil
失敗。

pwm(“stop”)

FlashAirでpwm操作を行う際、指定したチャンネルを停止させます。0~4のチャンネルを指定できます。

書式

res = fa.pwm("stop", ch)

引数

ch

number。停止指定するPin情報です。04のチャンネルを指定できます。

戻り値

res

number

1
成功。
nil
失敗。

ReadStatusReg

FlashAir自身のステータスレジスタを取得する。

書式

reg = fa.ReadStatusReg()

引数

なし

戻り値

無線LAN機能ステータスレジスタの内容を、文字列として返します。内容は無線LAN機能ステータスレジスタ(ApplicationStatus for Wireless LAN)を参照してください。

動作例

IPアドレスを取得する場合

local ipaddress = string.sub(fa.ReadStatusReg(),160,168)

remove

指定されたファイルを削除します。

書式

fa.remove(filepath)

引数

filepath

string。 削除対象のファイル名。

戻り値

なし

動作例

fa.remove("/DCIM/100__TSB/DSC_100.JPG")>

rename

指定されたファイルのパスを変更します。

書式

fa.rename(oldfile, newfile)

引数

oldfile

string。 元ファイル名。

newfile

string。 新ファイル名。

戻り値

なし

動作例

fa.rename("/DCIM/100__TSB/DSC_100.JPG","/DCIM/100__TSB/DSC_101.JPG")

request

HTTP (Hyper Text Transfer Protocol) リクエストを発行します。

書式

b, c, h = fa.request(url [, method [, headers [, file [, body [, bufsize [, redirect [, rcvbuff [, rcvfile]]]]]]]])

引数

url

string。 URLの文字列。(ポート指定可能:8080)

method

string。 HTTPリクエストメソッド。省略すると"GET" とみなします。

headers

table。 HTTPリクエストのヘッダーフィールド情報を追加できます。

file

string。 HTTPリクエストのボディに指定されたファイルを追加して送信します。

body

string。 HTTPリクエストのボディに指定された文字列を追加して送信します。 fileオプションと併用するとbody内部の文字列<!--WLANSDFILE--> をファイルに置換して送信します。bodyが指定されていない場合は、単にfileが送信されます。

bufsize

number。 HTTPリクエストの送信バッファ・サイズ。flickrサーバーへ送信する場合はこの値を1460*10とします。

redirect

boolean。 HTTPのリダイレクト動作の有効無効を制御する。省略するとtrue を指定したものとみなします。

rcvbuff

4.00.03 string。Luaのスタック上にメモリを確保し、受信データを確保したメモリに保存します。

rcvfile

4.00.03 string。受信したHTTPレスポンスのデータを指定したファイルへの保存を行います。

戻り値

b

string。 HTTP response bodyの文字列。

c

number。 HTTPステータスコード。

h

string。 HTTP response headerの文字列。

boundary = "--61141483716826"
contenttype = "multipart/form-data; boundary=" .. boundary
filepath = "sample.txt"
mes = "--".. boundary .. "¥r¥n"
 .."Content-Disposition: form-data; name=¥"file¥"; filename=¥""..file .."¥"¥r¥n"
 .."Content-Type: text/plain¥r¥n"
 .."¥r¥n"
 .."<!--WLANSDFILE-->¥r¥n"
 .."--" .. boundary .. "--¥r¥n"

blen = lfs.attributes(file,"size") + string.len(mes) - 17
b,c,h = fa.request{url = "http://192.168.0.1/upload.cgi:8080",
 method = "POST",
 headers = {["Content-Length"] = tostring(blen),
 ["Content-Type"] = contenttype},
 file = filepath,
 body = mes
}

備考

  • HTTP Responseの転送サイズは、3KBまで対応。
  • Flickrへの送信においてTCPリセットが行われることがあります。bufsizeオプションで送信バッファサイズを1460*10程度に小さくすると回避できる場合があります。

注意事項

  • この関数でHTTPS通信を実行する場合、実行前にfa.SetCert関数でルート証明書を設定することが推奨されています。ルート証明書を設定せずにHTTPS通信を実行した場合、ルート証明書を用いたサーバ証明書の検証が行われないまま、通信が行われます。
  • ルート証明書を用いてサーバ証明書を検証した結果、検証が失敗した場合、この関数の実行は失敗となります。

Scan

Scan開始コマンド。結果はGetScanInfo()で取得します。

書式

count = fa.Scan([ssid])

引数

ssid

string。 指定したSSIDについてスキャンを行います。 省略した場合は近傍のSSIDをスキャンします。

戻り値

count

number。 スキャンで見つかったAP数。

備考

Connect, Establish, または Bridge コマンドにより無線LANが有効になっていると利用できません。


指定したディレクトリ内で、更新日時によるファイル検索を行います。更新日時が最新であるファイルの検索、または引数で指定した更新日時によるファイルの検索が可能です。

書式

result, filelist, time = fa.search(type, path, searchtime)

引数

type

string。検索タイプ。file固定。

  • file:ファイルの検索
    path

    string。検索対象のディレクトリ。

    searchtime

    number。検索対象更新日時。-1またはFAT形式の日時を指定する。

  • -1を指定した場合、更新日時が最新のファイルを検索する。
  • -1以外を指定した場合、以下の両方を検索する。
    • 指定された更新日時と一致するファイル
    • 指定された更新日時より新しいファイルのうち最も古いファイル(指定された日時の次に新しいファイル)
  • FAT形式の日時について
    • 32ビットの整数値で、上位16ビットが日付、下位16ビットが時刻。
    • 日付と時刻は、command.cgiのop=100を実行した際に取得できる値と同じフォーマット。

戻り値

result

number。ステータス。

1 正常終了
-1 ファイルリストの作成時にオーバーフロー
  • searchtimeに-1を指定した場合、「更新日時が最新のファイル」のリスト作成で文字列バッファのオーバーフロー
  • searchtimeに-1以外を指定した場合、「指定された更新日時より新しいファイルのうち最も古いファイル」のリスト作成で文字列バッファのオーバーフロー
-2 ファイルリストの作成時にオーバーフロー(searchtimeに-1以外を指定した場合のみ返す可能性がある)
  • 「指定された更新日時と一致するファイル」のリスト作成で文字列バッファのオーバーフロー
-3 ディレクトリオープンエラー
-4 ディレクトリリードエラー
filelist

string。カンマ区切りのファイルリスト。

  • 条件に一致するファイルのリストをカンマ区切りの文字列で返す。
  • searchtimeに-1以外を指定した場合、「指定された更新日時と一致するファイル」のリストと「指定された更新日時より新しいファイルのうち最も古いファイル」のリストを連結した文字列を返す。
  • 該当ファイルがない場合は、”“(空文字列)を返す。
  • オーバーフロー以外のエラーの場合はnilを返す。
time

number。検索結果日時。

  • searchtimeに-1を指定した場合、「更新日時が最新のファイル」の更新日時を返す。
  • searchtimeに-1以外を指定した場合、 「指定された更新日時より新しいファイルのうち最も古いファイル」の更新日時を返す。
  • 条件に一致するファイルがない場合は0を返す。
  • オーバーフロー以外のエラーの場合はnilを返す。

備考

  • ファイルリストの作成時に512文字を超えた場合はバッファオーバーフローとなり、リストは途中で打ち切られる。
  • 検索するディレクトリの深さは3階層まで。

“/DCIM” から最新のファイルを検索する。
local result, filelist, time = fa.search("file", "/DCIM", -1)
if result ~= 1 then
  print("error: ", result)
end
if filelist ~= nil then
  for f in string.gmatch(filelist, '(.-),') do
      print(f)
  end
end
if time ~= nil then
  print(string.format("time: 0x%08x", time))
end
“DCIM”から更新日時が 2017/06/01 12:34:56 であるファイルと、その日時より新しいファイルのうち最も古いファイルを検索する。
local result, filelist, time = fa.search("file", "/DCIM", 0x4ac1645c)
if result ~= 1 then
  print("error: ", result)
end
if filelist ~= nil then
  for f in string.gmatch(filelist, '(.-),') do
      print(f)
  end
end
if time ~= nil then
  print(string.format("time: 0x%08x", time))
end

参考

FAT形式の日時変換例

文字列の日時をFAT形式に変換する

local function StringToFatDateTime(datetime_str)
  local pattern = '(%d+)/(%d+)/(%d+)%s+(%d+):(%d+):(%d+)'
  local year,month,day,hour,min,sec = string.match(datetime_str, pattern)
  year = year - 1980
  sec = bit32.rshift(sec, 1)
  local date_fat = bit32.bor(bit32.lshift(year, 9),
                             bit32.lshift(month, 5),
                             day)
  local time_fat = bit32.bor(bit32.lshift(hour, 11),
                             bit32.lshift(min, 5),
                             sec)
  local datetime_fat = bit32.bor(bit32.lshift(date_fat, 16),
                                 time_fat)
  return datetime_fat
end
FAT形式の日時を文字列に変換する
local function FatDateTimeToString(datetime_fat)
  local function getbits(x, from, to)
      local mask = bit32.lshift(1, to - from + 1) - 1
      local shifted = bit32.rshift(x, from)
      return bit32.band(shifted, mask)
  end
  local fatdate = bit32.rshift(datetime_fat, 16)
  local day = getbits(fatdate, 0, 4)
  local month = getbits(fatdate, 5, 8)
  local year = getbits(fatdate, 9, 15) + 1980

  local fattime = getbits(datetime_fat, 0, 15)
  local sec = getbits(fattime, 0, 4) * 2
  local min = getbits(fattime, 5, 10)
  local hour = getbits(fattime, 11, 15)

  return string.format('%02d/%02d/%02d %02d:%02d:%02d', year, month, day, hour, min, sec)
end

serial(“init”)

FlashAirでシリアル操作を行う際、シリアルの有効化、ボーレートの設定を行います。

書式

fa.serial("init", [boudrate])

引数

boudrate

number。ボーレート(未設定時は115200ボー)。

戻り値

なし

注意事項

  • CONFIGにIFMODE=1を設定する必要があります。
  • ビット割当
    • CMD: RX
    • D0: TX
    • GND: GND
  • フロー制御機能はありません。

serial(“read”)

FlashAirでシリアル操作を行う際、データの受信を行います。

書式

data = fa.serial("read")

引数

なし

戻り値

data

number。取得したデータ。データは1byte, number形式で取得します。受信バッファが空のときは、nilが返ります。


serial(“write”)

FlashAirでシリアル操作を行う際、データの送信を行います。

書式

fa.serial("write", data)

引数

data

string or number(0~255) or table。送信するデータ。

戻り値

なし


SetCert

証明書のクリアor登録(X.509 binary encode with DER)を行います。

書式

fa.SetCert(filename)

引数

filename

string。 DERファイルのパス、ファイル名を指定する。空文字列指定時は証明書をクリアする。

戻り値

result

number

1
正常動作。
nil
失敗。

動作例

-- 証明書の登録
res = fa.SetCert("DerSha256.cer")
if res == nil then
    print("certificate registration error")
end

-- 証明書のクリア
res = fa.SetCert("")
if res == nil then
    print("certificate clear error")
end

SetChannel

無線チャネルを設定する。

書式

fa.SetChannel(channelNo)

引数

channelNo

number。 チャネル(0~11 or 0x0~0xb 0指定はAUTO)。

戻り値

なし

動作例

fa.Disconnect()
fa.SetChannel("0xB")
fa.Establish("flashair3", "12345678", "6")

sharedmemory

共有メモリからデータを読み込み或いは書き込みを行います。
4.00.03Null文字のwrite, readをサポートしました。

書式

fa.sharedmemory(command, addr, len, wdata)

引数

command

string。 動作コマンド(write, read)。

addr

number。 アドレス(0~511)(0~2047)。

len

number。 データ長(0~512)(1~2048)。

wdata

string。 書込み文字列(コマンドでwrite指定時有効)。

レスポンス

write時
成功:1
失敗:nil
read時
成功:読み出し文字列
失敗:nil

動作例

res1 = fa.sharedmemory("write", 0, 8, "12345678")
res2 = fa.sharedmemory("read", 1, 4, 0)
print("res=",res2)
          
 結果:res=2345

sleep

指定時間だけスクリプトの実行を停止します。

書式

sleep(msec)

引数

msec

number。 停止時間を0~(232 - 1)の範囲のミリ秒単位で指定します。

戻り値

なし


spi

FlashAirよりSPI操作を行う。

書式

result = fa.spi(command, data)

引数

command
init
クロック周期の変更を行う(デフォルト値:1000)。
ビット割当 * D0 : CLK * D1 : CS * D2 : MISO * CMD : MOSI {: .ml-4 }
mode
SPIモードの指定(引数:0~3。デフォルト値:3)。
bit
転送ビット数(デフォルト値:8)。
write
ライト。
read
リード。
cs
チップセレクト信号の制御(引数1でCS=ON、0でCS=OFF)。
data

string。 データ。

レスポンス

write
ライトコマンド発行時の受信データ。
read
リードコマンド発行時の受信データ。
otherwise
ステータス

動作例

fa.spi("init", 1001)

spi(“bit”)

転送ビット数を指定します。(デフォルト値:8)

書式

res = fa.spi("bit", bit)

引数

bit

number。範囲132 。転送ビット数。

戻り値

res

number

1
成功。
0
失敗。

注意事項

spi(“write”) で文字列を指定する場合、bit指定との併用は不可となります。


spi(“cs”)

チップセレクト信号を制御します。

書式

fa.spi("cs", cs_level)

引数

cs_level

number

1
High
0
Low

local CS_ASSERT=0
local CS_NEGATE=1
fa.spi("mode", 2)
fa.spi("init", 1000)
fa.spi("cs", CS_ASSERT)
fa.spi("write", "hello", 5)
fa.spi("cs", CS_NEGATE)

spi(“init”)

インターフェースを初期化し、クロック周期の変更を行う(デフォルト値:1000)。CSはHighとなる。

書式

res = fa.spi("init"[, period])

引数

period

number。 省略可。クロック周期。

戻り値

res

number

1
成功。
0
失敗。

spi(“mode”)

SPIモードを指定します。(デフォルト値:3)

書式

res = fa.spi("mode", mode)

引数

mode

number。範囲03 。SPIモード。

戻り値

res

number

1
成功。
0
失敗。

注意事項

spi(“init”) の実行前にspi(“mode”)を実行してください。


spi(“read”)

ライトおよびリード。複数回転送でき、全てのリード結果を取得できます。送信データは固定値を繰り返し送信します。

書式

res_num = fa.spi("read")
res_tbl = fa.spi("read", xfer_num, data_num)

引数

xfer_num

number。転送回数。

data_num

number。送信データ。

戻り値

res_num

number。リードした値。

res_tbl

table。リードした値の配列。

送信データについて

fa.spi(“read”) の書式では、全ビット0が送信されます。

fa.spi(“read”, xfer_num, data_num) の書式では、data_numが繰り返し送信されます。

res_num = fa.spi("read")
print(res_num)
res_tbl = fa.spi("read", 10, 0xff)
for i, v in ipairs(res_tbl) do
  print(i, v)
end

spi(“write”)

ライトおよびリード。複数回転送できますが、リード結果は最後の1回のみ取得できます。

書式

res = fa.spi("write", data_num)
res = fa.spi("write", data_str, xfer_num)

引数

data_num

number。送信データ。

data_str

string。送信データを文字列で指定。1バイトずつ複数回に分けて転送される。

xfer_num

number。送信バイト数。data_strの文字列長を超えた場合には送信データは0x00となる。

戻り値

res

number。リードした値。(1度の関数呼び出しで複数回転送した場合は、最後にリードした値)

res = fa.spi("write", 0x12)
result = fa.spi("write", "hello", 8)

注意事項

data_strを使用する場合、bit指定との併用は不可となります。


strconvert

SJIS文字をUTF-8文字へ変換とutf8文字をSJIS文字へ変換する。

書式

fa.strconvert(format, orgstr)

引数

format

string。 「sjis2utf8」を指定するとsjis文字をutf8文字へ変換する、「utf82sjis」を指定するとutf8文字をsjis文字へ変換する。

orgstr

string。 変換元文字列。

レスポンス

成功:変換文字列
失敗:nil

動作例

str = "あかさたなはまやらわ"
print("testStr=", str)
a = fa.strconvert("sjis2utf8", str )
print("toUTF8=", a)
b = fa.strconvert("utf82sjis", a)
print("toSJIS=", b)

udp

UDPの送信を行います。

書式

res = fa.udp(address, port, type, data)

引数

address

string。 送信先アドレス。

port

number。 送信先ポート。

type

string。データタイプ。

  • “message”:文字列を送信する。
  • “file”: ファイルを送信する。
data

string。 type=”message”のときは送信データ、type=”file”のときは送信するファイル名。

戻り値

res

number_または_nil

1
成功。
nil
失敗。

文字列を送信

res = fa.udp("192.168.0.11", 50000, "message", "hello")

ファイルを送信

res = fa.udp("192.168.0.11", 50000, "file", "hello.txt")

注意事項

  • 非同期の関数呼び出しとなります。
  • 既にUDP送受信が動作中の場合は実行が失敗します。

udp

UDPの送信を行います。

書式

res = fa.udp(address, port, type, data)

引数

address

string。 送信先アドレス。

port

number。 送信先ポート。

type

string。データタイプ。

  • “message”:文字列を送信する。
  • “file”: ファイルを送信する。
data

string。 type=”message”のときは送信データ、type=”file”のときは送信するファイル名。

戻り値

res

number_または_nil

1
成功。
nil
失敗。

文字列を送信

res = fa.udp("192.168.0.11", 50000, "message", "hello")

ファイルを送信

res = fa.udp("192.168.0.11", 50000, "file", "hello.txt")

注意事項

  • 非同期の関数呼び出しとなります。
  • 既にUDP送受信が動作中の場合は実行が失敗します。

udp {mode="recv"}

UDPの受信を行います。

書式

res = fa.udp(table)

引数

table

以下のフィールドがあります。

mode
string。UDP操作の属性。"recv"を指定する。
address
string。指定したアドレスからのみ受信する。省略可。省略した場合は全てのアドレスから受信する。
port
number。受信待ちポート。
file
string。受信したデータを保存するファイル名。"sharedmemory"を指定すると共有メモリに保存する。
offset
number。sharedmemory内オフセット。fileに"sharedmemory"を指定した場合のみ指定可。省略可。省略時の値は0。
size
number。受信サイズ。指定サイズ受信後に受信動作が停止する。省略可。ファイルに受信する場合でsize省略時は受信するサイズが無制限となる。共有メモリに受信する場合でsize省略時は、2048 - offsetがsize値となる。
timeout
number。タイムアウト時間(秒)。指定時間後に受信動作が停止する。省略時はタイムアウト無しとなる。

各フィールドの必須/省略一覧

  受信
mode recv
address 省略可
port 必須
file 必須
offset fileに”sharedmemory”を指定時のみ指定可(省略可)
size 省略可
timeout 省略可

戻り値

res

number_または_nil

1
成功。
nil
失敗。

共有メモリに受信(アドレス100から10バイト)

res = fa.udp {mode = "recv",
  port = 50000,
  file = "sharedmemory",
  offset = 100,
  size = 10
}

ファイルに受信(100バイト受信で終了、タイムアウト30秒)

res = fa.udp {mode = "recv",
  port = 50000,
  file = "recv.txt",
  size = 100,
  timeout = 30
}

注意事項

  • 非同期の関数呼び出しとなります。
  • 既にUDP送受信が動作中の場合は実行が失敗します。
  • fileにファイル名を指定した場合は、受信したデータはファイルに追記されます。
  • fileにファイル名を指定した場合は、受信が終了するまでファイルに反映されません。
  • fileにファイル名を指定した場合は、1パケットで受信できるサイズの最大値は1460バイトとなります。
  • 受信動作は、以下の条件により停止します。
    • 受信バイト数がsizeで指定したサイズに達する(sizeを指定した場合)
    • timeoutで指定した時間が経過する(timeoutを指定した場合)
    • fa.udp {mode=”stop”}を実行する

udp {mode="send"}

UDPの送信を行います。

書式

res = fa.udp(table)

引数

table

以下のフィールドがあります。

mode
string。UDP操作の属性。"send"を指定する。
address
string。送信先アドレス。
port
number。送信先ポート。
file
string。送信データが格納されたファイル名。"sharedmemory"を指定すると共有メモリから送信する。message指定時は指定不可。
message
string。送信する文字列。file指定時は指定不可。
offset
number。sharedmemory内オフセット。fileに"sharedmemory"を指定した場合のみ指定可。省略可。省略時の値は0。
size
number。送信サイズ。省略可。省略時は、fileまたはmessageで指定した内容全てを送信する。fileに"sharedmemory"を指定してsizeを省略した場合は、offsetの位置以降の内容を全て送信する。

各フィールドの必須/省略一覧

  送信
mode send
address 必須
port 必須
file fileとmessageのどちらか一方のみ指定
message fileとmessageのどちらか一方のみ指定
offset fileに”sharedmemory”を指定時のみ指定可(省略可)
size 省略可

戻り値

res

number_または_nil

1
成功。
nil
失敗。

文字列を送信

res = fa.udp {mode = "send",
  address = "192.168.0.11",
  port = 50000,
  message = "hello"
}

ファイルの内容を送信

res = fa.udp {mode = "send",
  address = "192.168.0.11",
  port = 50000,
  file = "hello.txt"
}

共有メモリの内容を送信

fa.sharedmemory("write", 2, 17, "from sharedmemory")
res = fa.udp {mode = "send",
  address = "192.168.0.11",
  port = 50000,
  file = "sharedmemory",
  offset = 2,
  size = 17
}

注意事項

  • 非同期の関数呼び出しとなります。
  • 既にUDP送受信が動作中の場合は実行が失敗します。
  • fileとmessageはどちらか一方を指定してください。

udp {mode="send_interval"}

UDPの送信を指定間隔で行います。

書式

res = fa.udp(table)

引数

table

以下のフィールドがあります。

mode
string。UDP操作の属性。"send_interval"を指定する。
address
string。送信先アドレス。
port
number。送信先ポート。
file
string。送信データが格納されたファイル名。"sharedmemory"を指定すると共有メモリから送信する。message指定時は指定不可。
message
string。送信する文字列。file指定時は指定不可。
offset
number。sharedmemory内オフセット。fileに"sharedmemory"を指定した場合のみ指定可。省略可。省略時の値は0。
size
number。送信サイズ。省略可。省略時は、fileまたはmessageで指定した内容全てを送信する。fileに"sharedmemory"を指定してsizeを省略した場合は、offsetの位置以降の内容を全て送信する。
interval
number。送信間隔(秒)。省略可。省略時の値は5。
timeout
number。タイムアウト時間(秒)。省略時はタイムアウト無しとなる。

各フィールドの必須/省略一覧

  指定間隔送信
mode send_interval
address 必須
port 必須
file fileとmessageのどちらか一方のみ指定
message fileとmessageのどちらか一方のみ指定
offset fileに”sharedmemory”を指定時のみ指定可(省略可)
size 省略可
interval 省略可
timeout 省略可

戻り値

res

number_または_nil

1
成功。
nil
失敗。

1秒間隔で10秒間送信

res = fa.udp {mode = "send_interval",
  address = "192.168.0.11",
  port = 50000,
  file = "hello.txt",
  interval = 1,
  timeout = 10
}

注意事項

  • 非同期の関数呼び出しとなります。
  • 既にUDP送受信が動作中の場合は実行が失敗します。
  • fileとmessageはどちらか一方を指定してください。
  • 指定間隔送信動作は、以下の条件により停止します。
    • timeoutで指定した時間が経過する(timeoutを指定した場合)
    • fa.udp {mode=”stop”}を実行する

udp {mode="stop"}

UDPの受信動作または指定間隔送信動作を停止します。

書式

res = fa.udp(table)

引数

table

以下のフィールドがあります。

mode
string。UDP操作の属性。"stop"を指定する。

戻り値

res

number_または_nil

1
成功。
nil
失敗。

udp(“state”)

UDPの送受信状態を取得します。

書式

state, count = fa.udp("state")

引数

第1引数は”state”固定。

戻り値

state

number

1
UDP送受信が非同期で動作中。
nil
UDP送受信は動作していない。
count

number_または_string

number
送受信開始時からの送受信バイト数。
string: "destination unreachable\n"
送信サイズが0で接続機器が見つからない場合の戻り値。

UDPの送受信が終わるまで待機する

for i=1, 1000 do
  local state, count = fa.udp("state")
  if state == 0 then
    break
  end
  sleep(20)
end

watchdog(“event”)

WatchDogのタイマーをリセットします。

書式

result = fa.watchdog("event")

引数

第1引数は”event”固定。

戻り値

result

number

1
タイマー再始動。
0
watchdogをスタートしていない(タイマー待ち時間未設定)。

watchdog(“start”)

WatchDogのタイマーをスタートさせます。タイムアウトするとFlashAirが再起動します。

書式

result = fa.watchdog("start", cycle)

引数

第1引数は”start”固定。

cycle

number。 watchdogを発行を秒単位で指定します。

戻り値

result

number

1
タイマー開始。
0
タイマー待ち時間未設定。

備考

WatchDogとは、システムが機能し続けていることを確認するためのタイマーのことです。WatchDogのタイマーをスタートした後システムに異常事態が起こり、WatchDogのタイマーをリセットできなかった場合FlashAirを再起動させます。

使用例

  1. CONFIGにLUA_RUN_SCRIPT=/HelloWorld.luaを追加します。こちらのチュートリアルで使用したHelloWorld.luaをFlashAirルート上に保存します。すでにHello.txtがルート上にある場合はリネームまたは削除してください。

  2. FlashAirルート上に以下のコードを保存します。

    /WatchDog.lua

    fa.watchdog("start", 10)
    print("watchdog start")
    for i = 1, 30 do
        result = fa.watchdog("status")
        print("watchdog status:"..result)
    end
    result, filelist, time = fa.search("file", "/DCIM", -1)
    if filelist ~= nill then
        result = fa.watchdog("event")
        print("watchdog restart")
    else
        fa.watchdog("stop")    
        print("watchdog stop")                    
    end
    while 0 ~= fa.watchdog("status") do
        result = fa.watchdog("status")
        print("watchdog status:"..result)
    end
    

    このスクリプトはWatchdogタイマーを10秒間隔でスタートさせ、Watchdogステータスを数回確認、/DCIM上にファイルが存在したらWatchdogタイマーを再起動させ、Watchdogステータスが0になるまでprintし続けます。

  3. FlashAirを抜き差します。
  4. HelloWorld.luaにより作成されたHello.txtを確認します。(Hello There!が1行表示されている状態です)
  5. ブラウザからWatchDog.luaを実行します。
  6. ブラウザ上にprint文で出力した内容が表示されたら抜き差しせずにHello.txtを確認します。(Hello There!が2行表示されている状態です)
    FlashAirが再起動され、LUA_RUN_SCRIPTが実行されていることが確認できます。

watchdog(“status”)

WatchDogの状態を取得します。

書式

result = fa.watchdog("status")

引数

第1引数は”status”固定。

戻り値

result

number

0以上
watchdogタイマー発動までの残り時間。
0
発動までの残り時間が1秒未満。
-1
watchdogタイマー待機中。

watchdog(“stop”)

WatchDogのタイマーを停止します。

書式

result = fa.watchdog("stop")

引数

第1引数は”stop”固定。

戻り値

result

number

0
タイマー停止。

websocket

WebSocket通信をします。

書式

res, type, payload = fa.websocket(table)

引数

table

以下のフィールドがあります。

mode
string。WebSocket接続の属性。
address
string。接続先のサーバアドレス。
payload
string or table。メッセージ内容(文字列、配列)。
type
number。メッセージタイプ(テキスト=1、バイナリ=2、PING=9、 省略時=自動判別)。
length
number。メッセージの長さ(省略時=payloadのオブジェクト長)。
tout
number。タイムアウト時間(単位:msec)。
  オープン メッセージ送信 メッセージ受信 クローズ
mode "open" "send" "recv" "close"
address 必須 不要 不要 不要
payload 不要 必須 不要 不要
type 不要 省略可 不要 不要
length 不要 省略可 不要 不要
tout 不要 不要 省略可 不要

戻り値

res

number。受信成功時は0もしくは正数を返します。受信失敗時は負数を返します。

type

number。メッセージタイプ(テキスト=1、バイナリ=2)。メッセージ受信のときのみ使用します。

payload

string or table。受信メッセージ。受信失敗時はnilを返します。メッセージ受信のときのみ使用します。

res = fa.websocket{mode = "open", address = "ws://localhost/socket"}
res = fa.websocket{mode = "send", payload = "hello!", type = 1}
res, type, payload = fa.websocket{mode = "recv", tout = 5000}
fa.websocket{mode = "close"}

ネットワークに無線接続されているかを確認します。

書式

result = fa.WlanLink()

引数

なし

戻り値

result

number

1
接続状態。
0
未接続。

パーティション操作

第2パーティションへアクセスを行うことが出来ます。第2パーティションはLuaの内部ログなどを保存し、ホスト機器からのファイルアクセスによる影響がない領域のことです。ドライブレターにより、パーティションを指定することが可能です。

書式

"p" --1stパーティション(省略化)
"s" --2ndパーティション
"h" --秘匿領域

その他

パーティションの作成は、Linux、Win10などのホスト機器を使用して分割することが可能です。

local file = io.open("s:\flashair.log", "a")