Skocz do zawartości

ESP32...podglad napiecia przez internet


Pomocna odpowiedź

Napisano

Witam...tak sobie troche kombinuje w nawiazaniu do tematu pewnego kolegi z forum, chodzi o podglad zmiennej z esp32 poprzes internet, i tutaj wszystko gra, wartosc odswieza mi sie co 500ms (sama wartosc, nie cala strona bo to powodowalo nie  regularne odswiezanie)

problem napotkalem kiedy chcialem zrobic cos takiego ze zamiast uzywac ID strony ktore zalezy od tego do jakiego routera bedzie podpiete esp32, chcialem uzyc adresu w stylu "http//napiecie.local" i zmieniac nazwe tej sieci ze strony podgladu, i to tez dziala lecz po adresie local nie chce wczytac strony...chatGPT powiedzial ze to czesta bolonczka routerow, przegladarek typu google i zalezy to od ich ustawien...ktos cos pomoze? podkreslam ze kod byl pisany przez Al, ja to nie kumam wcale html/java i innych wynalazkow...

napiecie.thumb.jpg.af0a228781c8e5c9f5111b1d0720eeaa.jpg

#include <WiFi.h>
#include <ESPmDNS.h>
#include <Preferences.h>

const char* ssid = "moto";
const char* password = "12344321";

WiFiServer server(80);
Preferences preferences;
String hostName;
int value = 0;

void connectToWiFi() {
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  
  Serial.print("Laczenie z WiFi");
  unsigned long startAttemptTime = millis(); // Zapamiętaj czas startu

  // Czekaj na połączenie lub upływ 10 sekund
  while (WiFi.status() != WL_CONNECTED) {
    if (millis() - startAttemptTime >= 10000) { // Jeśli minęło 10s
      Serial.println("\nBlad WiFi: Upłynął limit 10s. Restart...");
      delay(500); 
      ESP.restart(); // Resetuj urządzenie
    }
    delay(500);
    Serial.print(".");
  }
  
  preferences.begin("settings", false);
  hostName = preferences.getString("name", "napiecie1234567890");
  
  if (!MDNS.begin(hostName.c_str())) {
    Serial.println("Blad mDNS!");
  } else {
    Serial.println("\nWiFi OK!");
    Serial.print("Adres: http://");
    Serial.print(hostName);
    Serial.println(".local");
    Serial.println(WiFi.localIP()); 
  }
  WiFi.setSleep(false);
}

void setup() {
  Serial.begin(115200);
  connectToWiFi();
  server.begin();
}

void loop() {
  if (WiFi.status() != WL_CONNECTED) {
    connectToWiFi();
  }

  WiFiClient client = server.available();
  if (client) {
    String request = client.readStringUntil('\r');
    client.flush();

    if (request.indexOf("GET /setname?n=") != -1) {
      int start = request.indexOf("?n=") + 3;
      int end = request.indexOf(" HTTP");
      String newName = request.substring(start, end);
      if (newName.length() > 0) {
        preferences.putString("name", newName);
        delay(500);
        ESP.restart(); 
      }
    }

    if (request.indexOf("/val") != -1) {
      client.println("HTTP/1.1 200 OK\nContent-Type: text/plain\nConnection: close\n");
      client.print(value++); 
    } 
    else {
      client.println("HTTP/1.1 200 OK\nContent-type:text/html\n");
      client.println("<!DOCTYPE html><html><head><meta charset='utf-8'>");
      client.println("<style>body{font-family:sans-serif;text-align:center;padding:20px;}h1{font-size:50px;}</style>");
      client.println("<script>setInterval(function(){fetch('/val').then(r=>r.text()).then(d=>{document.getElementById('v').innerHTML=d;});},500);</script></head>");
      client.println("<body><h1>Napiecie: <span id='v'>0</span></h1>");
      client.println("<hr><p>Adres mDNS: <b>" + hostName + ".local</b></p>");
      client.println("<input type='text' id='n' placeholder='Nowa nazwa'>");
      client.println("<button onclick=\"location.href='/setname?n='+document.getElementById('n').value\">Zmień i Restartuj</button>");
      client.println("</body></html>");
    }
    client.stop();
  }
}

 

(edytowany)

Routery tak mają... (szczególnie jak nie są skonfigurowane do obsługi mDNS)

Pytanie: czemu nie wbijesz tego na twardo w hosts? Bo IMO zmienianie tego jest średnio sensowne. 

Spróbowałbym jeszcze w trybie AP czy komputer (lub telefon) się ogarnie 😉 

Edytowano przez H1M4W4R1
  • Pomogłeś! 1
5 minut temu, H1M4W4R1 napisał:

Pytanie: czemu nie wbijesz tego na twardo w hosts? Bo IMO zmienianie tego jest średnio sensowne. 

Jak chodzi Ci o ID (a nie wiem czy o to chodzi) to ja mógłbym sobie bez problemu sprawdzić jakie jest u siebie, tylko że to docelowo ma trafić do gościa co sobie raczej nie sprawdzi bo nie umie....

Aha! Już wiem o co chodzi...chodzi o to że jak bym dał sztywny adres to wtedy po tym jak chłop by sobie uruchomił to ja też mógłbym podglądać to co on tam robi, i dlatego kombinuje z tymi zmiennymi adresami żeby było jak wzór na tel...sam sobie ustawisz i tylko Ty wiesz jaki jest 

W AP miałem na początku ale Ale mi doradzilo że STA jest stabilniejsze etc...taka dostałem odpowiedź na na prośbę poprawienia stabilności łączą i odświeżania 

@farmaceuta - masz maca czy linuxa? Bo ani Windows, ani Android nie dorobiły się bonjour/avahi. O ile w windowsie to można jakoś zrobić,o tyle w Androidzie się chyba nie da...

 

  • Pomogłeś! 1

Jeszcze tak się zastanawiam, bo mi nie robi różnicy co bym zmieniał...może być i ID które sobie zmienię i będzie na sztywno tylko czy się tak da? Coś tam chat mi wczoraj bazgrał ale nie działało...

Przed chwilą, ethanak napisał:

@farmaceuta - masz maca czy linuxa? Bo ani Windows, ani Android nie dorobiły się bonjour/avahi. O ile w windowsie to można jakoś zrobić,o tyle w Androidzie się chyba nie da...

 

Windows...coś o tym bonjure czytałem wczoraj i nawet na androida pobrałem, niby jest apka ale nie działało to...a może działało???🤔 To jest taka przeglądarka tak? Ona ma się łączyć bezpośrednio z telefonem? Czy to wszystko może iść przez neta na zasadzie esp-router...tel z netem?

Jeśli AP to szukaj captive portal. Poza tym wybacz... ale jeśli nie wiesz jak to działa to raczej nie zrobisz działającej apki

  • Pomogłeś! 1
5 minut temu, ethanak napisał:

Jeśli AP to szukaj captive portal. 

Nie wiem czy Ale o czym takim nie wspomniało wczoraj 🤔

5 minut temu, ethanak napisał:

 Poza tym wybacz... ale jeśli nie wiesz jak to działa to raczej nie zrobisz działającej apki

Nie no spoko 👍 może być tylko strona www, apka to tam kiedyś jak by mi się bardziej chciało, nawet kiedyś już się bawiłem programem do budowy takich rzeczy... 

5 minut temu, ethanak napisał:

Na androida jest apka c9 pokazuje, co dostaje z avahi. I tyle.

Czyli jak to w skrócie działa? Tak jak wyżej wspomniałem? Czy tylko działa na zasadzie bl esp-tel?

@farmaceuta apka do avahi pokazuje co by było gdyby protokół działał. A strone www na esp możesz zrobić zajefajną tylko nikt jej nie zobaczy.

normalnie stronę się stawia na jakimś serwerze, a esp pcha tam dane (np. przez http albo tak nowocześniej przez mqtt). 

 

  • Pomogłeś! 1
(edytowany)

@farmaceuta, ogólnie twój pomysł nie zadziała za nat-em, chyba, ze gościu ma zewnętrzne ip i może przekierować port w swoim routerze, wskazując na ten z esp32. Takie dane najlepiej synchronizować przez zewnętrzny serwer, komunikator, wtedy nie będziesz zaprzątał sobie głowy nazwą lokalną. Kiedyś do sterowania popularne było gg, teraz telegram, discord. Ewentualnie, testowo możesz założyć sobie darmowy serwer, klepnąć tam kilka linijek w php, żeby przekazywało co chcesz. Swojego czasu (też testowo) korzystałem z tego, zbierałem logi przez około pół roku.

Edytowano przez orb777
  • Pomogłeś! 1

@orb777 o matko właśnie Al mi wytłumaczylo o co chodzi z siecią lokalną 😭 no nie...nie o to chodziło...teraz coś właśnie rozglądam się za tymi darmowymi serwerami i co tam jeszcze jest...

...Vercel / Railway / Render

Co to za dziadostwa?? Mogę tam założyć darmowe konto i nie martwić się o to że po niedzieli komornik wywali mnie z chałupy??

  • Lubię! 1

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