Do suwnic itp normalnie stosuje się specjalne piloty, nie oparte o wi-fi.
Są różne rozwiązania. Bobcat firma produkująca maszyny budowlane umożliwia sterowanie telefonem z wykorzystaniem WiFi. Widziałem też inne piloty innych firm i tam oprócz standardowych 433MHz wykorzystują też częstotliwości 2.4MHz i rozwiązania oparte na WiFi. Każde rozwiązanie ma swoje plusy i minusy. Zrobiłem jedno sterowanie oparte na 433MHz, ale tutaj muszę mieć odbiornik i pilot. Czyli muszę wykonać dwa urządzenia fizyczne. Da się zrobić panel na tablet bez potrzeby używania fizycznego pilota, ale wtedy trzeba podczepić nadajnik więc do tabletu trzeba wpiąć moduł nadawczy, aby komunikacja była możliwa z odbiornikiem poprzez tablet komputer.
Wziąłem się za ESP32, bo trochę mi upraszać to robotę. Mogę wykonać tylko odbiornik, a pilota zrobić na tablecie, komputerze. Tutaj nie ogranicza mnie miejsce przycisk może być w każdym miejscu, bo nie ma kabli, nie ma ograniczeń fizycznych pod spodem jest tylko kod. Łatwiej więc taki pilot rozbudowywać. Problemem jest jednak łączność. Wziąłem więc na testy mechanizm http i WebSocket. Użyłem konsoli, aby przez konsolę wysłać komendy i sprawdzać co się stanie.
Mój system działa tak, że są przyciski bistabilne EMERGENCY STOP jak i monostabilne. Wciśnięcie przycisku monostabilnego wysyła komendę np. 10 (załącz diodę led nr 1) puszczenie wysyła komendę 00 (wyłącz diodę Led). Jeśli przycisk zostanie wciśnięty to wysyła co sekundę komendę powtarza ją. Wtedy odbiornik wie, że przycisk jest cały czas w użyciu. Jeśli zginęłaby łączność, pilot wypadłby z rąk coś by się stało to, jeśli odbiornik nie otrzyma komendy przez 2 sekundy to wyłącza wszystkie uruchomione rzeczy (w tym przypadku diody Led). Po co to jest np. rozpalasz silnik, ale odbiornik otrzymałby komendę ROZPAL, ale nie otrzymałby komendy przycisk zwolniony to rozrusznik cały czas by pracował. Jeśli coś się stanie a odbiornik nie otrzyma komendy to wtedy rozłączy ten rozrusznik.
Czyli serwer http i websocket (to osobna usługa, działająca na innym porcie) masz na ESP32.
http i WebSocket to po prostu mechanizm komunikacji. WebSocket jest dobry, bo pozwala komunikować się w czasie rzeczywistym coś wysyła coś odbiera i nie zauważysz opóźnień. Chociaż w testach http też nie zauważyłem opóźnień. Na ESP32 mam program, który wykonuje zadania zapala diody tworzy ACCESS POINT WiFi oraz ma wbudowany mechanizm komunikacji albo http albo Websocket. Panel, czyli stronę, bo robię to przez HTML i JavaScrip mogę wrzucić na ESP32 i ładować lub uruchamiać na tablecie komputerze.
Wczoraj więc zrobiłem testy http i WebSocket. Generalnie włączyłem przycisk Emergency Stop i na http działało to chyba z 16 minut aż sam wyłączyłem idąc się myć. Na WebSocket zrobiłem to samo i działało też z około 8 minut, bo wyłączyłem. Potem wziąłem odłączyłem panel HTML (zamknąłem przeglądarkę) zrobiłem testy komunikacji poprzez konsolę CMD wysyłając komendę cyklicznie poprzez pętlę. Działało też z kilka minut aż sam rozłączyłem.
Doszedłem do wniosku, że tu chyba WiFi na tym ESP32 nawala.
Zrobiłem prosty skrypt PowerShell, który bada sieć jej SSID sprawdza czy widoczna jest badana sieć.
Badałem swoją siec WiFi na której pracuję i kiedy ją odłączyłem miałem w logach brak sieci. Zrobiłem to samo dla sieci WiFi z ESP32 i zauważyłem, że tam często ta sieć znika. Wniosek jest taki, że to na ESP32 coś się dzieje z siecią. Może to jakaś podróbka chin albo w ogóle jakiś moduł na tym ESP32 słabej jakości i on tworzy problemy z WiFi.
Dla potomnych zostawię skrypty do badania sieci. Skrypt PowerShell w którym tylko trzeba wprowadzić nazwę swojej sieci. Skrypt zapisuje logi do pliku txt. Dodatkowo kod HTML, który komunikuje się z PowerShell, aby pobierać dane o sieci i prezentować je w czytelny sposób na stronie. W skrypcie HTML trzeba tylko wprowadzić IP naszego komputera.
Skrypt uruchamiamy w konsoli PowerShell (wywołując go do uruchomienia). Skrypt nie łączy się z urządzeniem sprawdza tylko czy sieć istnieje w przestrzeni co pozwala zbadać, czy sieć znika czy działa cały czas. Proste narzędzie mi pomogło trochę na ukierunkowaniu mnie, gdzie jest tak naprawdę problem. W moim przypadku to raczej nie WebSocket tylko niestabilne działanie sieci WiFi z ESP32 i to tutaj najprawdopodobniej jest problem.
Skrypty.
Badanie_Si...i_WiFi.rar (253.51 kB)Musisz być zalogowany, aby pobrać ten załącznik.
Piszesz że trzymasz guzik długo i się wtedy wywala. A jak masz zrobioną jego obsługę? Normalnie jest 'onclick' i to działa tylko przy wciśnięciu. Jedyne co mi przychodzi do głowy, to potem ciągle sprawdzać czy nadal jest wciśnięty, co jest marnym rozwiązaniem.
Każdy przycisk ma przypisany nasłuchiwacz zdarzeń (event listener) w JavaScript, reagujący na akcje użytkownika, takie jak kliknięcie (click), najechanie myszą (mouseover) lub naciśnięcie klawisza.
Ponieważ jest to system zdalnego sterowania przyciski wysyłają komendy do urządzenia (np. poprzez protokół WebSocket, HTTP API lub inny mechanizm komunikacyjny w zależności jaki mechanizm wybierzesz sobie.
Typowe zdarzenie, że klikasz włącz, klikasz wyłącz nie sprawdzi się. Można zastosować rozwiązanie włącz led 1 ale wyobraź sobie, że tym przyciskiem uruchamiasz silnik rozrusznik. W aucie, kiedy go zwolnisz to na rozrusznik nie jest podawane zasilanie więc przestaje działać. W przypadku pilota, jeśli coś się stanie zwalniasz przycisk, ale komenda nie dociera to ten rozrusznik działałby cały czas co doprowadziłoby do tego, że w końcu byś go spalił. Dlatego jest ten mechanizm PING u mnie, że kiedy załączysz przyciskiem coś, ale kiedy go zwolnisz a komenda wyłącz przepadłaby w przestrzeni a nadajnik nie wysyła już sygnału to odbiornik wie, że nowe komendy nie docierają, ale uruchomione zdarzenie wcześniej musi być wyłączone, bo nie ma cyklicznych komend, że dany przycisk działa więc to oznacza, że coś się stało i trzeba to wyłączyć.
Także wniosek taki z moich obserwacji, że problemem jest sieć na ESP32 którą on tworzy, a która jest niestabilna, ale czemu tego nie potrafię powiedzieć. Przykład w logach na zrzutach które załączyłem z badania sieci. Moja domowa sieć. Działa, na czerwono zaznaczyłem moment, kiedy ją rozłączyłem ręcznie wtedy znikła z przestrzeni i skrypt to wykrył, kiedy podłączyłem sieć pojawiła się w logach.
To samo z siecią z ESP32. Esp32 tylko uruchomione z wgranym prostym programem tworzy sieć WiFi Access Point i tylko sprawdzałem, czy jest w przestrzeni. Jak widać działa z przerwami więc to ona robi te problemy. Przetestowałem też inny ESP32, ale to samo.
Chyba muszę kupić jakieś inne moduły od zaufanych źródeł i sprawdzić jak na nich zachowuje się sieć, bo teraz jedyne co mi przychodzi do wniosku to, że to wina ESP32.