• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
nodemcu,dht,wysylanie odbieranie pakietu udp
#1
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:
   
Kacza: Wklejaj w znaczniki Kod
 
Odpowiedź
#2
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.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości