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
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