Skocz do zawartości

Bezprzewodowa stacja meteo


Pomocna odpowiedź

Witajcie. Mając na uwadze różnorodne bezprzewodowe stacje meteo na Arduino, postanowiłem zbudować własną. Taką, którą sam będę chciał aby wyświetlało mi się to, co chcę. Czyli Czas, Data, Dzień tygodnia oraz oczywiście temperatura. Nie stosowałem tutaj żadnych włączników do zmiany temperatury czy czegoś dla mnie zbędnego. Wszystko idzie z automatu 🙂

Zastosowane urządzenia i elementy to :

2x Arduino UNO

2x nRF24L01+ z czarnymi antenkami ( nowa wersja nie wymaga kondensatora, wg stron www ) 

1x ds3231 RTC

1x ds18b20 w wersji wodoodpornej ( ze względu na pomiar z zewnątrz budynku )

1x LCD 20x4 I2C

 

Na ten czas cały projekt wykonawczy jest w formie... "szkieletu" czyli plątanina przewodów itp 🙂 Wkrótce obudowy zawitają.

Pod jedno UNO podpięty oczywiście sensor ds18b20 i moduł nadawczy. Wysyłane informacje na temat pomiaru temperatury.

Pod drugie UNO podpięty RTC i oczywiście moduł odbiorczy, jak i wyświetlacz LCD.

Szukając na internecie różnych kodów, postanowiłem "pomieszać", "pozmieniać", "dodać" itp, aby powstał jeden, który właśnie chcę.

I oto jest:

NADAJNIK

#include <Wire.h>
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

float temp1;

RF24 radio(9, 10);
const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };

void setup(void) {
Serial.begin(9600);
sensors.begin();
radio.begin();
 radio.setRetries(15,15);

 radio.openReadingPipe(1,pipes[1]);

 radio.startListening();

 radio.printDetails();

 radio.openWritingPipe(pipes[0]);

 radio.openReadingPipe(1,pipes[1]);

 radio.stopListening();
}

void loop(void)
{
radio.stopListening();
sensors.requestTemperatures();
temp1 = sensors.getTempCByIndex(0);
radio.write(&temp1, sizeof(temp1));
radio.startListening();
delay(1000);
}

ODBIORNIK

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <OneWire.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define DS3231_I2C_ADDRESS 0x68

LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 20, 4);

// Konwersja liczby dziesiętnej do postaci binarnej
byte decToBcd(byte val){
  return( (val/10*16) + (val%10) );
}

// Konwersja liczby binarnej do postaci dziesiętnej
byte bcdToDec(byte val){
  return( (val/16*10) + (val%16) );
}

float temp1, temp2;

byte Degree[] = {
  B00111,
  B00101,
  B00111,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000
};

RF24 radio(9, 10);
const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0E2LL };

void setup(void) {
lcd.createChar(0, Degree);
Serial.begin(9600);
Wire.begin();
radio.begin();

 radio.setRetries(15,15);

 radio.openReadingPipe(1,pipes[1]);

 radio.startListening();

 radio.printDetails();

 radio.openWritingPipe(pipes[1]);

 radio.openReadingPipe(1,pipes[0]);

 radio.startListening();
lcd.begin(20, 4);
lcd.backlight();
lcd.clear();
lcd.print("....WELCOME HOME....");
delay(2000);
lcd.clear();
lcd.print("Connecting to sensor");
delay(2000);
lcd.clear();
}

void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte
dayOfMonth, byte month, byte year)
{
  // ustawienie czasu i daty w DS3231
  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0);                    // określa, że następna wartość ma trafić do rejestru sekund
  Wire.write(decToBcd(second));     // ustawienie sekund
  Wire.write(decToBcd(minute));     // ustawienie minuty
  Wire.write(decToBcd(hour));       // ustawienie godziny
  Wire.write(decToBcd(dayOfWeek));  // ustawienie dnia tygodnia (1=niedziela, 7=sobota)
  Wire.write(decToBcd(dayOfMonth)); // ustawienie dnia (1-31)
  Wire.write(decToBcd(month));      // ustawienie miesiąca
  Wire.write(decToBcd(year));       // ustawienie roku (0-99)
  Wire.endTransmission();
}

void readDS3231time(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0); // ustawia rejestr DS3231 na 00h
  Wire.endTransmission();
  Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
  // żąda 7 bajtów danych od modułu DS3231 począwszy od rejestru 00h
  *second = bcdToDec(Wire.read() & 0x7f);
  *minute = bcdToDec(Wire.read());
  *hour = bcdToDec(Wire.read() & 0x3f);
  *dayOfWeek = bcdToDec(Wire.read());
  *dayOfMonth = bcdToDec(Wire.read());
  *month = bcdToDec(Wire.read());
  *year = bcdToDec(Wire.read());
}

void displayTime(){
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  // retrieve data from DS3231
  readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,
  &year);
  
// Przekazanie danych do wyświetlenie w serial monitorze i do LCD

  // CZAS
  // Godziny
    // podczas wyświetlania konwertuje wartość zmiennej typu bitowego do postaci dziesiętnej
  Serial.print(hour, DEC);
  if (hour<10) {
    lcd.setCursor(0,0); 
    lcd.print("0");
    lcd.print(hour, DEC); 
  } else {
    lcd.setCursor(0,0); 
    lcd.print(hour, DEC); 
    }
  Serial.print(":");
 // lcd.setCursor(2,1); 
  lcd.print(":");
  
  // Minuty
  Serial.print(minute, DEC);
  if (minute<10) {
    Serial.print("0");
    lcd.setCursor(3,0); 
    lcd.print("0");
    lcd.print(minute, DEC); 
  } else {
    lcd.setCursor(3,0); 
    lcd.print(minute, DEC); 
    }
  Serial.print(":");
  lcd.print(":");
  
  //Sekundy
  if (second<10){
    Serial.print("0");
    lcd.setCursor(6,0); 
    lcd.print("0");
    lcd.print(second, DEC); 
  } else {
    Serial.print(second, DEC);
    lcd.setCursor(6,0); 
    lcd.print(second, DEC); 
    }

// DATA
  Serial.print(" ");
  Serial.print(dayOfMonth, DEC);
  Serial.print("/");
  Serial.print(month, DEC);
  Serial.print("/");
  Serial.print(year, DEC);
  lcd.setCursor(0,1); 
  lcd.print("0");

  // Dzień
  if (dayOfMonth<10){
    lcd.setCursor(0,1); 
    lcd.print("0");
    lcd.print(dayOfMonth, DEC); 
  } else {
    lcd.setCursor(0,1); 
    lcd.print(dayOfMonth, DEC); 
    }
    lcd.print(".");
    
  // Miesiąc
  if (month<10){
    lcd.setCursor(3,1); 
    lcd.print("0");
    lcd.print(month, DEC); 
  } else {
    lcd.setCursor(3,1); 
    lcd.print(month, DEC); 
    }
    lcd.print(".");

   //Rok
    lcd.print("20");
    if (year<10){
    lcd.setCursor(8,1); 
    lcd.print("0");
    lcd.print(year, DEC); 
  } else {
    lcd.setCursor(8,1); 
    lcd.print(year, DEC); 
    }
  
  Serial.print(" ");
  lcd.setCursor(0,2); 
  switch(dayOfWeek){
  case 1:
    Serial.println("Poniedziałek");
    lcd.print("Dzis Poniedzialek");
    break;
  case 2:
    Serial.println("Wtorek");
    lcd.print("Dzis jest Wtorek");
    break;
  case 3:
    Serial.println("Środa");
    lcd.print("Dzis jest Sroda");
    break;
  case 4:
    Serial.println("Czwartek");
    lcd.print("Dzis jest Czwartek");
    break;
  case 5:
    Serial.println("Piątek");
    lcd.print("Dzis jest Piatek");
    break;
  case 6:
    Serial.println("Sobota");
    lcd.print("Dzis jest Sobota");
    break;
  case 7:
    Serial.println("Niedziela");
    lcd.print("Dzis jest Niedziela");
    break;
  }
}

void loop(void)
{
if ( radio.available() )
{
delay(50);
radio.read(&temp1, sizeof(temp1));
lcd.setCursor(0,3);
lcd.print("Temperatura");
lcd.setCursor(12,3);
lcd.print(temp1);
lcd.print((char)0);
lcd.print("C");

delay(50);
// radio.read(&temp2, sizeof(temp2));
// lcd.setCursor(0, 1);
// lcd.print("Temp 2");
// lcd.setCursor(9, 1);
// lcd.print(temp2);
// lcd.print(" C");
}
displayTime(); // wyświetlanie czasu rzeczywistego
  delay(1000);   // odśwież co sekundę
}
//else
//{
//lcd.println("   Brak sygnalu...");
//}
//delay(1000);
//}

A w praktyce ? Wystarczy spojrzeć na foto 🙂

Dodam, że można podłączyć oczywiście drugi sensor do temperatury. W kodzie odbiornika jest wpisana linijka ale "wyciszona ". Można wtedy mierzyć temperaturę naprzemiennie. Nie dodałem pomiaru wilgoci, ponieważ nie jest mi to potrzebne 😉

Mam nadzieję, że projekt się podobał 🙂

IMG_20220820_172658.jpg

IMG_20220820_172700.jpg

IMG_20220820_172702.jpg

  • Lubię! 2
Link do komentarza
Share on other sites

Wyedytowana końcówka kodu. W razie braku odczytu z czujnika, pokazuje informację.

else
{
lcd.setCursor(0,3);  
lcd.println("   Brak sygnalu...");
}
delay(1000);

displayTime(); // wyświetlanie czasu rzeczywistego
  delay(1000);   // odśwież co sekundę
}

 

  • Lubię! 1
Link do komentarza
Share on other sites

Może mi ktoś podpowiedzieć w jaki sposób włączyć i wyłączyć LCD za pomocą ustalonej godziny? Przykład 7:00 Arduino włącza LCD i to co na nim jest wyświetlane, a o 22:00 wyłącza LCD ? Nie chcę żadnych przycisków. Tylko automatycznie. 🤔

Link do komentarza
Share on other sites

Trochę inaczej: po pierwsze sprawdź, czy LCD musi być włączony; po drugie sprawdź, czy obecny stan odpowiada temu który chcesz osiągnąć.

Niech jakaś zmienna globalna oznacza że LCD jest włączony:

bool wlaczony = false;

Teraz możesz sobie sprawdzić:

bool ma_swiecic = (hour > 7) && (hour < 22);
if (ma_swiecic && !wlaczony) {
  // włącz wyświetlacz i ustaw wlaczony na true;
}
else if (!ma swiecic && wlaczony) {
  // wyłącz wyświetlacz i ustaw wlaczony mna false;
}

Rozumiem, że w miejsce komentarzy wstawisz sobie właściwe linijki.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Wprawdzie pomyliłem posty. Poprawiony kod ( obsługa poprawnego wyświetlania znaku "stopnia" Celsjusza ( pokazywało krzaczki zamiast znaku, czyli pierw trzeba aktywować LCD, a dopiero potem tworzenie znaku przez LCD ), dodano drugi czujnik temperatury w formie termistora płaskiego wyjętego z zużytej baterii od laptopa , do termistora użyłem rezystora 10K i wpięty w napięcie 5,5V . I oczywiście pozmieniałem wyświetlanie na LCD . Reszta pozostaje bez zmian  

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <OneWire.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define DS3231_I2C_ADDRESS 0x68


int ThermistorPin = 0;
int Vo;
float R1 = 10000;
float logR2, R2, T, Tc, Tf;
float c1 = 1.009249522e-03, c2 = 2.378405444e-04, c3 = 2.019202697e-07;

LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 20, 4);

// Konwersja liczby dziesiętnej do postaci binarnej
byte decToBcd(byte val){
  return( (val/10*16) + (val%10) );
}

// Konwersja liczby binarnej do postaci dziesiętnej
byte bcdToDec(byte val){
  return( (val/16*10) + (val%16) );
}

float temp1, temp2;

byte stopnie[8] = {                //konfigurajca znaku stopnie
  B00111,
  B00101,
  B00111,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000
};

RF24 radio(9, 10);
const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0E2LL };

void setup(void) {

Serial.begin(9600);
Wire.begin();
radio.begin();

 radio.setRetries(15,15);

 radio.openReadingPipe(1,pipes[1]);

 radio.startListening();

 radio.printDetails();

 radio.openWritingPipe(pipes[1]);

 radio.openReadingPipe(1,pipes[0]);

 radio.startListening();
lcd.begin(20, 4);
lcd.backlight();
lcd.clear();
lcd.print("....WELCOME HOME....");
delay(2000);
lcd.clear();
lcd.print("Connecting to sensor");
delay(2000);
lcd.clear();
lcd.createChar(0, stopnie);
}

void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte
dayOfMonth, byte month, byte year)
{
  // ustawienie czasu i daty w DS3231
  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0);                    // określa, że następna wartość ma trafić do rejestru sekund
  Wire.write(decToBcd(second));     // ustawienie sekund
  Wire.write(decToBcd(minute));     // ustawienie minuty
  Wire.write(decToBcd(hour));       // ustawienie godziny
  Wire.write(decToBcd(dayOfWeek));  // ustawienie dnia tygodnia (1=niedziela, 7=sobota)
  Wire.write(decToBcd(dayOfMonth)); // ustawienie dnia (1-31)
  Wire.write(decToBcd(month));      // ustawienie miesiąca
  Wire.write(decToBcd(year));       // ustawienie roku (0-99)
  Wire.endTransmission();
}

void readDS3231time(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0); // ustawia rejestr DS3231 na 00h
  Wire.endTransmission();
  Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
  // żąda 7 bajtów danych od modułu DS3231 począwszy od rejestru 00h
  *second = bcdToDec(Wire.read() & 0x7f);
  *minute = bcdToDec(Wire.read());
  *hour = bcdToDec(Wire.read() & 0x3f);
  *dayOfWeek = bcdToDec(Wire.read());
  *dayOfMonth = bcdToDec(Wire.read());
  *month = bcdToDec(Wire.read());
  *year = bcdToDec(Wire.read());
}

void displayTime(){
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  // retrieve data from DS3231
  readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,
  &year);
  
// Przekazanie danych do wyświetlenie w serial monitorze i do LCD

  // CZAS
  // Godziny
    // podczas wyświetlania konwertuje wartość zmiennej typu bitowego do postaci dziesiętnej
  Serial.print(hour, DEC);
  if (hour<10) {
    lcd.setCursor(0,0); 
    lcd.print("0");
    lcd.print(hour, DEC); 
  } else {
    lcd.setCursor(0,0); 
    lcd.print(hour, DEC); 
    }
  Serial.print(":");
 // lcd.setCursor(2,1); 
  lcd.print(":");
  
  // Minuty
  Serial.print(minute, DEC);
  if (minute<10) {
    Serial.print("0");
    lcd.setCursor(3,0); 
    lcd.print("0");
    lcd.print(minute, DEC); 
  } else {
    lcd.setCursor(3,0); 
    lcd.print(minute, DEC); 
    }
  Serial.print(":");
  lcd.print(":");
  
  //Sekundy
  if (second<10){
    Serial.print("0");
    lcd.setCursor(6,0); 
    lcd.print("0");
    lcd.print(second, DEC); 
  } else {
    Serial.print(second, DEC);
    lcd.setCursor(6,0); 
    lcd.print(second, DEC); 
    }

// DATA
  Serial.print(" ");
  Serial.print(dayOfMonth, DEC);
  Serial.print("-");
  Serial.print(month, DEC);
  Serial.print("-");
  Serial.print(year, DEC);

  // Dzień
  if (dayOfMonth<10){
    lcd.setCursor(10,0); 
    lcd.print("0");
    lcd.print(dayOfMonth, DEC); 
  } else {
    lcd.setCursor(10,0); 
    lcd.print(dayOfMonth, DEC); 
    }
    lcd.print("-");
    
  // Miesiąc
  if (month<10){
    lcd.setCursor(13,0); 
    lcd.print("0");
    lcd.print(month, DEC); 
  } else {
    lcd.setCursor(13,0); 
    lcd.print(month, DEC); 
    }
    lcd.print("-");

   //Rok
    lcd.print("20");
    if (year<10){
    lcd.setCursor(18,0); 
    lcd.print("0");
    lcd.print(year, DEC); 
  } else {
    lcd.setCursor(18,0); 
    lcd.print(year, DEC); 
    }
  
  Serial.print(" ");
  lcd.setCursor(0,1); 
  switch(dayOfWeek){
  case 1:
    Serial.println("Poniedziałek");
    lcd.print("Dzis Poniedzialek");
    break;
  case 2:
    Serial.println("Wtorek");
    lcd.print("Dzis jest Wtorek");
    break;
  case 3:
    Serial.println("Środa");
    lcd.print("Dzis jest Sroda");
    break;
  case 4:
    Serial.println("Czwartek");
    lcd.print("Dzis jest Czwartek");
    break;
  case 5:
    Serial.println("Piątek");
    lcd.print("Dzis jest Piatek");
    break;
  case 6:
    Serial.println("Sobota");
    lcd.print("Dzis jest Sobota");
    break;
  case 7:
    Serial.println("Niedziela");
    lcd.print("Dzis jest Niedziela");
    break;
  }
}

void loop(void)
{
if ( radio.available() )
{
delay(50);

Vo = analogRead(ThermistorPin);
  R2 = R1 * (1023.0 / (float)Vo - 1.0);
  logR2 = log(R2);
  T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2));
  Tc = T - 273.15;

radio.read(&temp1, sizeof(temp1));
lcd.setCursor(0,3);
lcd.print("Temp. zewn."); // Odbierana temperatura radiowo 2,4GHz
lcd.setCursor(12,3);
lcd.print(temp1);
lcd.print((char)0);
lcd.print("C");

delay(50);

lcd.setCursor(0,2);
lcd.print("Temp. wewn."); // // Odbierana temperatura z termistora 10k
lcd.setCursor(12, 2);
lcd.print(Tc); 
lcd.print((char)0);
lcd.print("C");

delay(100);
}
displayTime(); // wyświetlanie czasu rzeczywistego
  delay(1000);   // odśwież co sekundę
}
//else
//{
//lcd.println("   Brak sygnalu...");
//}
//delay(1000);
//}

Było by pięknością aby przenieść to wszystko na wyświetlacz TFT. Ale potrzebuję osoby, która zrobiłaby dla mnie kod. Macie pomysł co gdzie dodać aby włączyć LCD i wyłączyć o ustalonej godzinie ( dopisanie do kodu ) ? Dzięki 

1662058714087.jpg

Link do komentarza
Share on other sites

7 godzin temu, ethanak napisał:

Czekaj moment. Na pewno potrzebujesz osoby, która napisze kod za Ciebie, czy może wolałbyś kogoś, kto pomoże Ci napisać kod samemu?

To drugie jest na tym forum bardziej prawdopodobne 😉

 

Potrzebuje kogoś, kto poprawi kod do wyświetlania na TFT na tym moim wyświetlaczu. Kod "wykombinowałem' samemu z różnych kodów posklejałem i pozmieniałem dane w/g moich potrzeb 😉

Link do komentarza
Share on other sites

Czekaj... jaki kod chcesz poprawić, przecież go tam w ogóle nie ma!

Chyba, że przez poprawianie rozumiesz napisanie go od początku i jeszcze dopasowanie do Twojego arcydzieła... wybacz, ale to nie ten dział.

Link do komentarza
Share on other sites

3 godziny temu, ethanak napisał:

Czekaj... jaki kod chcesz poprawić, przecież go tam w ogóle nie ma!

Chyba, że przez poprawianie rozumiesz napisanie go od początku i jeszcze dopasowanie do Twojego arcydzieła... wybacz, ale to nie ten dział.

kilka postów wyżej jest "poprawiony kod " ten właśnie kod chciałbym aby był dopasowany do TFT. Zamiast LCD to MY_LCD

Link do komentarza
Share on other sites

Rozumiem, że chcesz wstawić do hulajnogi silnik Ferrari to wystarczy zmienić śrubki?

To jest zupełnie inna zasada działania. Poczytaj sobie może jak działają wyświetlacze a potem mów że wystarczy zmienić parę linijek.

Link do komentarza
Share on other sites

Widzę, że taka rozmowa do niczego nie prowadzi. Nie zamierzam wkuwać elektroniki na pamięć aby dowiedzieć się tego, czy owego. Poprosiłem o napisanie kodu. Ale jak widzę sa osoby co wszystko umieją 😉

  • Lubię! 1
  • Nie zgadzam się! 1
Link do komentarza
Share on other sites

Zawsze byłem przekonany, że cała "zabawa i frajda" w tym hobby to właśnie poszerzanie i zdobywanie wiedzy samemu oraz "wkuwanie elektroniki na pamięć aby dowiedzieć się tego, czy owego"... żeby zrobić coś swojego, niepowtarzalnego.

Stworzyłeś fajnie działający kod na LCD 💪 ,to spróbuj znaleźć też przykłady w "internetach" dotyczące oprogramowania Twojego TFT - na pewno uda się coś wyszukać ! Może w bibliotece do TFT są załączone jakieś przykłady ?

  • Lubię! 1
Link do komentarza
Share on other sites

Szukałem oczywiście. Jest sporo ciekawych projektów podobnych do mojego ale oczywiście nic na temat mojego wyświetlacza. A jeśli jest to raczej nie interesujący lub taki, który wyskakuje błąd dla płytki Arduino.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.