cstringserial-portwifisparkcore

spark core wifi credentials change


I'm working on a small product idea with my spark core, and setting up a serial interface for the customer to set up their product onto their wifi:

String newssid = wifissid(3);
String newpw = wifipw(3);
WiFi.setCredentials(newssid, newpw);

As you can see, I created 2 functions that over a serial connection to a pc returns the ssid and the password. I have already managed to get the setCredentials to work when I set the credentials in the code:

WiFi.setCredentials("D-link7853", "thisismypassword");

but when I run it with the strings, as above, it doesn't want to compile. the error given is:

serial_wifi_cred_change_3.cpp:49:39: error: no matching function for call to 'WiFiClass::setCredentials(String&, String&)' }
serial_wifi_cred_change_3.cpp:49:39: note: candidates are: In file included from ../inc/spark_wiring.h:37:0, from ../inc/application.h:29, from serial_wifi_cred_change_3.cpp:2: ../inc/spark_wiring_wifi.h:61:21: note: static void WiFiClass::setCredentials(const char*) static void setCredentials(const char ssid); ^ ../inc/spark_wiring_wifi.h:61:21: note: candidate expects 1 argument, 2 provided ../inc/spark_wiring_wifi.h:62:21: note: static void WiFiClass::setCredentials(const char, const char*) static void setCredentials(const char *ssid, const char password); ^ ../inc/spark_wiring_wifi.h:62:21: note: no known conversion for argument 1 from 'String' to 'const char' ../inc/spark_wiring_wifi.h:63:21: note: static void WiFiClass::setCredentials(const char*, const char*, long unsigned int) static void setCredentials(const char *ssid, const char *password, unsigned long security); ^


Solution

  • Christian Loris is right.

    setCredentials expects SSID and password to be char * type. Your code should look like this:

    String newssid = "foo";
    String newpw = "bar";
    
    char newssidBuf[newssid.length()];
    char newpwBuf[newpw.length()];
    newssid.toCharArray(newssidBuf, newssid.length());
    newpw.toCharArray(newpwBuf, newpw.length());
    
    WiFi.setCredentials(newssidBuf, newpwBuf);