fbpx

Jak połączyć ESP8266 z WiFi

Opublikowane przez Jerzy Wickowski w dniu

Czymże byłoby IoT bez dostępu do sieci? Prawdopodobnie pozostało by tylko T, czyli nic szczególnego. Gdyż takie urządzenia elektroniczne, znamy od bardzo dawna. Właśnie dzięki połączeniu ich z globalną siecią otwierają się zupełnie nowe możliwości. Dostęp do sieci możemy uzyskać na wiele sposobów. Od najbardziej tradycyjnego, czyli połączenia przewodem, aż do łączności satelitarnej. Poniżej przedstawię jak połączyć do sieci poprzez najpopularniejszy standard, czyli WiFi, na przykładzie płytki Wemos D1 mini z wbudowanym modułem WiFi ESP8266, której wybór opisywałem tu.

Moduł ESP8266WiFiMulti

Do połączenia Wemosa z łajfajem użyłem modułu ESP. Pozwala on na dodanie kilku sieci. Następnie metoda Run sprawdza, która z sieci ma najlepszy sygnał. Po zebraniu tych informacji następuje próba połączenia. Metoda ta może zwrócić jeden z następujących statusów(źródło):

  • WL_CONNECTED = 3, połączono
  • WL_NO_SHIELD = 255, brak modułu WiFi
  • WL_IDLE_STATUS = 0, tymczasowy stan po wywołaniu metody Run, po pewnym czasie przejdzie w stan WL_CONNECT_FAILED lub WL_CONNECTED
  • WL_NO_SSID_AVAIL = 1, brak konkretnej sieci w zasiegu
  • WL_SCAN_COMPLETED =2, skanowanie sieci zakończone
  • WL_CONNECT_FAILED = 4, łączenie zakończone niepowodzeniem
  • WL_CONNECTION_LOST = 5, utracono połączenie z siecią
  • WL_DISCONNECTED = 6, rozłączono

Implementacja

W poniższym przykładzie zaimplementowałem prostą klasę, która posiada dwie publiczne metody. AddConnectionData do dodawania sieci, oraz Run, która metoda zwraca boola, jako informację, czy udało się ustalić połączenie, czy nie. Zwrócienie true oznacza, że udało się połączyć, oraz że zmienna WiFi została zaincjalizowana. Dzięki temu pozostałe moduły będą mogły to połączenie wykorzystywać.

ESP8266WiFiMulti.h

class WifiConnector{
public:
    void SetConnectionData(char* ssid, char* password);
    bool Run();
};

ESP8266WiFiMulti.cpp

#include "ESP8266WiFiMulti.h"
#include "WifiConnector.h"

ESP8266WiFiMulti WiFiMulti;
void WifiConnector::AddConnectionData(char* ssid, char* password){
    WiFiMulti.addAP(ssid, password);
}

bool WifiConnector::Run(){
    int status = WiFiMulti.run();
    if (status == WL_CONNECTED){
        return true;
    }
    return false;
}

Co dalej

Zatem skoro mamy połącznie z internetem to następnym krokiem powinno być wykonanie zapytania HTTP, ale o tym już następnym razem juz jest kolejny post.



Czy to był wartościowy artykuł? Zapisz się, a wyślę Ci dwa ebooki o czystym kodzie oraz będę informował Cię o nowych postach

2 Komentarze

krii · 2019-11-22 o 11:42

no a gdzie miejsce dla tych parametrów kilku sieci ssid

    Jerzy Wickowski · 2019-11-22 o 18:27

    Hej. W takiej sytuacji uruchom dwa razy AddConnectionData, a dopiero potem run.

Dodaj komentarz

Twój adres email nie zostanie opublikowany.

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.


    Zapisz się

    Wyślę Ci dwa dokumenty mówiące o jakości kodu. Dodatkowo będę Cię informował o nowych postach i nowościach.