Tysiąc mil dalej

Włączanie i wyłączanie światła w domu z dowolnego komputera podłączonego do Internetu? Brzmi to interesująco, ale kojarzy się z zaawansowaną technologią, specjalistycznym sprzętem i odpowiednim oprogramowaniem. Przeciętny użytkownik peceta uzna najprawdopodobniej, że nie stać go na taki system, a zbudować coś podobnego jest zbyt trudno. Pierwsze twierdzenie w odniesieniu do urządzeń profesjonalnych jest zupełnie słuszne, ale z drugą opinią można już podyskutować.

Proponuję skonstruowanie układu, który pozwoli sterować na odległość sprzętem domowym. Polecenia włączenia światła w mieszkaniu, uruchomienia grzałki w akwarium itp. wydamy za pośrednictwem Internetu. Koszty będą symboliczne. Nakład własnej pracy okaże się nieco większy – ale przy okazji zapoznamy się z działaniem skryptów PHP. Nasz system sterowania zbudujemy z trzech elementów: skryptu zapisującego komendy na specjalnej stronie WWW, działającego na domowym pececie programu, który odbierze rozkazy, i interfejsu zarządzającego sprzętem.

Zbieramy klocki

Komputer z dostępem do Internetu znajdzie się zapewne u większości osób czytających niniejszy tekst. Gorzej przedstawia się sprawa interfejsu: trzeba go zbudować.

Schemat urządzenia przedstawia rysunek na $(LC88086: Tysiąc mil dalej)$. Całość składa się z dwóch układów scalonych i elektronicznej “drobnicy”. Układzik odbiera z portu szeregowego peceta odpowiednio przygotowane komendy. Służą one do sterowania ośmioma przekaźnikami, które podają bądź odcinają zasilanie innych urządzeń. O konstrukcji interfejsu i zasadach jego działania można przeczytać w artykule “Śpij spokojnie, pecet czuwa” ($(LC18145:Śpij spokojnie, pecet czuwa)$). Wykorzystamy układ identyczny z tam opisanym – tyle tylko, że zmienimy oprogramowanie.

Byle z PHP

Teraz założymy konto na darmowym serwerze WWW. Upewnijmy się, że na stronie będzie dostępna choćby podstawowa obsługa skryptów PHP. Przygotujmy w Notatniku plik o następującej zawartości:


<?php echo("PHP działa OK");?>

Zapisujemy zbiór jako test.php. Łączymy się z naszą stroną internetową i przenosimy plik na serwer. Uruchamiamy przeglądarkę WWW i w polu adresu wpisujemy:

http://www.adres_serwera/test.php

Jeśli w okienku przeglądarki internetowej ujrzymy napis “PHP działa OK”, to nasza strona WWW spełnia stawiane jej wymogi.

Najpierw odczyt

Pora przystąpić do napisania pierwszego skryptu PHP. Właściwie to będzie on już drugi – bo pierwszy został napisany i przetestowany. Tak, tak – plik test.php to prawdziwy skrypt. Znajduje się w nim znacznik początku kodu (<?php), wywołanie funkcji (echo) i parametr (tekst PHP działa OK). Pojawiły się też: średnik na końcu instrukcji i znacznik końca kodu (?>). Oto skrypt w całej okazałości. Nie szkodzi, że skromny – zaraz go udoskonalimy. Najpierw jednak musimy przygotować bazę danych. Będziemy w niej przechowywać informacje o tym, które domowe urządzenie powinno być włączone.

Wystarczy nam plik tekstowy, w którym umieścimy osiem znaków. Dlaczego osiem? Bo tyle jest wyjść naszego interfejsu. Ponieważ każde z nich może przyjąć dwa stany, znakami opisującymi je będą: 0 (wyłączone) oraz 1 (włączone). Otwieramy Notatnik, “wklepujemy” osiem zer i zapisujemy zbiór pod nazwą rozkaz.txt. Przenosimy plik na serwer WWW i ustawiamy prawa dostępu do zbioru: pozwalamy na jego swobodny zapis i odczyt.

Musimy jakoś sprawdzać i modyfikować zawartość bazy. Wracamy do skryptu PHP. Umieszczamy w nim następujące linie:


$plik = fopen("rozkaz.txt", "r");
flock($plik, 1);
$odczytane = fread($plik, 8);
flock($plik, 3);
fclose($plik);

Funkcja fopen() otworzy nam plik rozkaz.txt w trybie “tylko do odczytu” (parametr r) i do zmiennej $plik zapisze wskaźnik do zbioru. Otwarty plik należy natychmiast zablokować, flock(), aby ktoś inny nie dokonywał w nim zmian w tym samym czasie co my. Teraz sprawdzamy zawartość pliku, wywołując funkcję fread(). Czytamy tylko osiem bajtów (parametr 8) i zapisujemy je jako zmienną $odczytane. Zdejmujemy blokadę z pliku i zamykamy go funkcją fclose().

Włącz-wyłącz

Ponieważ chcemy dokonywać operacji załączania i wyłączania przekaźników, musimy zmienić liczby opisujące ich stan. Powiedzmy, że zamierzamy uruchomić wyjście numer cztery. Ciąg cyfr zapisanych w pliku rozkaz.txt powinien więc zmienić się z 00000000 na 00010000.

W zrealizowaniu tego zadania pomoże nam funkcja substr(), pozwalająca wycinać z łańcucha tekstowego określone fragmenty. Do skryptu dopiszmy linię:


$do_zapisu = substr($odczytane, 0, 3) . "1" . substr($odczytane, 4);

Do zmiennej $do_zapisu trafią pierwsze trzy znaki ze zmiennej $odczytane. Następnie dodana zostanie “jedynka”, a później znowu znaki ze zmiennej $odczytane – od czwartego do końca. Taki ciąg zapisujemy ponownie do pliku:


$plik = fopen("rozkaz.txt", "w");
flock($plik, 2);
fwrite($plik, $do_zapisu, 8);
flock($plik, 3);
fclose($plik);

Podczas operacji zapisu plik otwieramy w trybie do zapisu (parametr w), dane do niego wprowadzamy zaś, korzystając z funkcji fwrite().

Więcej:bezcatnews