2023-01-30

ESP8266 VIRTUINO cloud REST API cz II


Pierwsze (w zasadzie udane) próby z PHP dla przesyłania danych z ESP i ich wizualizacji na stronie WWW mam już za sobą. Dane nie trafiają jeszcze z modułu na serwer lecz z przeglądarki. Teraz pozostaje już tylko podmienić przeglądarkę na odpowiedni kod mikrokontrolera i wszystko powinno działać. Powinno? Nie do końca. Przedtem trzeba jeszcze rozwiązać problem zapamiętywania i udostępniania danych na serwerze WWW. I od tego zacznę dzisiejszy wpis.


Po co zapisywać chwilowe dane na serwerze WWW? Przecież okres ważności przesyłanych przez ESP zmiennych wynosi kilka kilkanaście sekund. Potem ich wartość jest bez znaczenia jeśli tylko nie chcemy robić jakiś historycznych zestawień np. wykresów. Powód jest prozaiczny. Serwer WWW nie przechowuje żadnych danych z przeglądarki. A jeśli nawet to są one dostępne jedynie w momencie przetwarzania strony (HTML czy PHP). Nawet ten sam użytkownik na tej samej stronie po jej odświeżeniu dostaje całkiem nowy zestaw zmiennych bo poprzednie zostały już skasowane. Tym bardziej nie są one dostępne dla różnych użytkowników w różnym czasie.

Oczywiście serwery WWW zapisują dane i to nawet duże ich ilości. Mogą to robić na trzy sposoby. Zapisać dane do pliku, do bazy danych lub na komputer użytkownika. Każdy jednak z tych sposobów tak czy inaczej ma koniec na twardym dysku i stamtąd też trzeba te dane pobrać do wyświetlenia w kolejnej sesji. O tym że jest to dość wolna procedura nie trzeba nawet mówić. Ograniczeniem są pewnie też restrykcje właścicieli hostingu patrzących złym okiem na zbyt częste procedury zapis/odczyt na dysk generowane przez (zwłaszcza darmowych) użytkowników ich serwerów.   

Trochę łatwiej jest w przypadku stosowania baz danych do przechowywania zmiennych naszych programów. Ale baza danych (np MySQL) to osobny moduł, który trzeba sobie zainstalować i umieć obsłużyć z poziomu PHP. Jest szybsza w dostępie niż zapis pliku na dysku ale też potrzebuje czasu. W darmowym hostingu mogę stworzyć bazę danych databases.000webhost.com o pojemności nawet do 1 GB!. Co z tego gdy ja potrzebuję zapamiętać raptem kilkanaście bajtów.

Zapisywanie danych sesji na komputerze użytkownika (słynne ciasteczka) w naszym przypadku nie wchodzi w grę z przyczyn oczywistych. Więc co mamy problem? 

Zastosować by można procedury PHP pozwalające na przechowywanie niewielkich ilości danych w pamięci RAM serwera. Te procedury to apcu (lub apc) pozwalające na krótko zachować nieliczne dane. Można by gdyby mój serwer hostingowy na to pozwalał. Niestety ta funkcja nie jest dostępna w  000webhost.com. Pozostaje więc zapamiętać zmienne w pliku lub w bazie danych.

Zacznijmy od bazy, gdyż wydaje się bardziej odpowiednia do tego typu działań. Na serwerze zainstalowana jest MariaDB - w pełni darmowa wersja MySQL. Wiem, wiem baza danych dla takiej ilości danych to mikroskop do orzechów ale czy mam inny wybór?

Po stworzeniu bazy danych (a mogę mieć dwie) stworzyłem tablicę (tych mogę mieć 100) test z dwoma przykładowymi wierszami "nazwa" i "dana".  Nazwa jest typu tekstowego zaś dana liczbowego int.

teraz mogę już próbować co do tej bazy zapisać i coś z niej odczytać

Stworzyłem trzy pliki

  • jeden.htm - wpisanie nowych wartości i wysłanie je poprzez GET do dwa.php
  • dwa.php - odczyt danych z GET , wyświetlenie i zapis ich do rekordu  bazy danych
  • trzy.php - odczyt danych z bazy, wyświetlenie i skasowanie wszystkich danych z bazy
Plik jeden.html można zastąpić wywołaniem metody GET z przeglądarki wpisując z w pasku adresu zapytanie GET w formacie

https://esp8266restapi.000webhostapp.com/dwa.php?czujnik=cisnienie&wartosc=123

gdzie wartościami zmiennych wysyłanymi do bazy danych są "cisnienie" i "123"

Nie jest to do końca jeszcze symulacja wyświetlania danych z ESP8266 metodą REST API. To raczej testowanie drogi przesyłu danych w łańcuchu: generator danych > ich zapamiętanie > wyświetlanie danych w przeglądarce na żądanie użytkownika.
Za mało wiem bym tłumaczył działania poszczególnych funkcji w tych trzech plikach - szczególnie tych związanych z bazą danych. Przekopiowałem po prostu kilkanaście linijek kodu z różnych źródeł i połączyłem w jako tako działającą całość do testowania. 
Jeśli powyższe procedury uda się z sukcesem skleić z wysyłanymi przez ESP8266 komunikatami jako klienta WWW to będę (być może) bardziej szlifował te pliki. Na razie mój kurs programowania w PHP i obsługi baz danych uważam za zakończony.

Tu zamieszczam listingi tych plików - dane dostępu do baz danych zostały zmienione
 

A na razie niech działa nasz ulubiony ciąg dalszy...

<<<<< poprzedni wpis



Brak komentarzy:

Prześlij komentarz