Skocz do zawartości

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


Pomocna odpowiedź

@PiotrekEl Kwestia1. Zastanawiam sie w jakim celu miałbym wystawiać "na świat" serwer rejestrujący takie wykresy temperatur w domu? 

Kwestia2.  Napisałeś " A jak ktoś się już dostanie do sieci to skanowanie urządzeń/portów trwa bardzo króciutko."

To ja pytam a jeśli ktoś dostanie Ci się do sieci mimo tego, że nie miałeś ustawionego dostępu "ze świata" to co ci to pomoże?

Kwestia3: Widząc na wykresie temperatury przekraczające 28stC, zastanowiłem się czy to nie jest wykres temperatur z fali maksymalnych letnich upałów (jakoś mi ten wykres kwestionuje argumentację, którą z niego wywiodłeś)? Nie wiem jak u kogo ale u mnie temperatury pomieszczeń w sezonie grzewczym zawierają się w widełkach 18-21sC.

Link to post
Share on other sites
33 minuty temu, czeslaw napisał:

@PiotrekEl Kwestia1. Zastanawiam sie w jakim celu miałbym wystawiać "na świat" serwer rejestrujący takie wykresy temperatur w domu?

 

48 minut temu, czeslaw napisał:

Powiedzmy że mamy w domu urządzenia, których wrażliwe parametry chcemy mieć pod kontrolą w czasie gdy jesteśmy poza domem. Co więcej, chcemy mieć zdalną możliwość korygowania pracy tych urządzeń. Wtedy ta zabawa może być naprawdę użyteczna i warta świeczki.

A to jak wystawisz co innego niż temperatury to już nie będzie "niebezpieczne"? To nie ma znaczenia co wystawiasz na świat, sam fakt że wystawiasz na świat dostęp do swojej sieci to ryzyko. I nie zmienia tego stanu rzeczy fakt, że zabezpieczysz to hasłem czy  czymkolwiek innym.

Nie chcę Ci "dopiec" ani nic z tych rzeczy, po prostu uświadomić, że to nie jest bezpieczne mimo zabezpieczeń.

53 minuty temu, czeslaw napisał:

Kwestia2.  Napisałeś " A jak ktoś się już dostanie do sieci to skanowanie urządzeń/portów trwa bardzo króciutko."

To ja pytam a jeśli ktoś dostanie Ci się do sieci mimo tego, że nie miałeś ustawionego dostępu "ze świata" to co ci to pomoże?

Nic mi to nie pomoże ale hasło klucz to "jeśli". Nie mam dostępu z zewnątrz i szansa na to jest nieporównywalnie mniejsza.

37 minut temu, czeslaw napisał:

Nie wiem jak u kogo ale u mnie temperatury pomieszczeń w sezonie grzewczym zawierają się w widełkach 18-21sC.

Żyłem niegdyś w rzeczywistości, w której miałem zimą w mieszkaniu temperatury rzędu 13-17 stopni celsjusza. 17 to już było dla mnie przyjemne ciepło. Mnóstwo ludzi w to nie wierzy jak im czasem opowiadam ale jakoś nie mam potrzeby tego nikomu udowadniać;) Jestem szczęśliwy że teraz mam ciepło i to dość niskim kosztem.

37 minut temu, czeslaw napisał:

Widząc na wykresie temperatury przekraczające 28stC, zastanowiłem się czy to nie jest wykres temperatur z fali maksymalnych letnich upałów

28 to wartość szczytowa, jak popatrzysz dobrze zobaczysz że temperatura oscyluje wokół 26. 6m2 pomieszczenia, dobre ocieplenie, dwa komputery chodzące non stop, człowiek. Tak, to możliwe:)

Link to post
Share on other sites

Witam

Dziekuję autorowi za bardzo czytelny artykuł.

Pozwoliłem sobie przerobić kod , bez wykorzystania  SPIFFS co moim zdaniem mały projekt upraszcza.

Użyłem Wemos D1 mini , który pracuje na esp8266 (jest trochę różnic między esp32)

Kod działa

Arduino kod:

#include "ESP8266WiFi.h"
#include "ESPAsyncTCP.h"
#include "ESPAsyncWebServer.h"
 
const char* ssid = "nazwawifi";
const char* password = "hasło";

#define LED 5                    //numer pinu gdzie mamy podłączoną diodę 
AsyncWebServer serwer(80); //utwórzmy obiekt serwera na porcie 80

String htmlStrona = String("<!DOCTYPE HTML>") + 
    "<html lang='pl'><head>" +
    "<meta charset='utf-8'>" +                  
    "</head>" +
    "<html><body><center>" +
    "<p id='pomiar'>Wartość:</p>" +
    "<button id='on'>Włącz</button>" +
    "<button id='off'>Wyłącz</button><br>" +
    "<script>" +
    "document.getElementById('on').onclick = function () { " +   //po nacisinięciu elementu o ID "on"
        "const zapytanie = new XMLHttpRequest(); " +           //wyślijmy zapytanie GET, pod adresem /on      
       "zapytanie.open('GET', '/on'); " +
       "zapytanie.send(); " +                               
     "}; " +
    "document.getElementById('off').onclick = function () {" +     //po nacisinięciu elementu o ID "off"
        "const zapytanie = new XMLHttpRequest();" +                //wyślijmy zapytanie GET, pod adresem /off   
        "zapytanie.open('GET', '/off');" +
        "zapytanie.send();" +                               
    "};" +
    "</script>" +
    "</body>" +
    "</html>" +
    "\r\n";

void setup() {
  pinMode(LED, OUTPUT);
  //digitalWrite(5, LOW);
  
  Serial.begin(115200);                    //zainicjujmy port szeregowy
  WiFi.begin(ssid,password );                  //połącz z naszą siecią wifi  
  while (WiFi.status() != WL_CONNECTED){   //poczekajmy aż ESP połączy się z naszą seicią 
  delay(1000); //dla ESP8266
  } 
  Serial.printf("\nAdres IP:");
  Serial.println(WiFi.localIP());          //wypisz adres IP naszego ESP przez port szeregowy

  //tutaj odbywa sie obsługa zapytań
  serwer.on("/", HTTP_GET, [](AsyncWebServerRequest *request){ //na otrzymane od klienta zapytanie pod adresem "/" typu GET, 
    request->send(200, "text/html",htmlStrona);           //odpowiedz mu kodem 200, danymi tekstowymi, o treści "Witaj! :)"
  });

   serwer.on("/on", HTTP_GET, [](AsyncWebServerRequest *request){ //na otrzymane od klienta zapytanie pod adresem "/on" typu GET, 
    digitalWrite(LED, HIGH);                                      //zapal diodę
    request->send(200);                                          //odeślij odpowiedź z kodem 200 OK 
  });

   serwer.on("/off", HTTP_GET, [](AsyncWebServerRequest *request){ //na otrzymane od klienta zapytanie pod adresem "/off" typu GET, 
   digitalWrite(LED, LOW);                                        //zgaś diodę
   request->send(200);                                             //odeślij odpowiedź z kodem 200 OK          
  });

  serwer.begin();                          //zainicjujmy nasz serwer 
} 

void loop() {
}

 Pozdrawiam

  • Lubię! 1
Link to post
Share on other sites

Cześć! Świetny artykuł, ma dokładnie to czego chciałem się nauczyć <3.

Proszę czy mógłbyś mnie naprowadzić jak przesłać jakieś dane (np. JSON) i odebrać je na ESP? Tj. w ramach ćwiczenia chciałem zrobić coś takiego, że na stronie internetowej jest text input, którego zawartość zostanie wyświetlona na LCD.

Link to post
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

Dnia 16.09.2021 o 15:06, daneil737 napisał:

Cześć! Świetny artykuł, ma dokładnie to czego chciałem się nauczyć <3.

Proszę czy mógłbyś mnie naprowadzić jak przesłać jakieś dane (np. JSON) i odebrać je na ESP? Tj. w ramach ćwiczenia chciałem zrobić coś takiego, że na stronie internetowej jest text input, którego zawartość zostanie wyświetlona na LCD.

Jeżeli problem aktualny, można to tego wykorzystać formularze w przypadku np. parametrów jakie chcemy zadać.

Po stronie przeglądarki będzie wyglądać to mniej więcej  tak

       <div id="wifi-settings-display" class="wifi-settings">
                <form id="wifi-settings-form" action="/settings-update" method="GET" target="bg-form">
                    <h2>Sieć WiFi</h2>
                    <input id="ssid" name="ssid" type="text" placeholder="Nazwa sieci"><br>
                    <input id="password" name="password" minlength="8" type="password" placeholder="Hasło"><br>
                </form>
                <button class="save-button">Zapisz</button>
            </div>

id lub parametr name (już dokładnie nie pamiętam) elementów będą wskazywały nazwy wysyłanych parametrów

zaś po stronie ESP mniej więcej tak

server.on("/settings-update", HTTP_GET, [](AsyncWebServerRequest *request)
              {
                  request->send(200);

                  if (request->hasParam("ssid") || request->hasParam("password"))
                  {
                      String wifi_ssid, wifi_pass;
                      wifi_ssid = request->getParam("ssid")->value();
                      wifi_pass = request->getParam("password")->value();
                      update_config("ssid", wifi_ssid);
                      update_config("password", wifi_pass);
                  }                 
              });

odebrane parametry można wpisać do zmiennych, a następnie np. do pliku JSON.

Jeżeli chodzi o typowe przesyłanie plików, nie testowałem tego bo nie miałem potrzeby. Musiałbym to sprawdzić.

Polecam przeanalizować ten przykład. Jest tam z tego co pamiętam również wgrywanie plików.

https://github.com/me-no-dev/ESPAsyncWebServer/blob/master/examples/ESP_AsyncFSBrowser/ESP_AsyncFSBrowser.ino

 

Dnia 6.01.2022 o 14:19, tadek09 napisał:

Witam

Mam problem jak wgrać stronę HTML do SPIFFS.

Gdzie leży problem? Do wgrania konieczne jest utworzenie w projekcie folderu "data" w którym znajdują się pliki do wgrania do SPIFFS.

Link to post
Share on other sites
Dnia 6.01.2022 o 14:19, tadek09 napisał:

Witam

Mam problem jak wgrać stronę HTML do SPIFFS.

Jeśli używasz platformy Arduino to pod załączonym linkiem masz krok po kroku, ludzkim językiem opisany sposób obsługi SPIFFS dla ESP8266 i ESP32. 

Możesz niniejszy projekt zamiast na platformie VSC+platformIO wgrać i uruchomić na platformie Arduino. Mnie Arduino mimo wszystko wydaje się bardziej klarowne.

https://randomnerdtutorials.com/esp8266-web-server-spiffs-nodemcu/

  • Lubię! 1
Link to post
Share on other sites
(edytowany)

- przeczytałem, skopiowałem, poprawiłem dla esp8266 i katalogu DATA, wgrałem pliki do /DATA.

-  uruchomiłem program pod arduino i przegladarkę wg podanego adresu, zaświeciłem LEDem , zgasiłem LED, załadowałem obrazek.

- teraz mam Lene na cały ekran i więcej nic.

- jak odzyskać klawisze i ADC ? bez resetu PC.

Edytowano przez 99teki
Link to post
Share on other sites
2 godziny temu, 99teki napisał:

- przeczytałem, skopiowałem, poprawiłem dla esp8266 i katalogu DATA, wgrałem pliki do /DATA.

-  uruchomiłem program pod arduino i przegladarkę wg podanego adresu, zaświeciłem LEDem , zgasiłem LED, załadowałem obrazek.

- teraz mam Lene na cały ekran i więcej nic.

- jak odzyskać klawisze i ADC ? bez resetu PC.

Czy próbowałeś odświeżyć stronę? Załadowałeś obrazek, znaczy się, pokazuje na cały ekran po pobraniu, czy po dodaniu do kodu?


Wydaje mi się że jednak mały błąd wkradł się do kodu i w tym fragmencie

serwer.on("/download", HTTP_GET, [](AsyncWebServerRequest *request){ //na otrzymane od klienta zapytanie pod adresem "/off" typu GET, 
   request->send(SPIFFS, "/Lenna.png", "image/png", false);           //odeślij odpowiedź w postaci pliku png o nazwie obrazek.png z SPIFFS i umożliwij pobranie    
  });

zamiast

request->send(SPIFFS, "/Lenna.png", "image/png", false);       

powinno być

request->send(SPIFFS, "/Lenna.png", "image/png", true);

 

  • Lubię! 1
Link to post
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.