Skocz do zawartości

Miksior

Użytkownicy
  • Zawartość

    6
  • Rejestracja

  • Ostatnio

Reputacja

5 Neutralna

O Miksior

  • Ranga
    2/10

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

  1. Witam mam trzy moduly ESP - 2 nowe i 1 stary, na tym starym mam wgrany kod (do laczenia sie po TCP lub UDP i przesylania danych) i dziala jak nalezy - nawiazuje polaczenie i przesyla dane, natomiast na dwoch "nowych" modulach wgrywam ten sam kod i niestety, kompiluje sie i wgrywa natomiast nie nawiazuje polaczenia (dodam ze w kodzie nie zmieniam niczego!) wgrywalem firmware z wykorzystaniem programu NODEMCU FLASH MASTER, bez skutku... dodatkowo wrzuce kod: #include <ESP8266WiFi.h> #include <WiFiUdp.h> IPAddress ip(192, 168, 4, 1); const char* host = "192.168.4.1"; const uint16_t port = 80; void setup() { Serial.begin(115200); Serial.println(); WiFi.begin("ESP32", "123456789"); Serial.print("Connecting"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(); Serial.print("Connected, IP address: "); Serial.println(WiFi.localIP()); } void loop() { //Wydruk na serial monitor adresu i portu po ktorym sie łaczymy Serial.print("connecting to "); Serial.print(host); Serial.print(':'); Serial.println(port); // Use WiFiClient class to create TCP connections WiFiClient client; //w przypadku niedostepnosci serwera czekaj 3 sekundy if (!client.connect(host, port)) { Serial.println("connection failed"); Serial.println("wait 3 sec..."); delay(3000); return; } // This will send the request to the server client.println("hello from ESP8266"); Serial.println("Wyslalem po TCP: Hello from ESP8266"); //read back one line from server Serial.print("Odpowiedz: "); String line = client.readStringUntil('\r'); Serial.println(line); Serial.println("closing connection"); client.stop(); Serial.println("wait 5 sec..."); delay(5000); } Dodam tylko ze te dwa nowe moduly sa identyczne, roznia sie jedynie sposobem grawerowania napisu na procku, parametry maja te same Michal
  2. Zgadza sie, ogarnalem tez komunikacje poprzez TCP i dziala dopoki nie chcialem polaczyc 3 moduly, jeden glowny ktory jest AP i czyta dane, jeden wysyla dane po UDP a drugi po TCP, Wklejam kod: Moze ktos jest w stanie powiedziec mi co tutaj blokuje komunikacje z wykorzystaniem obu protokolow na raz? jak to rozdzielic? #include <WiFi.h> #include <WiFiClient.h> #include <WiFiAP.h> #include <WiFiUdp.h> #include <stdlib.h> WiFiServer server(80); // Set a object server as a WiFiServer class IPAddress IP(192,168,4,1); // Select ip and mask IPAddress mask = (255, 255, 255, 0); WiFiUDP Udp; unsigned int localUdpPort = 4210; // local port to listen on char incomingPacket[255]; // buffer for incoming packets char incomingPacket1[255];// wyciecie litery z ramki UDP aby przekonwertowac String na float float temp; float hum; // The devices that want to connect to our Access Point will need to use the next credentials. char ssid[] = "ESP32"; // SSID for the Access Point char pass[] = "123456789"; // password for the Access Point void setup() { Serial.begin(115200); Serial.print("Setting soft-AP ... "); Serial.println(WiFi.softAP("ESP32", "123456789") ? "Ready" : "Failed!"); IPAddress myIP = WiFi.softAPIP(); Serial.print("AP IP address: "); Serial.println(myIP); server.begin(); // Begin the server Udp.begin(localUdpPort); //Serial.printf("Now listening at IP %d, UDP port %d\n", WiFi.softAPIP(), localUdpPort); Serial.print("Now listening at IP: "); Serial.print(WiFi.softAPIP()); Serial.print(" UDP PORT: "); Serial.print(localUdpPort); Serial.println(" TCP PORT: 80 "); } void loop() { WiFiUDP Udp; //UDP: int packetSize = Udp.parsePacket(); if (packetSize) { // receive incoming UDP packets Serial.printf("Dostalem po UDP: Received %d bytes from %s, port %d\n", packetSize, Udp.remoteIP().toString().c_str(), Udp.remotePort()); int len = Udp.read(incomingPacket, 255); Serial.printf("UDP packet contents: %s\n", incomingPacket); if (incomingPacket[0]=='t'){ //sprawdzanie jaka wartosc przyszla (temp czy humidity czy inna) for (int i=1; i<7; i++){ // wyciecie litery z ramki UDP aby przekonwertowac String na float incomingPacket1[i-1]=incomingPacket[i]; } String msg = String(incomingPacket1); //konwersja string na float float jakasliczba = msg.toFloat(); //konwersja string na float Serial.print("Temperatura wynosi :"); Serial.println(jakasliczba); temp=jakasliczba; } if (incomingPacket[0]=='h'){ for (int i=1; i<7; i++){ incomingPacket1[i-1]=incomingPacket[i]; } String msg = String(incomingPacket1); float jakasliczba = msg.toFloat(); Serial.print("Humidity wynosi :"); Serial.println(jakasliczba); hum=jakasliczba; } if (len > 0) { incomingPacket[len] = 0; } //TCP: WiFiClient client = server.available(); // Return a client object to the class if there is a client available if (!client) {return;} // Return cuts the function (loop) if client class is not connected String request = client.readStringUntil('\r'); // Reads string received until \r and saves as string Serial.println(" Dostalem po TCP: " + request); //client.flush(); client.println(" Dostalem po TCP: " + request + "\r"); // Send the data with the \r so the client knows when to stop //Serial.println(request + "Aknowledge"); } WiFiClient client = server.available(); // Return a client object to the class if there is a client available if (!client) {return;} // Return cuts the function (loop) if client class is not connected String request = client.readStringUntil('\r'); // Reads string received until \r and saves as string Serial.println(" Dostalem po TCP: " + request); //client.flush(); client.println(" Dostalem po TCP: " + request + "\r"); // Send the data with the \r so the client knows when to stop //Serial.println(request + "Aknowledge"); } EDIT: rozwiazalem, trzeba bylo wstawic linijke: client.stop();
  3. oczywiscie w przypadku konwersji przychodzacej wiadomosci: String msg = String(incomingPacket); int jakaśliczba = msg.toInt(); w przypadku proby wyslania jakiejs liczby typu int: char buffer[16]; //16 bitow sprintf(buffer, "%d", jakaśliczba); Udp.write(buffer, sizeof(char) * 16)
  4. Witam ogarnalem sobie komunikacje kilku modulow ESP poprzez UDP, chcialbym teraz zrobic to poprzez TCP/IP, moglby ktos mnie nakierowac na dobry poradnik/przyklad w ktorym jest to dosc prosto i lopatologoczinie zrobione? Szukalem sporo w necie, jednak nie znalazlem klarownego przykladu czy tez poradnika w ktorym opisana jest komunikacja kilka modulow w taki sposob Bede wdzieczny za kazda pomoc Pozdrawiam
  5. Witam serdecznie wczoraj pol dnia glowilem sie nad pewnym tematem i nic nie wymyslilem, robie zdalny system pomiarowy w ktorym kilka modulów WiFi (jeden glowny ESP32 jest serverem, pozostale 8266 to klienci) beda zbierac dane z czujnikow, wysylac po UDP (moze w przyszlosci TCP) do serwera a stamtad powedruja na jakas strone/apke. Mam zrobiona na esp komunikacje UDP zarowno po stronie accespointa jak i klienta, natomiast przesylana ramka danych jest w formacie ASCII, problem (moze trywialny) to wyslanie i odebranie danych w formacie int/float (bo tego typu dane beda pochodzily z czujnikow). Probowalem roznych funkcji jak i sposobow rzutowania, zawsze arduino ide (bo w tym programuje ESP) zwraca mi bledy o niedozwolonej konwersji itp... Wrzuce kod na ktorym poprawnie sa wysylane dane jednak tak jak pisalem jako tekst w ASCII: Strona klienta: #include <ESP8266WiFi.h> #include <WiFiUdp.h> WiFiUDP Udp; unsigned int localUdpPort = 4210; // local port to listen on IPAddress ip(192, 168, 4, 1); void setup() { Serial.begin(115200); Serial.println(); WiFi.begin("ESP32", "123456789"); Serial.print("Connecting"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(); Serial.print("Connected, IP address: "); Serial.println(WiFi.localIP()); } void loop() { while (WiFi.status() != WL_CONNECTED) { WiFi.reconnect(); delay(10000); Serial.print(".Reconnected"); Serial.println(WiFi.localIP()); } Udp.beginPacket(ip, localUdpPort); Udp.write("45"); // wysyłamy jeden bajt Udp.endPacket(); Serial.print("Wyslalem cos\n"); delay(5000); } Jak widac wyslanie tekstu nie jest problemem ale nie umiem wyslac danych np z typu int, gdyz wysyla sie calkmien zmieniona wartosc Na stronie serwera wyglada to tak: #include <WiFi.h> #include <WiFiClient.h> #include <WiFiAP.h> #include <WiFiUdp.h> #include <stdlib.h> WiFiUDP Udp; unsigned int localUdpPort = 4210; // local port to listen on char incomingPacket[255]; // buffer for incoming packets void setup() { Serial.begin(115200); Serial.println(); Serial.print("Setting soft-AP ... "); Serial.println(WiFi.softAP("ESP32", "123456789") ? "Ready" : "Failed!"); IPAddress myIP = WiFi.softAPIP(); Serial.print("AP IP address: "); Serial.println(myIP); Udp.begin(localUdpPort); Serial.printf("Now listening at IP %s, UDP port %d\n", WiFi.localIP().toString().c_str(), localUdpPort); } void loop() { int packetSize = Udp.parsePacket(); if (packetSize) { // receive incoming UDP packets Serial.printf("Received %d bytes from %s, port %d\n", packetSize, Udp.remoteIP().toString().c_str(), Udp.remotePort()); int len = Udp.read(incomingPacket, 255); if (len > 0) { incomingPacket[len] = 0; } Serial.printf("UDP packet contents: %s\n", incomingPacket); } } Czy ktos moglby powiedziec albo moze wskazac przyklad jak poprzez UDP przeslac np float? Bede wdzieczny za rady
×
×
  • Utwórz nowe...