ESP8266 Bez strony internetowej

9

Czy mogę wysyłać dane do ESP8266 bez tworzenia serwera WWW?

Uzyskuję dostęp do pinów GPIO ESP8266 za pośrednictwem serwera WWW. Teraz chcę stworzyć do tego aplikację na Androida. Chcę więc wysłać dane do 8266 bez tworzenia serwera WWW - czy to możliwe?

SHILADITYA DEY
źródło
Korzystając z aplikacji na Androida, byłbyś w tej samej sieci?
Rohan

Odpowiedzi:

8

Tak, możesz wysyłać dane do ESP8266 bez użycia serwera WWW, ale możesz chcieć użyć jednego lub użyć czegoś funkcjonalnie związanego z jednym.

ESP8266 to dość ogólne urządzenie komputerowe z radiem Wi-Fi i stosem sieci, więc możesz wdrożyć dowolny rozsądny protokół, który chcesz opisać w kodzie.

Jednak dość popularne stało się wdrażanie protokołów, które wyglądają i działają podobnie jak miniaturowe strony internetowe przeznaczone do spożycia przez ludzi.

tzn. zamiast łączenia się i robienia czegoś takiego przez klienta

GET /index.html HTTP/1.1

to może powiedzieć

GET /gpio/15/value HTTP/1.1

Adres URL nie odnosi się do konkretnego dokumentu, ale do pewnej ilości danych na urządzeniu, do którego chcesz uzyskać dostęp. Można zrobić podobne rzeczy POST, PATCH,DELETE itp żądań.

O ile nie tworzysz strony do spożycia przez ludzi, zwykle wymienianymi danymi nie byłyby strony HTML. Często może to być coś w rodzaju JSON. Na przykład

GET /gpio/15/value HTTP/1.1

może wywołać odpowiedź typu

{"gpio": 15, "direction": "in", "value": 0}

Podobnie można utworzyć punkt końcowy, w którym klient może ustawić GPIO, mówiąc

POST /gpio/15 HTTP/1.1
{"direction": "out", "value": 1}

Jest to do pewnego stopnia pytanie semantyczne lub specyficzne dla implementacji, czy program odpowiadający na takie zapytania jest „serwerem WWW” - może to być serwer WWW, który uruchamia różne zadania pomocnicze do obsługi danych i gpios (podobnie jak serwer obsługujący strony dynamicznie generować część ich treści na podstawie zapytań do bazy danych), lub może to być dedykowany program, który zarówno zajmuje się danymi, jak i potrafi mówić HTTP.

I oczywiście używanie HTTP do wymiany ładunków JSON jest tylko jednym z wielu sposobów robienia rzeczy - tak się składa, że ​​jest to obecnie popularny sposób, który ponownie wykorzystuje wiele koncepcji podobnych do serwera WWW, i może do pewnego stopnia nawet pozwolić na korzystanie z przeglądarki internetowej dla testów.


Warto również pamiętać, że taki schemat działa najlepiej lokalnie, gdy telefon i ESP8266 są klientami tej samej domowej sieci Wi-Fi. Jeśli telefon nie jest „w domu” lub jest, ale jest tylko w sieci mobilnej, zezwolenie na połączenie z ESP8266 oznaczałoby zezwolenie na zewnętrzne żądania do sieci domowej, czego najlepiej unikać. W takim przypadku dość popularne jest użycie protokołu, w którym zarówno urządzenie ESP8266, jak i telefon niezależnie docierają do zewnętrznego serwera przekaźników, który przesyła między nimi wiadomości. MQTT jest przykładem schematu często używanego w systemie z architekturą opartą na serwerze przekaźnikowym.

Chris Stratton
źródło
Ciekawi mnie też wdrożenie DELETEdla portu ;-)
Arjan,
1
W wielu systemach linuxowych musisz „wyeksportować” GPIO, zanim będziesz mógł używać go z interfejsem / sys / class / gpio. Nie wiem, czy potrafisz „wyeksportować” jeden, ale koncepcyjnie to może pasować do USUŃ :-)
Chris Stratton
2

Tak, możesz napisać niestandardowy serwer TCP . Lub, dla mniejszej wagi, użyj serwera UDP .

Tak czy inaczej, zdefiniuj własny protokół aplikacji na podstawie TCP / UDP i poproś aplikację o przesłanie go. I oszczędzasz na kosztach HTTP. (HTTP może mieć około 1000 bajtów narzutu na wiadomość!)

BraveNewCurrency
źródło