Strona 1 z 1

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

: środa 06 lip 2016, 11:23
autor: StaryAnoda
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);
      }
 }

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

: środa 06 lip 2016, 11:58
autor: inż.wielki
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 :)

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

: środa 06 lip 2016, 12:06
autor: StaryAnoda
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);
}

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

: środa 06 lip 2016, 13:19
autor: inż.wielki
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 :)

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

: poniedziałek 22 sie 2016, 21:04
autor: StaryAnoda
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);
   }
 }

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

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

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.