Skocz do zawartości

Arduino - sterowanie z poziomu strony www


gapcio15

Pomocna odpowiedź

Witam.

Mam zrobiony projekt na arduino UNO z modułem ethernet shield. Bez problemu wysyłam kilka zmiennych do bazy danych SQL. Chciałbym (i po części muszę :P) rozbudować ten projekt o dodatkową możliwość. Mianowicie chodzi mi o to, by po naciśnięciu przycisku na stronie (zwykły button z napisem np. "Potwierdź") arduino odebrało odpowiedni sygnał i zapaliło diodę LED. Zadanie niby proste, ale nie mogę tego rozgryźć :( Proszę o pomoc.

Link do komentarza
Share on other sites

52 minuty temu, gapcio15 napisał:

Mianowicie chodzi mi o to, by po naciśnięciu przycisku na stronie (zwykły button z napisem np. "Potwierdź") arduino odebrało odpowiedni sygnał i zapaliło diodę LED.

Możesz opisać to trochę dokładniej? Co znaczy, że Arduino ma odebrać odpowiedni sygnał?

Link do komentarza
Share on other sites

Mam stronę internetową i na niej przycisk z napisem, np. "Potwierdź". Arduino łączy się z internetem po ethernecie. I chodzi o to, żeby po wciśnięciu tego przycisku "Potwierdź", zapaliła się dioda LED, którą mam podłączoną do Arduino.

Link do komentarza
Share on other sites

Stronę hostujesz w sieci lokalnej z osobnego urządzenia czy Arduino? Jeżeli Arduino ma łączyć się ze stroną hostowaną z zewnątrz to będziesz musiał podziałać z ustawieniami routera i otworzyć porty i pomyśleć o stałym ip.

A co do obsługi ethernetu to nie ma tam przykładu ze sterowaniem czegokolwiek ze strony internetowej?

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

@kaczakat tylko w tych poradnikach strona jest "trzymana na Arduino" i wtedy reagowanie na przycisk jest bardzo proste. Jeśli rozumiem, to @gapcio15 poszukuje rozwiązania, w którym strona nie znajduje się na Arduino tylko na jakimś innym serwerze.

Link do komentarza
Share on other sites

9 minut temu, gapcio15 napisał:

Niestety, strona znajduje się na zewnętrznym hostingu, nie na Arduino 😞  

No i skomplikowałeś... 😄

Masz zewnętrzne IP i dostęp do routera, przekierujesz port na Arduino, tak żeby był sens dalej pisać? Jak tak to poszukam, bo gdzieś miałem taki przykład.

Link do komentarza
Share on other sites

3 minuty temu, kaczakat napisał:

No i skomplikowałeś... 😄

Masz zewnętrzne IP i dostęp do routera, przekierujesz port na Arduino, tak żeby był sens dalej pisać? Jak tak to poszukam, bo gdzieś miałem taki przykład.

Mam IP strony na hostingu. Nie wiem jak przekierować port na Arduino 😞 Jestem zielony jeśli chodzi o takie rzeczy xd

Link do komentarza
Share on other sites

To załóżmy, że masz przekierowany port i dostęp do routera. Najbardziej prymitywnym rozwiązaniem jest użycie GET i tego nie robię, ale powiedzmy, że do pierwszych testów...

Jakiś kod HTML masz, masz przycisk, a podanym wcześniej przykładzie była stronka, która po zaznaczeniu checkbox wysyłała komunikat LED do serwera, na którym była uruchomiona. Taki komunikat można wysłać w dowolne miejsce używając:

<!DOCTYPE html>
<html>
<head>
<title>Arduino LED Control</title>
</head>
<body>
<h1>LED</h1>
<p>Click to switch LED on and off.</p>
<form action="http://192.168.1.153" method="GET">
    <input type="submit" value="LED2" 
         name="Submit" id="frm1_submit" />
</form>
 
</body>
</html>

Jak widać podałem adres http, czyli miejsce gdzie jest przycisk. Kod tego przycisku może być na PC, tu otwierasz stronę, a po wciśnięciu GET poleci na to IP.  Teraz wystarczy w Arduino odczytać wartość LED2 i zmienić stan led. Niestety strona zostaje przeniesiona na serwer Arduino i trzeba się cofnąć. Nie udało mi się tego rozwiązać więc teraz robię inaczej.

Po krótkim kursie "youtubowym" HTML, JS, CSS 

i websocket zrobiłem sobie stronkę z kilkoma przyciskami i polami tekstowymi. Uruchamiam ją na ESP8266 (ale jest też wersja biblioteki websocket dla Ethernet shield).  Dalej w podlinkowanym kursie do Ethernet shield jest też coś o Ajax, to poprzednik websockets więc już raczej nie będę w to brnął, ale zasada byłaby podobna.

Tu jest działający przykład na ESP8266 https://github.com/kaczakat/ESP8266 (i obok dla ESP32), kod strony jest w kodzie programu (może być też w spiffs lub w osobnym pliku *.h), a dla Ethernet shield również na SD. Program wgrany do uC ESP obsługuje 5 połączeń jednoczesnych, można się zalogować do strony na ESP i tu sobie klikać lub w dowolnym miejscu, np. na PC czy na serwerze umieścić inny plik html gdzie wewnątrz zamiast 

websock = new WebSocket('ws://' + window.location.hostname + ':81/');
jest np.:
websock = new WebSocket('ws://192.168.1.155:81/');

Lub jeśli Twój IP jest zmienny i port przekierowany z 5345 na 81 to może być coś takiego:

websock = new WebSocket('ws://gapcio15.dyndns.com:5345/');

Zaletą websocket jest szybkość i dwukierunkowość, jeśli na telefonie klikniesz zaświecenie LED1 to wszyscy klienci od razu dostają aktualizację stanu wyjść.

Screenshot_55.thumb.jpg.f438c77a97037d2d67c55872b154cbac.jpg

Screenshot_56.thumb.jpg.b9f58d59b0cf8dec4ea3d6605dd4b5f3.jpg

Jak widać są dwa okienka, jedno otwarte z uC, drugie z PC (serwera ze stroną HTML). W sumie to chodzi o to, by po umieszczeniu w uC obsługi websocket z serwera przyleciało najpierw zalogowanie się do Arduino, a potem wysyłanie odpowiedniego komunikatu.

 

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.