0

当我运行下面的代码时,只有一行可以工作。如果我注释掉 SSID 写入/读取部分,密码将起作用。如果我注释掉 SSID 将起作用的密码部分。但是,如果我将两者都留在 WiFi 中,则永远无法连接。我将 WiFi.begin() 中的 SSID 和密码都硬编码为健全性检查,并确定它已连接。所以它一定与我使用 SPIFFS 编写或阅读多行的方式有关。但是,我确实正确地恢复了两条线,所以至少如果我使用 Serial.println() 的话。我也愿意为 SPIFFS 提供任何建议的替代方案,因为我对使用返回字符串的函数不太感兴趣。我当然更希望有一个返回 char* 的函数,但我的 C 非常生疏。我还在写作和阅读级别尝试了各种终止符 \r 然后 \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);
4

1 回答 1

0

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

于 2017-05-23T23:11:48.817 回答