2016-11-21 2 views
1

루아를 사용하여 프로그래밍해야하는 nodemcu 펌웨어가있는 ESP8266 모듈이 있습니다. 파일의 html 페이지에서 입력 한 사용자 이름/암호 자격 증명을 저장하는 코드를 작성했습니다. 파일에 글자를 쓰는 중에 루아 오류가 발생했습니다

는 루아 기능이며

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에서 작동하지 않습니다.오류가 발생하지만 :을 인쇄하지 않으면 10KB가 무료입니다.

나는 또한 file.write(wifi_ssid, "\n")을 시도했지만 작동하지만 출력은 변경되지 않습니다.

Annyone은 문자 필드를 삽입하려면 어떻게해야합니까?

+0

어떤 펌웨어 버전을 사용하십니까? –

답변

0

당신은 파일 라인에서 라인 문자의 끝을 사용하는

file.writeline(wifi_ssid) 

를 사용해야합니다.

가비지 컨텐츠로 인해 메모리 문제를 일으키는 파일 열기가 있는지 확인하려면 먼저 파일을 삭제하고 자격 증명을 다시 쓸 수 있습니다.

file.writeln 또는 flush 작업 후에 collectgarbage() 메서드를 사용하는 것이 좋습니다.

+0

이미 시도했지만 메모리가 충분하지 않습니다. – ScazzoMatto

+0

가비지 수집을 시도해 주시겠습니까? 각 file.writeline 뒤에 collectgarbage()를 추가하고 플러시 하시겠습니까? – cagdas

+0

또한 쓰기 전에 파일을 삭제하는 것이 좋습니다. 시험 중에 쓰레기가 채워질 수 있습니다. – cagdas

관련 문제