Skocz do zawartości

Tworzenie interfejsu sieciowego z wykorzystaniem ESP - część 1


AlcoMatt

Pomocna odpowiedź

2 godziny temu, czeslaw napisał:

@ReniferRudolf

Ad2 Tak jak napisałem powyżej, powinna być przekazywana przez te dwa kody, zacytowane powyżej.

Pierwszy znajduje się w pliku serwera arduino a drugi w pliku 'index. html' wgranym do spissf. Przypuszczam, że błąd jest w tym drugim zacytowanym kodzie.

Spodziewałem się, że skomentujesz dokładniej, w jaki sposób wartość tej zmiennej miałaby niby stać się dostępna w kodzie serwera (domyślam się, że nie pisałeś sam tego kodu, ale skądś zaczerpnąłeś?).

Skoro mówisz, że: 

2 godziny temu, czeslaw napisał:

Ad3, zmienna tekstowa 'mycode'  o nadanej wstępnie przypadkowej wartości "x" jest zaimplementowana w kodzie serwera. Po pobraniu tekstu przesłanego z formularza html powinna być zastąpiona tym tekstem.

to ponawiam pytanie: w jaki sposób, w którym miejscu kodu, ma się to wydarzyć? Zmienna globalna String mycode="x" w module serwera nie jest nigdzie modyfikowana w zacytowanym przez Ciebie kodzie, dlatego ma na zawsze wartość "x".

🤔🤔Wygląda na to, że w Twoim programie na serwerze nie ma w ogóle przetwarzania wartości otrzymanej z formularza html (innymi słowy żądanie GET pod adresem serwer/mycode nie robi nic poza wyświetleniem na konsoli jakiejś zmiennej globalnej, akurat o nazwie mycode, która akurat ma wartość "x").

Link do komentarza
Share on other sites

@ReniferRudolf Wygląda na to, że w Twoim programie na serwerze nie ma w ogóle przetwarzania wartości otrzymanej z formularza html (innymi słowy żądanie GET pod adresem serwer/mycode nie robi nic poza wyświetleniem na konsoli jakiejś zmiennej globalnej, akurat o nazwie mycode, która akurat ma wartość "x").

Otóż to: Chodzi o to by formularz przekazywał do serwera wprowadzony tekst a nie przekazuje. A dokładnie chodzi o wprowadzenie odpowiedniej ku temu modyfikacji kodu. Sam sobie z tym nie poradziłem. Tego bym ewentualnie oczekiwał od któregoś z uczestników jeśli by to, broń boże, nie było dla niego zbytnią subiekcją a tylko małym treningiem.

 

 

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

2 godziny temu, czeslaw napisał:

@ReniferRudolf Chodzi o to by formularz przekazywał do serwera wprowadzony tekst a nie przekazuje. A dokładnie chodzi o wprowadzenie odpowiedniej ku temu modyfikacji kodu.

 

 

Mówiłeś, że w pytaniu chodzi o znalezienie błędu w kodzie 😏

A tymczasem chodzi o pomoc w zaimplementowaniu pewnej funkcji serwera HTTP  - konkretnie jak rozumiem brakuje Ci parsowania query string, czyli tego ciągu znaków, który znajduje się za znakiem zapytania w "linku", przez który wysyłasz zapytanie do serwera (ten link koduje nazwy i wartości pól z formularza).

Nie znam szczegółów środowiska i bibliotek, które używasz, żeby podawać tu jakieś gotowce - może ktoś inny wspomoże.

Ewentualnie ta lektura może być inspiracją: https://techtutorialsx.com/2017/12/17/esp32-arduino-http-server-getting-query-parameters/

Edytowano przez ReniferRudolf
Link do komentarza
Share on other sites

@ReniferRudolf

Dwa zdania gwoli wyjaśnienia:

Projekt który, nie bez powodu tutaj w tym temacie "Tworzenie interfejsu sieciowego z wykorzystaniem ESP" kolegi AlkoMata zamieściłem jest poniekąd przeróbką jego projektu z moim nieudolnym dodatkiem funkcji polegającej na możliwości wprowadzaniu do serwera z urządzenia klienckiego (smartfona, czy laptopa) dowolnych ciągów znaków.  Myślę, że dodanie tej dodatkowej funkcji do pierwotnego projektu byłoby użyteczne nie tylko dla mnie ale i dla innych uczestników Forbota. Ja swoje projekty ESP tworzyłem do tej pory na platformie lua a ponieważ ta platforma nie daje wsparcia na ESP32 to przerabiam swoje projekty na platformę arduino. 

  • 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

Siedzę przy podobnym projekcie. Chcę stworzyć WebApp ASP.NET Core (Backend) i React (front), Database w AzureDB. Robić użytkowników i łączyć się z ESP za pomocą API. Z embedded dev czuję się znacznie słabiej, mam nadzieję, że znajdę tu kilka wskazówek. Na pierwszy rzut oka widzę fundament, którego szukałem - muszę traktować ESP jako oddzielny server. Co w sumie nieźle otwiera mi oczy - dzięki 😄.
Jeśli się mylę w którymkolwiek stwierdzeniu. Proszę o poprawę. Jest to projekt do mojego portfolio - każdą konstruktywną uwagę uznaję za cenną :D

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

Witam !!

w jaki sposób wyświetlić na stronie www informacje o przydzielonym adresie IP  WiFi.localIP()
 

const char* serverIndex =

"<body bgcolor='5c6bc0'></body>"

"<h3><center>IP wifi </center></h3>"

"<div id="WiFi.localIP()"></div>"  ? niezgodność typów ? 

dziękuje i pozdrawiam !

Link do komentarza
Share on other sites

(edytowany)

@robo1973 "<div id="WiFi.localIP()"></div>" ? niezgodność typów ?

 

Jeśli takie terminy jak endpoint i fetch są Ci znane. Powinieneś rozumieć o co mi chodzi. I możesz przejść do kodu...

Jeśli nie jest - gorąco zachęcam Cię do stworzenia jakiegoś treningowego API oraz zapoznania się z tym czym jest komunikacja klient <-> AP I<-> serwer (za pomocą HTTP).


Wracając do kodu. Proponuję Ci stworzyć nowy endpoint do pobierania IP (mniej więcej coś takiego po stronie servera)

 

serwer.on("/get-ip", HTTP_GET, [](AsyncWebServerRequest *request){ 
    request->send(200, "text/plain", WiFi.localIP().toString()); 
});

 

, a potem musisz zrobić "fetch" i  w swoim HTML'ku możesz zrobić coś mniej więcej takiego:

 

<body>
    <h1>Witaj na stronie ESP!</h1>
    <p>Adres IP ESP: <span id="ip"></span></p>

    <script>
        fetch('/get-ip')
            .then(response => response.text())
            .then(ip => document.getElementById('ip').innerText = ip)
            .catch(error => console.error('Błąd pobierania IP:', error));
    </script>
</body>

Pozdrawiam

Edytowano przez adiii41
błądy stylistyczne
  • Lubię! 2
Link do komentarza
Share on other sites

Serdecznie dziękuję !!!

Działa !!

"<p>Adres IP Wifi: <span id=ip></span></p>"
"<script>"
"fetch('/get-ip')"
            ".then(response => response.text())"
            ".then(ip => document.getElementById('ip').innerText = ip)"
            ".catch(error => console.error('Błąd pobierania IP:', error));"
"</script>"
  
  
  
  server_updater.on("/get-ip", HTTP_GET, [](){ 
    server_updater.send(200, "text/plain", WiFi.localIP().toString()); 
});

 

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.