Skocz do zawartości

Miksior

Użytkownicy
  • Zawartość

    7
  • 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 Robilem ciekawe rzeczy na esp32 i esp8266 i chcialem dalej rozwijac moje tematy, kupilem nowy modul ESP32 i mam problem, mianowicie skopiowany program ze starego urzadzenia wrzucam na nowe i urzadzenie nawet nie startuje, bez przerwy sie resetuje. W czym moze byc problem? Urzadzenia maja ta sama specyfikacje, sa identyczne. Probowalem wgrac firmware za pomoca flash download tool 3.6.8 (nie wiem czy udalo mi sie to zrobic z powodzeniem, niby znalazlem w sieci jakis firmware i go wgralem lecz jak widac urzadzenie nie podejmuje pracy). co moze byc przyczyna? zle wgrany firmware? Bede wdzieczny za kazda wskazowke, Okej, przed chwila udalo mi sie rozwiazac problem, wystarczylo zmienic Flash Frequency z 80 na 40MHz, pytanie tylko skad ta roznica?
  2. 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
  3. 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();
  4. 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)
  5. 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
  6. 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...