nowix1999 Napisano Czerwiec 14, 2023 Udostępnij Napisano Czerwiec 14, 2023 Witam, tworzę aplikację webową, na którą przesyłane będą współrzędne pozyskane z modułu GPS vk2828u7g5lf podłączonego do arduino model: WiFi Shield Arduino ESP8266 WEMOS D1 UNO R3. Tworzę program w arduino IDE lecz mam problem z wgraniem go na płytkę. Stworzyłem przykładowy program, który ma sprawdzić czy wszystko działa i podczas wgrywania wyskakuje taki błąd: A fatal esptool.py error occurred: Failed to connect to ESP8266: Timed out waiting for packet header. Board, który mam wybrany to NodeMCU 1.0 ESP 12-E. Na zdjęciu kod programu. Czy ktoś mógłby pomóc to ogarnąć? Pozdrawiam.
Treker (Damian Szymański) Czerwiec 14, 2023 Udostępnij Czerwiec 14, 2023 1 godzinę temu, nowix1999 napisał: o arduino model: WiFi Shield Arduino ESP8266 WEMOS D1 UNO R3 @nowix1999 witam na forum Z nazwy wnioskuję, że to jest sam shield, który powinien być podłączony do jakiegoś Arduino. 1 godzinę temu, nowix1999 napisał: Board, który mam wybrany to NodeMCU 1.0 ESP 12-E Czy z takiej płytki faktycznie korzystasz?
nowix1999 Czerwiec 14, 2023 Autor tematu Udostępnij Czerwiec 14, 2023 (edytowany) @Treker https://allegro.pl/oferta/wifi-shield-arduino-esp8266-wemos-d1-uno-r3-7866648020?utm_feed=aa34192d-eee2-4419-9a9a-de66b9dfae24&utm_term=test&utm_source=google&utm_medium=cpc&utm_campaign=_elktrk_komputery_akcesoria_pla_pmax&ev_campaign_id=17966335850&gclid=Cj0KCQjwla-hBhD7ARIsAM9tQKtOCE-Qj5uyo309PiooVdGMgZq0wGQ87cBST8egEseGB3BdZUm0cZUaAskQEALw_wcB Jest to ta płytka. Edytowano Czerwiec 14, 2023 przez nowix1999
nowix1999 Czerwiec 14, 2023 Autor tematu Udostępnij Czerwiec 14, 2023 Zmieniłem board na Lolin(WEMOS) D1 R2 & mini i udało się wgrać program, ale w serial monitorze nic się nie wyświetla.
nowix1999 Czerwiec 14, 2023 Autor tematu Udostępnij Czerwiec 14, 2023 (edytowany) https://starter-kit.nettigo.pl/2016/03/razu-gps-logger-zbudowano-czyli-arduino-gps/ Skorzystałem z tego poradnika, podłączyłem jak na schemacie, przesłałem ten przykładowy program i nadal nic się nie pojawia w konsoli. Na module świeci się zielona dioda co znaczy że odbiera on współrzędne. Edytowano Czerwiec 14, 2023 przez nowix1999
kostuch Czerwiec 15, 2023 Udostępnij Czerwiec 15, 2023 Usuń tego if ze sprawdzaniem GPS_INVALID_AGE i na początek po prostu wysyłaj co sekundę odczytany lat i lon. Na komplikowanie logiki będziesz miał czas, jak ogarniesz podstawowe rzeczy. Szczerze mówiąc, pierwszy raz widzę GPS_INVALID _AGE...
ethanak Czerwiec 15, 2023 Udostępnij Czerwiec 15, 2023 E... zaraz... popatrzyłem na zdjęcie kodu (wciórności, nienawidzę jak ktoś nie potrafi używać ctrl-c/ctrl-v). Masz podpięte coś do pinów 10 i 11? Jeśli to ESP8266 to nie ma prawa działać. Do poczytania: https://randomnerdtutorials.com/esp8266-pinout-reference-gpios/ A w ogóle to SoftwareSerial raczej cienko działa na ESP... chyba że ostatnio coś poprawili?
kostuch Czerwiec 15, 2023 Udostępnij Czerwiec 15, 2023 Softseriala używa się, jak się ma za mało problemów Przecież 8266 ma dwa sprzętowe UARTy (no dobra, półtora) do użycia. I tak w większości przypadków z gps tylko czyta się dane a na konsolę tylko wysyła. Więc jeden sprzętowy UART w zupełności wystarczy do jednego i drugiego.
kostuch Czerwiec 15, 2023 Udostępnij Czerwiec 15, 2023 Dlatego napisałem, że półtora Do pisania w konsolę w sam raz.
farmaceuta Czerwiec 15, 2023 Udostępnij Czerwiec 15, 2023 Ja nic ciekawego nie dodam, ale swego czasu wiem że któraś biblioteką z tych "Tiny" do GPS u mnie za cholerę nie działała...co prawda na Ardu, może warto wypróbować inne...
ethanak Czerwiec 15, 2023 Udostępnij Czerwiec 15, 2023 A w ogóle przy dwóch uartach nie bawiłbym się w protezy typu SoftwareSerial tylko wrzuciłbym tam ESP32 - pięć złotych droższy ale ma wszystko co trzeba. Poza tym nawet gdyby ten SoftwareSerial działał na 8266 nie byłbym pewien co się stanie po włączeniu WiFi.
nowix1999 Czerwiec 20, 2023 Autor tematu Udostępnij Czerwiec 20, 2023 Udało się odczytać współrzędne takim kodem. Kolejnym krokiem jest przesłanie tych danych do aplikacji webowej odpalonej na localhoscie odpalonym w xampp. Czy takie coś jest możliwe? Z wifi połączenie uzyskuję ale z serwerem już nie, na razie próbuję z takim kodem. W kodzie aplikacji webowej zastosowałem taki js. Z góry dziękuję za pomoc. var socket = new WebSocket("ws://localhost:80"); // Obsługa otwarcia połączenia WebSocket socket.onopen = function () { console.log("Połączenie WebSocket zostało nawiązane."); }; // Obsługa zamknięcia połączenia WebSocket socket.onclose = function () { console.log("Połączenie WebSocket zostało zamknięte."); }; // Obsługa otrzymania wiadomości od serwera WebSocket socket.onmessage = function (event) { var data = JSON.parse(event.data); if (data.latitude && data.longitude) { displayCoordinates(data.latitude, data.longitude); } }; // Wyświetlanie przesyłanych współrzędnych function displayCoordinates(latitude, longitude) { var latitudeElement = document.getElementById("latitude"); var longitudeElement = document.getElementById("longitude"); latitudeElement.textContent = "Szerokość: " + latitude; longitudeElement.textContent = "Długość: " + longitude; } #include <SoftwareSerial.h> #include <TinyGPS.h> TinyGPS gps; // Obiekt TinyGPS do obsługi danych GPS SoftwareSerial ss(4, 3); // Obiekt SoftwareSerial do komunikacji z modułem GPS void setup() { Serial.begin(115200); // Inicjalizacja komunikacji szeregowej ss.begin(9600); // Inicjalizacja komunikacji szeregowej z modułem GPS } void loop() { float flat, flon; // Zmienne do przechowywania szerokości i długości geograficznej unsigned long age; gps.f_get_position(&flat, &flon, &age); // Pobranie aktualnej pozycji geograficznej Serial.print("Szerokość: "); print_float(flat, TinyGPS::GPS_INVALID_F_ANGLE, 10, 6); // Wyświetlenie szerokości geograficznej Serial.print("Długość: "); print_float(flon, TinyGPS::GPS_INVALID_F_ANGLE, 11, 6); // Wyświetlenie długości geograficznej print_date(gps); // Wyświetlenie daty i czasu Serial.println(); smartdelay(1000); // Oczekiwanie przez określony czas } static void smartdelay(unsigned long ms) { unsigned long start = millis(); do { while (ss.available()) gps.encode(ss.read()); // Odczyt i dekodowanie danych GPS } while (millis() - start < ms); } static void print_float(float val, float invalid, int len, int prec) { if (val == invalid) { while (len-- > 1) Serial.print('*'); // Jeśli wartość jest nieprawidłowa, wyświetlaj gwiazdkę Serial.print(' '); } else { Serial.print(val, prec); // Wyświetlanie wartości z określoną precyzją int vi = abs((int)val); int flen = prec + (val < 0.0 ? 2 : 1); flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1; for (int i = flen; i < len; ++i) Serial.print(' '); // Dopasowanie do określonej długości pola } smartdelay(0); } static void print_date(TinyGPS &gps) { int year; byte month, day, hour, minute, second, hundredths; unsigned long age; gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age); // Dekodowanie daty i czasu if (age == TinyGPS::GPS_INVALID_AGE) Serial.print("********** ******** "); // Jeśli data jest nieprawidłowa, wyświetlaj gwiazdki else { char sz[32]; sprintf(sz,"%02d/%02d/%02d %02d:%02d:%02d ", month, day, year, hour, minute, second); Serial.print(sz); } smartdelay(0); } #include <SoftwareSerial.h> #include <TinyGPS.h> #include <ESP8266WiFi.h> #include <WiFiClient.h> TinyGPS gps; SoftwareSerial ss(4, 3); const char* ssid = "a"; const char* password = "b"; const char* serverAddress = "localhost"; const int serverPort = 80; void setup() { Serial.begin(115200); ss.begin(9600); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); } void loop() { float flat, flon; unsigned long age; gps.f_get_position(&flat, &flon, &age); // Przesyłanie danych do aplikacji webowej sendCoordinates(flat, flon); Serial.print("Szerokość: "); print_float(flat, TinyGPS::GPS_INVALID_F_ANGLE, 10, 6); Serial.print("Długość: "); print_float(flon, TinyGPS::GPS_INVALID_F_ANGLE, 11, 6); print_date(gps); Serial.println(); smartdelay(1000); } static void smartdelay(unsigned long ms) { unsigned long start = millis(); do { while (ss.available()) gps.encode(ss.read()); } while (millis() - start < ms); } static void print_float(float val, float invalid, int len, int prec) { if (val == invalid) { while (len-- > 1) Serial.print('*'); Serial.print(' '); } else { Serial.print(val, prec); int vi = abs((int)val); int flen = prec + (val < 0.0 ? 2 : 1); flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1; for (int i = flen; i < len; ++i) Serial.print(' '); } smartdelay(0); } static void print_date(TinyGPS &gps) { int year; byte month, day, hour, minute, second, hundredths; unsigned long age; gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age); if (age == TinyGPS::GPS_INVALID_AGE) Serial.print("********** ******** "); else { char sz[32]; sprintf(sz, "%02d/%02d/%02d %02d:%02d:%02d ", month, day, year, hour, minute, second); Serial.print(sz); } smartdelay(0); } void sendCoordinates(float latitude, float longitude) { if (WiFi.status() == WL_CONNECTED) { WiFiClient client; if (client.connect(serverAddress, serverPort)) { String request = String("GET /?lat=") + latitude + String("&lon=") + longitude + String(" HTTP/1.1\r\n") + String("Host: ") + serverAddress + String("\r\n") + String("Connection: close\r\n\r\n"); client.print(request); Serial.println("Sending coordinates to server:"); Serial.print(request); // Odczytaj odpowiedź serwera, jeśli jest dostępna while (client.connected() && !client.available()) {} while (client.available()) { String response = client.readStringUntil('\r'); Serial.print("Server response: "); Serial.println(response); } client.stop(); } else { Serial.println("Error connecting to server"); } } }
Pomocna odpowiedź
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ę »