Podłączenie ESP8266 do internetu

Klasa HttpClient

Klasa ta opakowuje klasę WiFiClient i udostępnia metody pozwalające obsłużyć protokół http. Metody begin i end wskazują początek i koniec obsługi wywołania http. Metoda begin pobiera jako parametr adres, z którym należy nawiązać połączenie. Dodatkowo klasa posiada metodę addHeader dodającą nagłówek http, bezparametrową metody GET i POST pozwalające wysłać lub odebrać dane z serwera.

Kod układu sterującego diodą wygląda następująco:

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

#include <WiFiClient.h>

ESP8266WiFiMulti WiFiMulti;

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

void loop() {
  if (WiFiMulti.run() != WL_CONNECTED) {
    delay(300);
    return;
  }
  WiFiClient client;
  HTTPClient http;

  if (http.begin(client, "http://<your-dns-name-or-ip>:5000/led")) {
    int httpCode = http.GET();

    String payload = http.getString();

    if (payload == "ON") {
      digitalWrite(LED_BUILTIN, LOW);
    } else {
      digitalWrite(LED_BUILTIN, HIGH);
    }
  }

  delay(300);
}

Natomiast układu reagującego na wciśnięcie przycisku:

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

#include <WiFiClient.h>

ESP8266WiFiMulti WiFiMulti;
int prevButtonState = LOW;

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

void loop() {
  if (WiFiMulti.run() != WL_CONNECTED) {
    delay(300);
    return;
  }
  WiFiClient client;
  HTTPClient http;
  int readValue = digitalRead(0);
  if (readValue == LOW && prevButtonState == HIGH) {
    if (http.begin(client, "http://<your-dns-name-or-ip>:5000/button")) {
      http.addHeader("content-type", "application/json");
      int httpCode = http.POST("");
    }
  }
  prevButtonState = readValue;

  delay(300);
}

Układ sterujący diodą został po prostu podłączony do zasilania (przez programator w trybie UART). Układ reagujący na wciśnięcie przycisku został skonstruowany w sposób opisany w poprzednim artykule. Jak widać na nagraniu całość działa.

Rozwiązanie ma jednak swoje wady:

  • Serwer nie weryfikuje czy urządzenie, które się z nim łączy jest tym za które się podaje
  • Nawet gdyby serwer dokonywał weryfikacji, to transmisja jest nieszyfrowana, więc ktoś mógłby ją podsłuchać i wydobyć dane potrzebne do podszycia się
  • Protokół http jest dość ciężki, na nagraniu wszystko wydaje się działać natychmiastowo, wynika to jednak tylko z faktu iż serwer znajduje się w tej samej sieci WiFi

Inne artykuły związane z Internetem rzeczy

2 odpowiedzi do “Podłączenie ESP8266 do internetu”

  1. Dzień dobry!
    Skorzystałem z tego artykułu teraz (sty, 2023), zainstalowałem
    Microsoft .NET SDK 6.0.405 (była jeszcze do wyboru 7.0).
    Przy uruchomieniu Twin miałem komunikaty o potrzebie doinstalowania Microsoft ASP.NET Core 2.2.8 i Microsoft ASP.NET Core Runtime – 2.2.8, co zrobiłem.
    Server ruszył, ale wcześniej pojawił się komunikat „… warning NETSDK1138: platforma docelowa „netcoreapp2.2″ nie jest już obsługiwana i w przyszłości nie będzie otrzymywać aktualizacji zabezpieczeń. …”.
    Nie jestem zaznajomiony z .NET i prosiłbym o radę co i jak zmienić w projekcie Twin, żeby pracować na aktualnych wersjach platformy .NET?
    Z góry dziękuję,
    Andrzej Bluszcz

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *