Nie do końca Amatorska Stacja Meteorologiczna – Część 3

Nie do końca Amatorska Stacja Meteorologiczna – Część 3

Zajmijmy się wysyłaniem danych do bazy mysql. W przypadku mojej stacji meteo wykorzystuję połączenie WIFI ale tak naprawdę łączność z „internetem” można zrealizować na setki sposobów. Można dokonać połączenia przewodowego np za pośrednictwem układu ENC28J60 jak i bezprzewodowego WIZFI jak i innych modułów gdyż na rynku jest ich całkiem sporo.
Ja lubię WIFI 232-T ATNEL ze względu na porządne wsparcie jak i sporą ilość poradników a do tego wystarczą dwa piny mikrokontrolera TX oraz RX. Moduł ten działa po usart.
Gorąco polecam poradniki Mirosława Kardasia w których jest pełno wiedzy dotyczącej właśnie tego układu zawartej w ponad 20 godzinnych klipach wideo. To właśnie dzięki tym poradnikom a dokładnie poradnikom zatytułowanym
WIFI – CLIENT – WWW/PHP – Part 01
WIFI – CLIENT – WWW/PHP – Part 02
WIFI – CLIENT – WWW/PHP – Part 03
WIFI – CLIENT – WWW/PHP – Part 04
WIFI – CLIENT – WWW/PHP – Part 05
udało mi się bez problemu zrealizować komunikację pomiędzy mikrokontrolerem a światem.

meteo-wifi-pcb
Na płytce stacji meteo znajduje się również przycisk WPS, dzięki któremu nie musimy łączyć się z modułem ani go konfigurować. Wystarczy nawiązać połączenie z routerem za pomocą jednego przycisku umieszczonego na płytce PCB. Trzeba jednaj pamiętać o tym, że WIFI 212-T pracuje na napięciu 3,3V dlatego też wymagana jest konwersja napięć dla stanów logicznych za które odpowiadają tranzystory N-MOSFET BSS138 ich oznaczenie na powyższej płytce to T1, T2 widać tutaj również fragment konwersji napięć dla magistrali I2C Q2 oraz znajdujące się blisko rezystory. Po prawej stronie modułu WIFI znajdują się ledy smt z opisami CON oraz RDY są to ledy dzięki którym możemy sprawdzić czy moduł wifi jest gotowy oraz czy nastąpiło połączenie z Routerem. Na samym dole znajdują się piny dzięki którym zamiast lutować moduł i poboczne elementy możemy wpiąć gotowy moduł np ATNEL AIR.

Program który został napisany w języku C odczytuje wszystkie czujniki stacji meteo i wysyła je do bazy danych mysql. Jak to się odbywa ? Zasadniczo po oglądnięciu powyższych poradników nie powinno być z tym problemu gdyż wysyłamy zapytanie do strony www podając parametry czujników np:  http://web.avrtech.pl/wyswietl.php?temperatura=201&wilgotnosc=553&pozostale_czujniki. Cały zapis do bazy danych realizowany jest po stronie serwera. Zastanawiacie się pewnie co to jest za temperatura 201 jak i wilgotność 553. Z racji tego, że działanie na liczbach zmiennoprzecinkowych po stronie mikrokontrolera znacząco zajmuje jego pamięć to postanowiłem działać na liczbach całkowitych a dopiero po stronie serwera php przesuwać przecinek o jedno miejsce w lewo. Jak tego dokonać? w bardzo prosty sposób liczbę całkowitą dzielimy przez 10 więc dla temperatury 201 / 10 = 20.1 a dla wilgotności 553 / 10 = 55.3 w ten oto sposób na stronie stacji meteo w Grudziądzu czy też w Mełnie wyświetlane są wyniki zmiennoprzecinkowe. Po każdym wysłaniu danych stacja otrzymuje odpowiedź OK lub ERROR oraz aktualną datę i czas.
Jeżeli otrzymała odpowiedź OK to kończy ponową próbę wysłania danych jeżeli otrzymała odpowiedź ERROR próbuje wysłać dane ponownie.

Wysyłanie danych do bazy mysql to najzwyklejsze otwarcie (odpytanie)  strony www z poziomu Atnel Wifi z dodatkowymi parametrami. Strona do której się odwołamy na początek powinna wyświetlić nam wszystkie otrzymane informacje. Na potrzeby wpisu przygotowałem specjalną stronę: http://web.avrtech.pl/wyswietl.php?TOKEN=452268175&P1=1&P2=2&P3=3&P4=4 po kliknięciu w link powinniśmy zobaczyć stronę www z jakimiś danymi. Jak już pewnie zauważyliście wyświetlamy na stronie 4 parametry a w linku gdzie otwieramy stronę jest jeszcze taki parametr o nazwie TOKEN a zanim jakieś cyferki. Został on użyty jako takie mikro zabezpieczenie dzięki, któremu jak ktoś natrafi na plik który zapisuje dane meteo do bazy mysql to bez znajomości TOKENU nie wpisze danych do bazy za pomocą www. W ten sposób masz pewność, że dane znajdujące się w bazie pochodzą z twojej stacji meteo i nie zostały zmanipulowane.

Aby rozpocząć jakikolwiek zapis danych do bazy będzie potrzebny szkielet dosłownie taki prosty szkielet sprawdzający czy w linku występują jakieś parametry.

W bardzo uproszczonym szkielecie, który znajduje się powyżej opiszę tylko fragment który znajduje się w znacznikach <?php ?> po podstawy html jak i php odsyłam niestety do książek. Może kiedyś znajdę czas aby zająć się podstawą podstaw w językach html oraz php, nie mniej na chwilę obecną nie widzę sensu gdyż w internecie znajdziecie bardzo dużą ilość darmowych poradników.

Zajmijmy się linią 12 w której sprawdzamy czy został podany parametr TOKEN, jeżeli nie został podany wykonywanie scryptu przechodzi do linii 42 i wyświetli nam informację:
#ERROR=2016-09-11 15:06:17 0-1-1#
Nie podano tokenu.
Jeżeli podaliśmy parametr TOKEN ale jest on błędny scrypt przejdzie do linii 36 i poinformuje nas, że podany token jest błędny podając również w pierwszej linii ERROR i aktualną datę wraz z czasem.
Załóżmy, że podaliśmy prawidłową wartość w parametrze TOKEN ale nie podaliśmy żadnego parametru, w tym wypadku otrzymamy informację, że nie podano wymaganych parametrów.

Scrypt ten można dowolnie rozwinąć o własne pomysły sprawdzenia np gdy zapomnimy o 1 z parametrów, w moim przypadku w linii 18 użyłem operatora || który oznacza OR dlatego też wystarczy podać tylko 1 prawidłowy parametr np http://web.avrtech.pl/wyswietl.php?TOKEN=452268175&P3=3 i w zasadzie to już wystarczy aby wpisać tylko wartość P3 a pozostałe parametry 1,2,4 będą puste więc nasza strona będzie wyglądała w sposób następujący:
Parametr1:
Parametr2:
Parametr3: 3
Parametr4:

Na tym etapie pozostaje nam tylko rozpocząć wpisywanie danych do bazy mysql. Nie wiem czy jest sens rozpisywania się na temat stworzenia bazy danych, połączenia z nią jak i zapisywania do niej danych oraz odczytu po szczegóły odsyłam do google. Uważam, że jeżeli przeczytałeś ten artykuł i do swojego projektu wykorzystasz ATNEL WIFI 232-T dodatkowo oglądniesz poradniki Mirosława Kardasia dotyczące tego właśnie modułu to wystarczająco nakreśliłem temat dotyczący przekazywania danych z tego też modułu do strony www. A sam smaczek zostawiam dla was a dokładnie zapis do bazy mysql. Podpowiem tylko, że połączenie z bazą mysql dokonujemy w bardzo prosty sposób. Wystarczy tak naprawdę kilka linijek:

Jeżeli na etapie pierwszego połączenia z bazą otrzymamy komunikat, że nie udało się połączyć z bazą danych oznacza to, że nie masz na swoim serwerze bazy mysql, nie utworzyłeś użytkownika, podałeś błędne hasło lub złą nazwę bazy. Może się okazać, że baza danych znajduje się na innym serwerze wtedy zamiast localhost podaj adres Twojej bazy danych. Możesz również otrzymać komunikat, że nie udało się wybrać bazy danych oznacza to, że prawidłowo łączysz się z bazą danych ale masz podaną złą nazwę bazy lub wcale jej nie utworzyłeś.

Zapis podanych parametrów do bazy mysql to jedna linijka kodu:

Tak naprawdę również i tę linię możemy rozwinąć, możemy sprawdzić czy takie wartości parametrów w bazie istnieją, jeżeli istnieją to możemy podmienić dany wpis w bazie lub go pominąć. Ja na etapie tego poradnika ograniczam się tylko do podstawy podstaw. Pamiętaj, że do zapisywanych danych do bazy można również wpisywać dane, które zostaną automatycznie odczytane przez serwer strony www takie jak nazwa przeglądarki, adres ip itp, możemy również do każdego wyniku dodawać datę jak i czas.

Ostatecznie szablon strony w php może wyglądać w następujący sposób:

Jak sam zauważyłeś wpisujemy otrzymane wartości parametrów do bazy danych mysql, jeżeli nie uda nam się z jakiegoś powodu dodać danych do bazy otrzymamy informacje.

Dodatkowo na stronie przygotowanej na potrzeby tego poradnika ja zapisuję czas i datę w którym został dokonany wpis jak i adres IP dlatego też przestrzegam:
Wszelkie wpisane wulgaryzmy, treści na tle rasistowskim oraz treści nie zgodne z etyką będą zawierały również datę, czas, oraz adres IP. Jeżeli taki treści się pojawią będę zmuszony przekazać zapisane dane do odpowiednich organów państwa Polskiego.

Mam nadzieję, że mój wpis pomoże Ci w zbudowaniu swojej prostej strony zapisującej dane do bazy mysql. Jeżeli będziesz chciał robić więcej operacji sprawdzenia treści, wpisów do bazy itp to bez problemu poradzisz sobie z tym zagadnieniem za pomocą poradników przeznaczonych do nauki html czy też php, w sieci jest również wiele poradników dotyczących mysql. Ja swoim wpisem chciałem nakreślić tok działania aby łatwiej było wam wystartować w tym temacie.

Informacje o: majeś

POLECANE POSTY

Komentarze:

  1. Hey, kawał dobrej roboty! mała prośba – już 2 lub 3 raz zaglądam do tej części z php i mysql, miałbym małą prośbę, która ułatwiłaby czytelnikom powrót tu – przy nazwie artykułu odnośnie stacji dodałbyś 2,3 słowa o czym on jest? Np w tej części dopisać MySQL i PHP?

     

    Pozdrawiam

    1. Hej dzięki za pomysł w zasadzie też już o tym myślałem dlatego nowe posty są inaczej oznaczane i nazywane. Tutaj przy meteo faktycznie będę musiał przysiąść i dokonać stosownych zmian.

  2. Gratuluje ciekawego projektu :-) bardzo fajnie wyszlo! super dopracowany intrfejs!

    Jak wyglada sprawa stabilnosci modulu Atnel WiFi? nie wiesza sie?

  3. Swietny blog. Super ze natknalem sie na te strone. Doceniam wysilek wlozony w tworzenie bloga i czekam na nowe posty. Pozdrawiam!

  4. Witam.

    Piszesz, że pomiary są zapisywane w bazie danych MYSQL na serwerze. Dopisujesz je do bazy, czy w pewnym momencie, załóżmy po roku, zostaną one nadpisywane? Czy tworzysz archiwum warunków atmosferycznych?

    1. Hejka.
      Na początku napiszę – cieszę się, że ktoś czyta moje wpisy.
      Dane do bazy dopisuję i ich nie kasuję w wolnej chwili przygotuję podstronę archiwalnych wyników gdzie będzie można wybrać datę … jakoś do tej pory nie mogę znaleźć czasu ale trzeba będzie się zmobilizować :)

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *