[ESP8266] [Arduino] [UDP] Problem z odbieraniem danych

Pozostałe układy mikrokontrolerów, układy peryferyjne i inne, nie mieszczące się w powyższych kategoriach.
StaryAnoda

[ESP8266] [Arduino] [UDP] Problem z odbieraniem danych

Postautor: StaryAnoda » środa 06 lip 2016, 11:23

Cześć !

Mam pewien problem. Jednym modułem ESP8266 dekoduję temperaturę z czujnika DS18B20 i wysyłam go po UDP w eter. Drugim modułem chciałbym odbierać te dane. Moduł odbiera ale znaczną cześć danych gubi. Widzę to obserwując przy pomocy programu odbierającego dane z UDP na moim komputerze, porównując je z tym co odbiera moduł ESP. Czy może mi ktoś podpowiedzieć co jest nie tak. Przedstawiam kod odbiornika:

Kod: Zaznacz cały

 
 #include <ESP8266WiFi.h>
 #include <WiFiUdp.h>
 
 WiFiUDP UDP;
 
 const int PORT = 8899;
 const char* ssid  = "";
 const char* pass = "";
 
 char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; 

   
void setup()
{
   WiFi.begin( ssid , pass );
   UDP.begin(PORT);
   Serial.begin(115200);
}
 
void loop()
{
   IPAddress IP = WiFi.localIP();
        IP[3] = 255;
        int packetSize = UDP.parsePacket();
        if(packetSize)
        {
      UDP.read(packetBuffer,UDP_TX_PACKET_MAX_SIZE);
        Serial.println(packetBuffer);
      }
 }

Awatar użytkownika
inż.wielki
User
User
Posty: 307
Rejestracja: niedziela 20 gru 2015, 23:11

Re: [ESP8266] [Arduino] [UDP] Problem z odbieraniem danych

Postautor: inż.wielki » środa 06 lip 2016, 11:58

Pokaż też kod nadajnika? Jak często jest wysyłana temperatura? Jeżeli to nie napierdziela szybko danymi to nie lepiej użyć protokołu TCP/IP? Przy małej częstotliwości odświeżania danych to TCP oferuje bezpieczniejszy przesył danych.

Sam kod wydaje się być okej. Być może coś innego w sieci tez nadaje na tym porcie. Wtedy nastąpi konflikt danych. Proponuje w tym wypadku użyć dedykowanej sieci WiFi, odbiornik może być AP a nadajnik klientem tej sieci :)

StaryAnoda

Re: [ESP8266] [Arduino] [UDP] Problem z odbieraniem danych

Postautor: StaryAnoda » środa 06 lip 2016, 12:06

Przedstawiam kod nadajnika:
A i jeszcze zauważyłem taką ciekawostkę, że po restarcie odbiornika ładnie odbiera dane równo z programem na komputerze, dopiero po jakimś czasie zwalnia.

Kod: Zaznacz cały

#include <DallasTemperature.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <OneWire.h>

#define ONE_WIRE_BUS 4

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

WiFiUDP UDP;

const int PORT = 8899;
const char* ssid  = "";
const char* pass = "";

void setup()
{
   WiFi.begin( ssid , pass );
       UDP.begin(PORT);
}

void loop()
{
   sensors.requestTemperatures();
        IPAddress IP = WiFi.localIP();
        IP[3] = 255;

        UDP.beginPacket(IP, PORT);
        UDP.println((sensors.getTempCByIndex(0)));
        UDP.endPacket();
 
      delay(750);
}

Awatar użytkownika
inż.wielki
User
User
Posty: 307
Rejestracja: niedziela 20 gru 2015, 23:11

Re: [ESP8266] [Arduino] [UDP] Problem z odbieraniem danych

Postautor: inż.wielki » środa 06 lip 2016, 13:19

ooooj.. Panie, co tu się dzieje :< nie wolno rozsyłać w broadcast.. No to rozwiązanie dla Ciebie jest takie.
1. Odbiornik jako AP (CWMODE = 3)
2. Nadajnik jako Client.

Wtedy odbiornik ma adres 192.168.4.1 niezmienny a nadajnikowi można przydzielić stałe IP 192.168.4.2 i w takim wypadku zadziała :)

StaryAnoda

Re: [ESP8266] [Arduino] [UDP] Problem z odbieraniem danych

Postautor: StaryAnoda » poniedziałek 22 sie 2016, 21:04

Hej

To tak ciąg dalszy zrobiłem tak jak powiedziałeś, niestety teraz odbiór w ogóle nie działa.
Kod Nadajnika:

Kod: Zaznacz cały

#include <ESP8266WiFi.h>
#include <WiFiUdp.h>

const char* ssid  = "ODBIORNIK";
const int PORT = 8899;
const char* pass = "";

int i=0;

WiFiUDP UDP;

void setup()
{
    WiFi.mode(WIFI_STA);
    WiFi.begin(ssid , pass);
    UDP.begin(PORT);
    Serial.begin(115200);
}

void loop()
{
  i++;
 
  IPAddress IP = WiFi.localIP();
  Serial.println(WiFi.localIP());

  UDP.beginPacket(IP, PORT);
  UDP.print("TEST:");
  UDP.println(i);
  UDP.endPacket();
 
  delay(500);
}


Kod odbiornika:

Kod: Zaznacz cały

 #include <ESP8266WiFi.h>
 #include <WiFiUdp.h>
 
 WiFiUDP UDP;
 
 const int PORT = 8899; 
 char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; 

   
void setup()
{
   WiFi.mode(WIFI_AP);
   WiFi.softAP("ODBIORNIK");
   UDP.begin(PORT);
   Serial.begin(115200);
}
 
void loop()
{
   IPAddress IP = WiFi.localIP();
   IP[3] = 255;
   int packetSize = UDP.parsePacket();
   if(packetSize)
   {
   UDP.read(packetBuffer,UDP_TX_PACKET_MAX_SIZE);
   Serial.println(packetBuffer);
   }
 }

Awatar użytkownika
inż.wielki
User
User
Posty: 307
Rejestracja: niedziela 20 gru 2015, 23:11

Re: [ESP8266] [Arduino] [UDP] Problem z odbieraniem danych

Postautor: inż.wielki » wtorek 23 sie 2016, 09:17

Kod: Zaznacz cały

IPAddress IP = WiFi.localIP();

To adres IP Twojego urządzenia, czyli wysyła w sumie pakiety sam do siebie. Musisz mu podać adres IP odbiornika. Poza tym, ile chciałbyś mieć tam liczników? Bo podejrzewam że najłatwiej by było to zrobić przypisując ESP stałe adresy IP w oddzielnej sieci WIFI.


Wróć do „Inne mikroklocki, również peryferyjne”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 2 gości