Skocz do zawartości
neon97

Jak dodać zapytania GET i POST na ESP8266?

Pomocna odpowiedź

Hej 🙂

Od niedawna programuje na ESP8266 (RTOS SDK, bezpośrednio moduł, a nie na płytkę Arduino, w języku C). Korzystam z PlatformIO i szukam już w necie którąś X godzinę.. I nic. Znaczy było kilka przykładów, ale żadnego nie udało się mi na razie uruchomić 😕  

Chcę jak najprostszym sposobem dodać do programu obsługę zapytań GET/POST do serwera. Czy komuś z was to się udało? Albo wie ktoś gdzie można znaleźć jakiś działający przykład? Cokolwiek...? Bo powoli kończą mi się pomysły

Przy okazji... Programuje bezpośrednio na ESP, bez korzystania z gotowych bibliotek do Arduino, bo wydaje mi się, że nie ma możliwość połączenia Arduino Uno i RTOS.  Czy to prawda?

Udostępnij ten post


Link to post
Share on other sites
17 minut temu, neon97 napisał:

Chcę jak najprostszym sposobem dodać do programu obsługę zapytań GET/POST do serwera. Czy komuś z was to się udało? Albo wie ktoś gdzie można znaleźć jakiś działający przykład? Cokolwiek...? Bo powoli kończą mi się pomysły

A możesz napisać co dokładnie chcesz obsłużyć i z czym masz problem? Przykładowo zapytanie GET to "tylko" wywołanie adresu serwera i podanie danych w URL, do którego się odwołujemy czyli np. https://192.168.1.32/index.php?temperatura=100, wywołanie takiego adresu wyśle do serwera informacje przez GET. O to chodziło? 😉

W Twoim przykładzie ESP jest klientem czy serwerem?

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Na początek chce włączać/wyłączać LED przez stronę internetową. Udało mi się zrobić to lokalnie, ale teraz chcę globalnie. Będę mieć utworzoną stronę internetową na której chce zmieniać stan diody przyciskiem. Czyli dokładniej... wysyłać zapytania do serwera o stan i on później wysyła zapytania do ESP. Jednak ESP musi jakoś te żądania obsługiwać.

Moim problemem jest to, że nie potrafię stworzyć opisanego przez ciebie rozwiązania tego problemu:

9 godzin temu, Treker napisał:

Przykładowo zapytanie GET to "tylko" wywołanie adresu serwera i podanie danych w URL, do którego się odwołujemy czyli np. https://192.168.1.32/index.php?temperatura=100, wywołanie takiego adresu wyśle do serwera informacje przez GET. O to chodziło? 😉

O to właśnie chodziło 🙂  Tylko nie wiem jak to zaprogramować. Rozumiem jak działa odwoływanie się do danych LED w URL, ale nadal nie wiem jak wywołać adres serwera i co zrobić dalej.

W tym przykładzie ESP jest klientem.

Edytowano przez neon97

Udostępnij ten post


Link to post
Share on other sites
Gość es2
10 godzin temu, neon97 napisał:

wydaje mi się, że nie ma możliwość połączenia Arduino Uno i RTOS.  Czy to prawda?

I tak i nie. RTOS na UNO jest na zasadzie, "pokazałem, że się da". "Ogromna" pamięć RAM nie pozwala na sensowne użycie RTOS. Jeśli wiesz jak działa multitasking, to wiesz dlaczego wymagane jest dużo RAM. Jak nie wiesz, to się dowiedz. Zasadniczo chodzi o to, ze każdy task, wymaga sporo stosu (zapamiętanie wszystkich rejestrów + stos na program).

Tak więc,da się ale większego sensu w tym nie ma.

10 godzin temu, Treker napisał:

GET to "tylko" wywołanie adresu serwera i podanie danych w URL, do którego się odwołujemy czyli np. https://192.168.1.32/index.php?temperatura=100

Rozumie, że już to robiłes z poziomu uC, bez systemu operacyjnego, i to "tylko" dokładnie określa,ze to nie jedna linijka w C.

 

Udostępnij ten post


Link to post
Share on other sites

"Lepiej jest nie odzywać się wcale i wydawać się głupim, niż odezwać się i rozwiać wszelkie wątpliwości."

Po pierwsze cytat jest z innego wątku. Po drugie ESP8266 ma wystarczająco dużo pamięci RAM do używania RTOS-a, nie należy prostego systemu mylić z pełnoprawnym systemem operacyjnym. Jak ktoś tego nie wie, to lepiej niech się dowie, a póki co nie odzywa.

Wywołanie GET jest tak proste jak wysłanie napisu po TCP, a w przypadku ESP dostępne są całkiem dobre biblioteki. Więc zrobienie nie jest to taka sztuka jak się wydaje. Natomiast obecność systemu operacyjnego niewiele zmienia - faktycznie mając RTOS interfejs jest bardziej zbliżony do standardowego interfejsu gniazd, ale nawet na loopback-ach to nie jest wielka filozofia.

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Czyli to robiłeś. Super 😌

Wspominasz o bibliotekach....Jakich konkretnie? Bo widzę sporo, ale z nakładką na Arduino, a mi chodzi o samo ESP

Edytowano przez neon97

Udostępnij ten post


Link to post
Share on other sites

Korzystam z tego SDK.

A co do linku... Wygląda obiecująco. Dziękuję bardzo ^^

Jak już przetestuję to dam znać czy udało się uruchomić

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Czyli, chcesz włączyć diodę led oraz znać jej stan? Oczywiście możesz to wszystko sam oprogramować, tylko zdaje się, że nie do końca jeszcze potrafisz. Jeśli chcesz się nauczyć i zrobic to sam to szacun i życzę powodzenia(szczerze). Jeśli chcesz to zrobić szybko, łatwo i przyjemnie, na swoim lub publicznym serwerze to może BLYNK? ESP to dla niego nie problem.

Edytowano przez SOYER

Udostępnij ten post


Link to post
Share on other sites
Dnia 3.11.2018 o 09:43, neon97 napisał:

Udało mi się zrobić to lokalnie, ale teraz chcę globalnie.

No to w zasadzie wszystko masz gotowe :-). Piszesz o "lokalnym" sukcesie. Czyżby była mowa o lokalnej sieci LAN? Jeśli tak to jedynej rzeczy jakiej potrzebujesz to odpowiednia konfiguracja Twojego routera gdzie możesz przekierować żądania połączeń z Internetu na określony port i adres swojego routera (z internetu) do wnętrza swojego LAN czyli do ESP (zob. port forwarding w opcjach swojego routera). Tutaj ESP pracuje jako serwer, a w przykładach do ESP środowiska ARDUINO IDE znajdziesz gotowe propozycje rozwiązań do analizy i własnego zastosowania. Ja już od prawie roku korzystam z takiej opcji i nawet z Bułgarii łączyłem się ze swoim ESP u nas w kraju 🙂. Pewnym utrudnieniem może być ewentualny brak stałego publicznego IP, ale i na to jest darmowe lekarstwo w postaci Dynamic DNS np. www.noip.com

Udostępnij ten post


Link to post
Share on other sites
2 godziny temu, Belferek napisał:

możesz przekierować żądania połączeń z Internetu na określony port i adres swojego routera (z internetu) do wnętrza swojego LAN czyli do ESP (zob. port forwarding w opcjach swojego routera). Tutaj ESP pracuje jako serwer, a w przykładach do ESP środowiska ARDUINO IDE znajdziesz gotowe propozycje rozwiązań do analizy i własnego zastosowania.

Nie wiem czy to taki dobry pomysł otwierać ESP8266 na świat. Implementacja stosu TCP/IP na tym czymś jest dosyć uproszczona, a w Internecie dużo botów skanujących adresy w poszukiwaniu znanych (i nowych) luk bezpieczeństwa. Za chwile się może okazać, że twoje IoT jest częścią botnetu DDOS-ującego przedszkola.

Udostępnij ten post


Link to post
Share on other sites

Oczywiście deshipu masz rację twierdząc, że należy pamiętać o bezpieczeństwie naszych urządzeń pracujących w sieci - szczególnie w sieci publicznej jaką jest internet. Nie mniej jednak uważam, że konfigurując odpowiednio router i wprowadzając na naszym ESP chociażby minimalne funkcje zabezpieczeń jesteśmy się w stanie skutecznie (no prawie) zabezpieczyć przed wskazaną przez Ciebie sytuacją. Tak na marginesie jak pomyśleć o tym, że urządzenie podłączone do sieci to ponad 130000 furtek (portów UDP/TCP), które zawsze "ktoś" lub "coś" może wykorzystać do niecnych celów to jedynym skutecznym lekarstwem na ból głowy z tego wynikający jest .... odłączyć się od sieci :-(.

Udostępnij ten post


Link to post
Share on other sites
23 minuty temu, deshipu napisał:

a w Internecie dużo botów skanujących adresy w poszukiwaniu znanych (i nowych) luk bezpieczeństwa. Za chwile się może okazać, że twoje IoT jest częścią botnetu DDOS-ującego przedszkola.

Możesz napisać coś więcej? co to botnet, DDOS i co mają do tego przedszkola?

 

Udostępnij ten post


Link to post
Share on other sites
1 godzinę temu, Belferek napisał:

wprowadzając na naszym ESP chociażby minimalne funkcje zabezpieczeń jesteśmy się w stanie skutecznie (no prawie) zabezpieczyć przed wskazaną przez Ciebie sytuacją

Jak to sobie dokładnie wyobrażasz? Firmware do ESP8266 jest napisany na kolanie przez Chińczyków w kilka miesięcy, bo trzeba było szybko wypuścić czip, żeby się zaczął sprzedawać. Zasobów nie ma wiele, więc wszędzie gdzie się da są skróty i optymalizacje. Sprzęt jest nietypowy, więc większość kodu musiała być napisana od zera, a nie opierać się na przetestowanych bibliotekach. Kod źródłowy nigdy nie został opublikowany, wszystko ma postać binarnych blobów, więc zapomnij o weryfikacji przez społeczność i o patchach. Konfiguracja routera nie ma tu większego znaczenia, bo wystarczy jeden odpowiednio spreparowany pakiet z jakimś buffer overflow i już możesz wykonywać na ESP8266 dowolny obcy kod — to nie jest zaawansowany procesor z mechanizmami ochrony pamięci i izolacji procesów. Bardzo chętnie usłyszałbym jakie to "prawie skuteczne" zabezpieczenia masz tu na myśli.

Udostępnij ten post


Link to post
Share on other sites

Ano np. takie, że już na poziomie routera można filtrować pakiety przychodzące na określony port, który ma być przekierowany do ESP chociażby pod kątem ich nadawcy. W podobny sposób można filtrować ruch z ESP na zewnątrz - można określić "z kim" ESP może się łączyć. Same ograniczenia ESP też chyba są pewnym "atutem". Wydaje mi się, że ten układ szybciej się zresetuje niż zacznie przeprowadzać sieciowy atak DOS. Co do samego ESP to przecież programista decyduje o tym za pomocą jakich protokołów i portów będzie się ten układ w sieci komunikował. Mogę sobie wyobrazić, że ESP wykryje próbę niepożądanego połączenia sieciowego i odpowiednio zareaguje itd. Osobiście nie spotkałem się z sytuacją opisywaną przez desipu lecz nie twierdzę, że takie cuda są niemożliwe. Tacy giganci jak MS i inni są na to świetnym przykładem, że i miliardy dolarów tych firm nie czynią ich produktów bezpiecznymi. Więc gdzie nam do nich z tym ESP.

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij, aby zacząć pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...