Podłączenie ESP8266 do internetu

Nawiązanie połączenia

Aby ESP mogło połączyć się z serwerem należy włączyć kartę WiFi i ustawić ją w odpowiedni tryb, aby to zrobić należy zaimportować pakiet ESP8266WiFi i wywołać metodę mode() w klasie WiFi. Metoda przyjmuje jedną z wartości: WIFI_OFF – brak wifi , WIFI_STA – tryb stacji roboczej – czyli ten o który nam chodzi, WIFI_AP – Access Point, WIFI_AP_STA – tryb mieszany.

#include <ESP8266WiFi.h>

void setup() {
    WiFi.mode(WIFI_STA);
}

Klasa WiFi umożliwia podłączenie się sieci, jej użycie wymaga jednak pewnej ilości nadmiarowego kodu. Znacznie łatwiej jest użyć klasy ESP8266WiFiMulti z pakietu o tej samej nazwie. Obsługuje ona ponowne nawiązywanie utraconego połączenia, czy przełączanie się między różnymi sieciami WiFi. Klasa ta posiada metody addAP i run. Pierwsza pozwala dodać sieć i wymaga podania nazwy sieci i hasła. Metodę tą wywołuje się w metodzie setup(). Bezparametrowa metoda run() zwraca informację o stanie WiFi, w szczególności czy urządzenie jest podłączone do jakiejś sieci. Poniższy kod mruga wbudowaną diodą led jeżeli urządzenie nie ma połączenia z siecią i gasi ją na stałe jeżeli połączenie zostaje nawiązane.

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>

ESP8266WiFiMulti WiFiMulti;

void setup() {
    WiFi.mode(WIFI_STA);
    WiFiMulti.addAP("<SSID>", "<Password>");
    pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  if (WiFiMulti.run() != WL_CONNECTED) {
    digitalWrite(LED_BUILTIN, LOW);
    delay(300);
    digitalWrite(LED_BUILTIN, HIGH);
    delay(300);
    return;
  }
  delay(500);
}

W miejsce <SSID> należy wstawić nazwę swojej sieci WiFi, a <Password> hasło.

Biblioteka zawiera zawiera klasy WiFiClient oraz Udp do obsługi protokołów warstwy transportu (TCP, UDP), umożliwiające implementację obsługi dowolnego protokołu warstwy aplikacji.

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>

#include <WiFiClient.h>

ESP8266WiFiMulti WiFiMulti;

void setup() {
    WiFi.mode(WIFI_STA);
    WiFiMulti.addAP("<SSID>", "<Password>");
}

void loop() {
  if (WiFiMulti.run() != WL_CONNECTED) {
    delay(300);
    return;
  }
  WiFiClient client;
  String host = "<your-dns-name-or-ip>";
  int port = 5000;
  if (!client.connect(host, port)) {
    delay(300);
    return;
  }

  client.println("Hello");
  String response = client.readStringUntil('\n');

  delay(300);
}

W miejsce <your-dns-name-or-ip> należy wstawić adres IP komputera na którym działa aplikacja serwerowa.

Powyższy kod nie wykorzystuje protokołu http i nie zadziała z , wcześniej utworzoną, aplikacją serwerową. Ręczna implementacja tego protokołu jest dość złożona. Na szczęście nie trzeba tego robić.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *