2016-11-21 38 views
1

我有一個必須使用lua編程的具有nodemcu固件的ESP8266模塊。 我寫了一些代碼來保存從文件中的html頁面輸入的用戶名/密碼憑證。在添加字符以寫入文件時出現Lua錯誤

這是LUA功能和正常工作

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 

它所有的作品,但我的輸出文件是一樣的東西

usernamepasswordotherusernameotherpassword 

所以我插入的值,比如

file.write(wifi_ssid) 
file.write(":") 
file.write(wifi_password) 
分開場

和許多其他方式,但我的代碼不能在我的ESP8266上工作,因爲我得到not enough memory錯誤,但如果我不打印:我有類似10 kb免費的東西。

我也試過file.write(wifi_ssid, "\n")它工作,但輸出不會改變。

Annyone知道我該怎麼做才能插入字符beetwen字段?

+0

你使用的是什麼版本的固件? –

回答

0

您需要使用

file.writeline(wifi_ssid) 

在文件中的行用行字符結束。

要確定文件是否因其垃圾內容而導致文件打開導致出現mem問題,可以先刪除它並重新編寫憑據。

此外它是很好有collectgarbage()方法後你的file.writeln或刷新操作。

+0

已經嘗試過,它說沒有足夠的內存 – ScazzoMatto

+0

你可以試試它與一些垃圾收集?請在每個file.writeline後添加collectgarbage()並刷新? – cagdas

+0

另外我建議在寫之前刪除你的文件。可能的垃圾將在您的試用期間填充到它。 – cagdas

相關問題