0

以下のコードを実行すると、1 行だけが機能します。SSID の書き込み/読み取り部分をコメントアウトすると、パスワードが機能します。パスワード部分をコメントアウトすると、SSID が機能します。しかし、両方をWiFiに残しておくと、接続できなくなります。健全性チェックとして WiFi.begin() に SSID とパスワードの両方をハードコーディングし、十分に接続できることを確認しました。したがって、SPIFFS を使用して複数の行を書いたり読んだりする方法と関係があるに違いありません。ただし、両方の行を正しく返すので、Serial.println() を使用すると、少なくともそう思われます。また、文字列を返す関数を使用することにあまり興奮していないため、SPIFFS の代替案も検討しています。もちろん、char* を返す関数が必要ですが、私の C はかなり錆びています。また、さまざまなターミネータ \r を試してから \0 読み書きレベルで試しましたが、これまでのところ何も機能していません。弦も切ってみました。私は基本を省略しましたが、Serial.println() が一見正しいように見えるので、SPIFFS.begin() とフォーマット (もちろんその順序ではありません) を実行します。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 に答える