Arduino Polska Forum

Pełna wersja: nodemcu,dht,wysylanie odbieranie pakietu udp
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Witam.
Mam takie coś:


Kod:
#include<DallasTemperature.h>
#include<ESP8266WiFi.h>
#include<WiFiUdp.h>
#include<Wire.h>
#include<OneWire.h>
#include<SPI.h>
#include<Arduino.h>
#include "stacja_pogodowa.h"
#include <LiquidCrystal_I2C.h>


OneWire termo(termometr);
DallasTemperature sensor(&termo);
WiFiUDP udp;
LiquidCrystal_I2C lcd(0x23, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);


void setup(){

    Serial.begin(115200);
    sensor.begin();
    Serial.println();
    Serial.println();
    WiFi.begin("*****","*********");
    while(WiFi.status() != WL_CONNECTED){

            delay(500);
            Serial.print(".");
    }
    Serial.println();
    Serial.print("Polaczono...IP adres:");
    Serial.println(WiFi.localIP());
    udp.begin(udp_port);
    lcd.begin(20,4);
    lcd.setCursor(0,0);
    lcd.print("Pokoj_moj:");
    lcd.setCursor(0,1);
    lcd.print("Pokoj_mama:");




}

void loop(){


    int odbior_danych = udp.parsePacket();

        if(odbior_danych){
            udp.read(bufor,rozmiar);
                for(int i = 0; i < rozmiar; i++){
                    data_mama += (char)bufor[i];
                        }
                    }


    sensor.requestTemperatures();
    String temp = String (sensor.getTempCByIndex(0));
    String data= String (data_mama);
    lcd.setCursor(13, 0);
    lcd.print(temp);
    lcd.print("*C");
    lcd.setCursor(13,1);
    lcd.print(data);
    lcd.print("*C");





}


Kod:
i klient:

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

#define dht_pin D2
#define dht_typ DHT22

float tempert;
float wilgotnosc;


DHT dht(dht_pin,dht_typ,15);
WiFiUDP udp;


void setup()
{
    Serial.begin(115200);
    dht.begin();




    Serial.println();
    WiFi.begin("****","***********");
    Serial.print("Laczenie...");
    while(WiFi.status() != WL_CONNECTED){

        delay(500);
        Serial.print(".");

    }
    Serial.println();
    Serial.print("Polaczono....IP_Adres: ");
    Serial.println(WiFi.localIP());
    udp.beginPacket("****, )****;




}


void loop(){


        String temperatura = String (dht.readTemperature());
        wilgotnosc = dht.readHumidity();


        //udp.write(dht.readTemperature());
        udp.print(temperatura);
        delay(1000);
        udp.endPacket();



}

Niby wszystko dziala, ale problem polega na tym, że przychodzaćy pakiet "przeskakuje" przez wszystkie wiersze wyswietlacza...a wygląda to tak:
[attachment=1224]
Kacza: Wklejaj w znaczniki Kod
data_mama += (char)bufor[i]; nie wiem gdzie tworzysz tą zmienną, gdzie ją "zerujesz", może to nie jest wiele linii tylko jedna ciągle rosnąca? Powinieneś mieć jakoś te pakiety oznaczone, przynajmniej gdzie koniec, jakiś timeout między odebraniem pierwszego i ostatniego znaku danego komunikatu, mniej delay, ogarnąć lepiej DS18B20.