Hallo Roland,
Einfach das Passwort aka PreSharedKey weglassen funktioniert nicht wie schon festgestellt.
Die C++ Klasse “Bee” in der Datei “SenseBoxMCU.cpp” verwendet in der von Dir verwendeten Funktion “connectToWifi” die WiFi Funktion “WiFi.begin(ssid, password)”.
Diese ist in den Untiefen der Bibliotheken in “WiFi.cpp” definiert
uint8_t WiFiClass::begin(const char *ssid, const char *key)
{
return startConnect(ssid, M2M_WIFI_SEC_WPA_PSK, key);
}
Erfordert also immer den PreSharedKey … aber, dort gibt es auch die folgenden Funktion
uint8_t WiFiClass::begin(const char *ssid)
{
return startConnect(ssid, M2M_WIFI_SEC_OPEN, (void *)0);
}
Das wäre die passenden Funktion zum anmelden im offenen Freifunknetz
Quick’n’Dirty Lösung ohne diese geprüft zu haben:
- Du suchst im Library Verzeichnis die Dateien “SenseBoxMCU.cpp” und “SenseBoxMCU.h” (Kopie machen nicht vergessen)
- In der “SenseBoxMCU.cpp” folgenden Codeblock am besten oberhalb der orginale Funktion uint8_t Bee::connectToWifi(char* ssid, char* password) hinzufügen.
uint8_t Bee::connectToWifi(char* ssid)
{
nwid = ssid;
pw = password;
if (!Serial)
{
Serial.begin(9600); //check if already connected
delay(1000);
}
if (WiFi.status() == WL_NO_SHIELD) {
Serial.println(“WiFi Bee not present.”);
while (true);
}
while (status != WL_CONNECTED) {
Serial.print("Attempting to connect to SSID: ");
delay(100);
Serial.println(ssid);
status = WiFi.begin(ssid);
delay(5000);
}
Serial.println(“Successfully connected to your WiFi.”);
Serial.println(this->getIpAddress());
this->storeIpAddress();
return status;
}
Wie Du siehst ist das im Prinzip eine Kopie der Orginalfunktion und nur die Passwort Referenz raus gelöscht damit die gewünschte WiFi Funktion für offene Funknetze genommen wird.
- In der Datei “SenseBoxMCU.h” die folgende neue Zeile in der Klasse Bee einfügen
class Bee
{
public:
Bee();
uint8_t connectToWifi(char* ssid); // <---------------------- NEU
uint8_t connectToWifi(char* ssid, char* password);
void startAP(char* ssid);
char* getSsid();
char* getPassword();
char* getIpAddress();
private:
char* nwid = “”;
char* pw = “”;
char ip[15];
int status = WL_IDLE_STATUS;
void storeIpAddress();
};
- Nun noch in eurem Quellcode b->connectToWifi(“Freifunk”,""); gegen b->connectToWifi(“Freifunk”); austauschen, hochladen und Du solltest Dich verbinden können.
NACHTEIL:
Wenn ein Update der Bibliothek erfolgt werden die beiden Dateien wieder überschrieben und Deine Erweiterungen sind weg. Denke aber um noch vor den Ferien Erfolg zu haben ist es ein akzeptables Risiko.
Alternativ kannst Du natürlich euren Code so umschreiben um direkt die WiFi Bibliothek zu referenzierten, was aber wohl deutlich mehr Aufwand und Fehlerquellen beinhaltet.
Viele Grüße
Bernd