只有第一行SPIFFS适用于WiFi.begin() - ESP8266-12E

时间:2017-05-22 23:15:01

标签: c++ esp8266 spiffs

当我运行下面的代码时,只有一行可以使用。如果我注释掉SSID写/读部分,密码将起作用。我注释掉SSID可以使用的密码部分。但是,如果我将两者都留在WiFi中永远不会连接。我将WiFi.begin()中的SSID和密码硬编码为完整性检查,确定它连接起来。所以它必须与我使用SPIFFS编写或读取多行的方式有关。然而,我确实正确地恢复了两条线,所以至少,如果我是Serial.println()它们。我也对SPIFFS的任何建议替代方法感兴趣,因为我对使用返回字符串的函数不太兴奋。我宁愿有一个函数返回一个char *当然但我的C很生锈。我还尝试了各种终结器\ r \ n然后\ 0在写入和读取级别,到目前为止没有任何工作,也尝试修剪字符串。我遗漏了基础知识,但我做了一个SPIFFS.begin()和格式(当然不是那个顺序)似乎工作正常,因为我似乎让Serial.println()看起来正确。我使用win10 x64安装了最新的arduino IDE和SPIFFS。这是代码:

if (SPIFFS.begin())
{
    Serial.println("SPIFFS.begin()...");

    File f = SPIFFS.open(file, "w");//write...

    if (!f)
    {
        Serial.println("failed to open.");
    }
    else//yes, file exists...
    {
        //found file write to it..
        f.println("SomeSSID");//ssid...
        f.println("MyPassword");//password...

        f.close();

        //now lets read the file..
        f = SPIFFS.open(file, "r");

        if (!f)
        {
            Serial.println("file failed to open..");
        }
        else
        {
            //read file...          
            String SSID = f.readStringUntil('\n');              
            String PASSWORD = f.readStringUntil('\n');

            f.close();

            //this didn't help
            /*SSID.trim();
            PASSWORD.trim();*/

            ssid = (char*)SSID.c_str();
            pwd = (char*)PASSWORD.c_str();

            Serial.println(ssid);
            Serial.println(pwd);
        }
    }       
}

//does not work..
WiFi.begin(ssid, pwd);

1 个答案:

答案 0 :(得分:0)

@dandavis - 谢谢!我最终只是将其更改为:const char * ssid = f.readStringUntil(' \ n')。c_str();