Mianowicie jakiś czas temu zbudowałem prosty czujnik, którzy mierzy temperaturę, ciśnienie atmosferyczne, wilgotność powietrza oraz jonizujące promieniowanie tła. Całość opiera się na mikrokontrolerze Atmega328 oraz sterowniku Ethernetu ENC28J60. Do komunikacji ze światem wykorzystywane są pakiety UDP - urządzenie odsyła odpowiednią wartość po otrzymaniu określonego requesta.
Teraz chciałem zrobić prosty interfejs www wykorzystując w tym celu lighttpd, odpalony na Raspberry Pi. Poczytałem trochę o stosowaniu socketów sieciowych w PHP i w ciągu paru chwil powstał taki kod:
<?php $serverip = "192.168.1.85"; $serverport = 56345; $message = "AT+CPM"; if ($socket = socket_create(AF_INET, SOCK_DGRAM, 0)) { } else { } if ($rc < 0) { } else { } socket_recvfrom($socket, &$reply, 200, MSG_WAITALL, $serverip, $serverport) == FALSE) { } else { } socket_close($socket); ?>
Oczywiście nie jest to ostateczna wersja - chciałem jedynie przetestować komunikację. Niestety coś jest nie tak, a ja nie potrafię znaleźć przyczyny, chociaż siedzę nad tym od wczoraj. Po załadowaniu strony w przeglądarce wyświetla się pusta strona. Najwyraźniej jednak jakaś komunikacja występuje, ponieważ ciągłe odświeżanie strony powoduje miganie diody połączenia na czujce. Zacząłem kombinować i okazało się, że po zakomentowaniu części z poleceniem socket_recvfrom() wszystkie wcześniejsze komunikaty się wyświetlają - przeładowanie strony daje następujący wynik:
Cytat
zaczynamy
Socket utworzony
Komenda AT+CPM została wysłana z powodzeniem
Socket utworzony
Komenda AT+CPM została wysłana z powodzeniem
Co może być przyczyną takiego dziwnego zachowania?