2016-11-21 8 views
1

luaを使用してプログラムする必要があるnodemcuファームウェアを備えたESP8266モジュールがあります。 ファイルのhtmlページから入力されたユーザー名/パスワードの資格情報を保存するコードを書きました。ファイルに書き込む文字を追加する際にLuaエラーが発生する

これはLuaの関数であり、それはそれはすべての作品が、私の出力ファイルは、だから私は

file.write(wifi_ssid) 
file.write(":") 
file.write(wifi_password) 
のような別のフィールドに値を挿入

usernamepasswordotherusernameotherpassword 

のようなものである微

function parse_wifi_credentials(vars) 
    if vars == nil or vars == "" then 
     return false 
    end 

    local _, _, wifi_ssid = string.find(vars, "wifi_ssid\=([^&]+)") 
    local _, _, wifi_password = string.find(vars, "wifi_password\=([^&]+)") 

    if wifi_ssid == nil or wifi_ssid == "" or wifi_password == nil then 
     return false 
    end 

    pwd_len = string.len(wifi_password) 
    if pwd_len ~= 0 and (pwd_len < 8 or pwd_len > 64) then 
     return false 
    end 

    file.open("credentials.txt", "a") 
    file.write(wifi_ssid) 
    file.write(wifi_password) 
    file.flush() 
    file.close() 

    return true 
end 

の作品

など、これ以外にも多くの方法がありますが、私のコードはESP8266で動作しません。not enough memoryエラーですが、もし私が:を印刷しなければ、私は10kbフリーのようなものを持っています。

私もfile.write(wifi_ssid, "\n")を試しても動作しますが、出力は変わりません。

キャラクターをフィールドに挿入するにはどうすればよいですか?

+0

使用しているファームウェアのバージョンは? –

答えて

0

あなたはファイルの行で行文字の終わりを使用する

file.writeline(wifi_ssid) 

を使用する必要があります。

ガーベッジコンテンツのためにmemの問題を引き起こしてファイルが開かれているかどうかを確認するには、最初に削除してクレデンシャルを書き直すことができます。

file.writelnまたはflush操作の後にcollectgarbage()メソッドを持つことも良いことです。

+0

すでに試してみましたが、メモリが不足しています – ScazzoMatto

+0

ガベージコレクションで試してみてください。各file.writelineの後にcollectgarbage()を追加してフラッシュしますか? – cagdas

+0

また、書き込み前にファイルを削除することをお勧めします。あなたの裁判中に、可能なごみがその中に埋め込まれます。 – cagdas

関連する問題