Skocz do zawartości

Serwer ESP32 wyświetlanie wyników


jakub51996

Pomocna odpowiedź

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;
}

 

Link do komentarza
Share on other sites

@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.

Link do komentarza
Share on other sites

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
Link do komentarza
Share on other sites

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
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

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?

 

Link do komentarza
Share on other sites

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
Link do komentarza
Share on other sites

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
Link do komentarza
Share on other sites

(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
Link do komentarza
Share on other sites

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...

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.