Dlaczego PHP i VIRTUINO już wspominałem - jest to konieczność umieszczenia jakiś informacji na stronie WWW, wysyłanych przez ESP schowany za ruterem w wewnętrznej domowej sieci. A bez choćby minimalnej znajomości kodowania PHP to się nie uda. Jednak cały mój kurs nauki postaram się ograniczyć do kilku elementów związanych z odbiorem informacji z mikrokontrolera i ich prezentacją na stronie WWW.
A wszystko to z pomocą PHP właśnie.
Po przestudiowaniu podstawowego kursu o PHP trochę odetchnąłem z ulgą. Na szczęście cały ten PHP to nieco udziwniony ale stary dobry znajomy (choćby z ARDUINO IDE ) C/C++. Zmienne, funkcje, operatory itd itd to kalka niemalże 1:1 ze znanego już nieco języka. Jeśli ktoś chce pójść dalej w obszary zajęte przez obiekty, klasy konstruktory to również nie będzie miał z tym problemu znając C. Ale bądźmy szczerzy - do podstawowego oprogramowania mikrokontrolera nie jest to w ogóle potrzebne więc pewnie i do prostych kodów PHP nie trzeba się tego uczyć. W końcu człek jest elektronikiem z podstawową (powiedzmy nawet z bardzo podstawową) umiejętnością programowania a nie programistą w językach wyższego rzędu z pobieżną znajomością materialnej elektroniki.
Kilka wiadomości nowych (dla mnie) aczkolwiek podstawowych
- jeśli chcemy zastosować w pliku choćby fragment kodu PHP plik musi mieć rozszerzenie .php
- o ile plik .html otwiera się w naszej przeglądarce z dowolnego miejsca (np. z pulpitu komputera) to plik .php musi być umieszczony na serwerze WWW i z niego wywoływany przeglądarką
- żeby coś wydrukować na naszej stronie w ramach kodu PHP stosujemy funkcję echo zaś zawartość do wydrukowania umieszczamy między ' ' lub " " (co kiedy - do przeczytania w kursie :) ). Inna funkcja to printf() działa jak C/C++
- nazwy zmiennych poprzedza znak $ ($nazwa_zmiennej) a typ zmiennej dowiązywany jest automatycznie (choć może być określony jawnie jak w C)
- wprowadzenie jakiś danych przez użytkownika wymaga zastosowania formularza HTML (więcej tu) zaś wprowadzone dane jako zmienne muszą trafić na serwer WWW do odpowiedniego pliku .php gdzie zostaną jakoś przetworzone a następnie jakoś wyświetlone
- jeśli ESP będzie umiał wysłać na serwer WWW informację podobną do tej z formularza strony WWW to odpowiedni plik .php na serwerze ją odbierze, przetworzy i wyświetli
- problemem do rozwiązania jest zapamiętanie danych na serwerze w czasie pomiędzy zapisaniem ich przez ESP a odczytem przez stronę użytkownika chcącego odczytać to co ESP wysłał
Moja domena to https://esp8266restapi.000webhostapp.com/ i tam umieszczam pliki do przetestowania.
Nauka wysyłania poprzez GET danych na serwer WWW.
Wsparłem się wiedzą ze tej strony
GET wysyła dane w sposób jawny w adresie zapytania wysyłanego do serwera czyli popularnego UR. Można te dane wpisać z ręki można je wysłać formularzem ze strony. Wysyłamy je do pliku .php który potrafi to odebrać i wyświetlić. Stworzyłem dwa pliki jeden .html z formularzem drugi .php z kodem odbioru i wyświetlania danych
Kod pliku dwa.php wygląda tak
<html>
<head>
<title>
Wyniki
</title>
</head>
<body>
Czujnik : <?php echo $_GET['czujnik']?><br>
Odczytana wartość <?php echo $_GET['wartosc']?><br>
</body>
</html>
Wywołanie samego pliku (tu link) zgłosi błąd gdyż nie wysyłamy do niego żadnych danych.
Można wywołać ten plik z paska adresu przeglądarki w postaci
https://esp8266restapi.000webhostapp.com/dwa.php?czujnik=temperatura&wartosc=23
Co jest nazwą zmiennej a co jej daną widać wprost. Można wysłać dane ze strony WWW zawierającej formularze. Adres strony testowej
https://esp8266restapi.000webhostapp.com/jeden.html
i kod HTML strony testowej jeden.html
<html>
<head>
<title>
Test formularza
</title>
</head>
<body>
<h2>To jest strona do testowania wysyłania danych ze strony</h2>
<h2>na serwer WWW metodą GET i ich wyświetlania na stronie</h2><br/><br/>
<form action="dwa.php" method="GET">
Czujnik: <input type=text name="czujnik" value="temperatura"/><br/>
Odczytana wartość <input type=text name="wartosc" value="123"/><br/>
<input type=submit value="Wyślij"/>
</form>
</body>
</html>
Jeśli więc będę umiał wysłać z klienta odpowiedni URL to sprawa wysłania i wyświetlenia danych z mojego ESP powinna być rozwiązana.
Nauka wysyłania poprzez POST danych na serwer WWW.
Tą razą wsparłem się wiedzą z tej strony
Wysyłanie poprzez POST odbywa się w sposób niejawny. Dane zawarte są w nagłówku strony. Toteż wysłanie ich metodą POST z przeglądarki wymaga użycia formularza.
Przykładowa strona z formularzem POST post_h.html ma kod
<form action="post_p.php" method ="POST" accept-charset="utf-8">
Rodzaj czujnika: <input name ="first_name" type="text" value="Wpisz coś">
<br /><br />
Wartość czujnika: <input name ="last_name" type="text">
<br /><br />
<p><input type="submit" value="Submit"></p>
</form>
<p><a href="post_p.php">TARGET</a></p>
i odbierający te dane plik post_p.php ma kod
<?php
if(isset($_POST['first_name']) && isset($_POST['last_name'])){
$fist_name = $_POST['first_name'];
$last_name = $_POST['last_name'];
echo "Odczytałem: >> $fist_name $last_name";
}
?>
<p><a href="post_h.html">POST_H</a></p>
Możemy też wysłać wygenerowane jakimś innym sposobem zapytanie na serwer. o takim formacie nagłówka, który będzie zawierał dane przekazywane do pliku .php
Ma to mieć postać podobną do tego
POST /test HTTP/1.1
Host: foo.example
Content-Type: application/x-www-form-urlencoded
Content-Length: 27
field1=value1&field2=value2
lub za pomocą JSON
POST /echo/post/json HTTP/1.1 Host: reqbin.com Content-Type: application/json Content-Length: 80 { "Id": 12345, "Customer": "John Smith", "Quantity": 1, "Price": 10.00 }
Co to oznacza jeszcze nie wiem ale niech nad tym się głowi nasz ulubiony ciąg dalszy.
Brak komentarzy:
Prześlij komentarz