Skocz do zawartości

Serwer ESP32 wyświetlanie wyników


Pomocna odpowiedź

Napisano

Cześć. Mam problem z wyświetlaniem wyników na lcd 2x16. Odbieram dane z dwóch esp32  które wysyłają wilgotność i temperaturę. Chce te wartość wyświetlać na ekranie tylko mam problem poniewaz nie wiem jak zrobić aby wyświetlało to wartość aż uzyska następną oraz jak zrobić aby wyświetlało te wszystkie wartość bo teraz jest tylko wyświetla na wszystkich 4 polach ostatnią wartość jaką odebrał. Szukam odpowiedz na te 2 pytania oraz podobnych zrobionych projektów.

//SERVER
#include <LiquidCrystal_I2C.h>

unsigned char stateCnt = 0;;
// set the LCD number of columns and rows
int lcdColumns = 16;
int lcdRows = 2;
LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows);  
int buttonpin = 26;

volatile bool buttonState = false;

//Load Wi-Fi library
#include <WiFi.h>

// Replace with your network credentials
const char* ssid     ="xxx" ;                                
const char* password ="xxx" ;                                     
/* create a server and listen on port 8088 */
/* create a server and listen on port 8088 */
WiFiServer server(8088);
void setup()
{
    lcd.init();
  // turn on LCD backlight                      
  lcd.backlight();
  pinMode(buttonpin, INPUT_PULLUP);
    attachInterrupt(digitalPinToInterrupt(buttonpin), button, FALLING);
    Serial.begin(115200);
    Serial.print("Connecting to ");
    Serial.println(ssid);
    /* connecting to WiFi */
    WiFi.begin(ssid, password);
    /*wait until ESP32 connect to WiFi*/
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }
    Serial.println("");
    Serial.println("WiFi connected with IP address: ");
    Serial.println(WiFi.localIP());
    /* start Server */
    server.begin();
}
void loop(){
    /* listen for client */
    WiFiClient client = server.available(); 
    uint8_t data[30]; 
    if (client) {                   
      Serial.println("new client");         
      /* check client is connected */           
      while (client.connected()) {          
          if (client.available()) {
              int len = client.read(data, 30);
              if(len < 30){
                  data[len] = '\0';  
              }else {
                  data[30] = '\0';
                  
              }  
              }}}
               if(buttonState == true){
    
 
     lcd.clear();
               
               
 
         if (!(stateCnt % 2)) {
          lcd.setCursor(0, 0); 
  lcd.print("Wilgot(1):"); 
         
         lcd.setCursor(12, 0); 
         lcd.print((char*)data);
          lcd.setCursor(0, 1);
         lcd.print("Tempe(1):");
              lcd.setCursor(12, 1);
              lcd.print((char*)data);
              
         }else
                 
 
 
  {lcd.setCursor(0, 0);
  // print message 
  lcd.print("Wilgot(2):");
   lcd.setCursor(12, 0);            
  lcd.print((char*)data);
  lcd.setCursor(0, 1);
  // print message   
    lcd.print("Temper(2):");
     lcd.setCursor(12, 1);       
  lcd.print((char*)data);
 }
  
  buttonState = false;
     stateCnt++;
     
              
  }
  }
void button(void) {
  buttonState = true;
}

 

@jakub51996 chętnie pomożemy, ale musisz się trochę bardziej skupić podczas pisania wiadomości na forum. Zgodnie z naszą Polityką Przyjaznego Forum nie czepiamy się tutaj błędów w pisowni na poziomie braku jednego ogonka, ale Twój post czyta się naprawdę ciężko. Rozumiem, że dla Ciebie wszystko jest jasne, ale osoba postronna, która czyta powyższą wiadomość z trudem może się domyślić (lub nie) co chciałeś przekazać. Taka koleżeńska rada - pisz krótszymi zdaniami. Nie będę tego za Ciebie poprawiał i nie będę dawał żadnych ostrzeżeń, bo nie o to chodzi. Spróbuj może raz jeszcze napisać to co wyżej, ale w bardziej przejrzysty sposób 😉

10 godzin temu, jakub51996 napisał:

Szukam odpowiedz na te 2 pytania [..]

Szukasz odpowiedzi na te pytania, a w Twoim poście nie ma żadnych pytań - jest tylko jedna długa wypowiedź, która naprawdę ciężko rozszyfrować 🙂

PS Zwracam uwagę, bo Twój post był raportowany przez innych czytelników forum.

Masz racje napisałem to bardzo chaotycznie zacznę od początku. Chcę stworzyć serwer (na ESP32) który odbiera wyniki z 2 innych ESP32 ( pracują jako klienci czyli robią pomiary i wysałają do serwera). Tutaj na potykam na dwa problemy:

-nie mogę wyświetlać wartość z czujników w odpowiednie miejsca(jeśli serwer odbierze wartość z czujników to wyświetla je w wszystkie rubryki - oznacza ,że temperatura z czujnika 1 wyświetlana jest jako  wilgotność i temperatura czujnika 1 i 2).

-drugi problem jest taki ,że chce aby te wartość były wyświetlane do tego czasu aż odbierze i wyświetli następne.

Szukam pomocy w rozwiązaniu tych 2 problemów. Mam nadzieje ,że teraz jest lepiej opisane moje problemy.  

  • Lubię! 1

To teraz popatrz na swój kod.

Klient przesyła jakieś tam dane do serwera (nie bardzo wiadomo jakie, mógłbyś uprzejmie nam to opisać, albo jaki przykład podać).

Serwer nie ma pojęcia, co owe dane znaczą (bo niby skąd) i który klient je wysłał (bo niby skąd).

Może zacznij od rozwiązania tego problemu (którego chyba nie zauważyłeś)?

  • Lubię! 1

Klient wysyła dane wilgotność i temperaturę w formacie:

Wilg(1):10

Temp(1):21

Trochę poszukałem i aby serwer widział który to klient wysłał muszę zastosować dwa porty ( np klient 1 port 8088 i dla klienta 2 port 81) czy takie rozwiązanie jest dobre?

 

7 minut temu, jakub51996 napisał:

aby serwer widział który to klient wysłał muszę zastosować dwa porty

Nie.

Po pierwsze: możesz identyfikować klienta po IP (jeśli ma stały) ale to proteza.

Po drugie: klient może się przedstawić, przykładowo:

Klient wysyła 1T40\n - czyli klient pierwszy temperatura 40°

Klient wysyła 2H80\n - czyli klient drugi wilgotność 80%

I ta druga opcja jest jak najbardziej prawidłowa, zalecana i szeroko stosowana.

10 minut temu, jakub51996 napisał:

czy takie rozwiązanie jest dobre?

Szczerze? Do niczego.

 

  • Lubię! 1
  • Pomogłeś! 1

I jeszcze w kwestii bezpieczeństwa IoT, już tutaj masz buffer overflow:

data[30] = '\0';

Reszty nawet nie komentuję, ale pamiętaj proszę że Internet to nie piaskownica, to co udostępniasz widzą wszyscy - zarówno dobrzy, jak i źli użytkownicy sieci...

  • Lubię! 1
(edytowany)

Serwer już rozpoznaje dane i kto wysyła tylko mam problem z wyświetleniem. Program nie wysyła błędów a podłączenie jest dobre (bo sprawdzałem na innym programie).Na ekranie wyświetlacza nic sie nie pojawia.

Edit 

Mój błąd zastosowałem zmienną lokalną zamiast globalną.

Dziękuję   wszystkim za pomoc w szczególność ethanak

 

 

Edytowano przez jakub51996

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...