Wpis z mikrobloga

Mam Arduino Uno zaprogramowane jako Web Client gdzie pobiera z termometru temperaturę i przekazuje ją do pliku add.php, który następnie łączy się z baza danych w MySql, a następnie wszystko wyświetlane jest na stronie.

Działać wszystko działa bardzo dobrze, jednak dzieje się to wszystko na wirtualnym serwerze i teraz pytanie:
Czy jest możliwość, aby z poziomu arduino wysyłać zapytanie do pliku php który jest umieszczony na zewnętrznym serwerze FTP np. cba.pl?
Bo z pozycji web client'a jedyna informacja do połączenia to ip serwera, a ftp ma jeszcze login i hasło.

#arduino
  • 8
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Nihomme: Jak najbardziej możesz z Arduino wysłać coś na FTP - implementacja tego protokołu jest naprawdę prosta (szkoda nawet czasu na szukanie gotowych bibliotek).
Jednakże z poziomu FTP nie wywołasz skryptu PHP, a jedynie zapiszesz dane. Teoretycznie możesz więc wrzucać dane do pliku, a skrypt PHP mieć odpalany co jakiś czas z crona. Wtedy skrypt pobiera dane z pliku, przetwarza i go czyści.
  • Odpowiedz
@conel: Właśnie nie wiem czy mój sposób myślenia jak to zrobić jest poprawny:
Przykładowo - na cba.pl mam hosting i konto ftp, na którym mam pliki index.php, connect.php i add.php.
- Arduino zbiera pomiary z termometru i przy pomocy metody GET przekazuje temperaturę do pliku add.php, który wysyła pobraną wartość do bazy danych

if (client.connect(server , 80)) { // REPLACE WITH YOUR SERVER ADDRESS
  • Odpowiedz
@Nihomme: No i dobrze robisz, ale coś po prostu nie gra.
Najprostsza sprawa. Arduino ma dostęp do internetu, czy tylko do tego lokalnego serwera? Spróbuj wejść Arduino na jakąkolwiek stronę i wyświetlić pobrane dane na Serial.

Kolejna rzecz. Jaką konkretnie wartość ma zmienna "newtemp" w momencie wysłania? Rozumiem, że wartość jest poprzedzona nazwą zmiennej (np. "temperatura=123"), a nie przesyłasz samej wartości.
  • Odpowiedz
@Nihomme: Teraz zauważyłem to Twoje żądanie i jest tutaj parę błędów.
1) Nie wysyłasz instrukcji "host". Jest to informacja do serwera do jakiej strony (Virtual Hosta) ma się odwołać. Jest to wymagane z tego powodu, że na jednym IP (a tutaj mamy hosting współdzielony) możesz mieć więcej niż jedną stronę (jak to na serwerze lokalnym) i serwer musi wiedzieć do jakiego VH ma wysłać żądanie. Nie podasz tego, to serwer wyśle je do domyślnego VH, czyli w tym wypadku zapewne strony głównej cba.pl.
2) Dane w GET należy wsadzić w zmienną i podesłać w URI dokumentu - nie wiem czy tak jest u Ciebie, bo wartości zmiennej nie podałeś.
3) Po przesłaniu wszystkich instrukcji (a przed body dokumentu, jeżeli w ogóle występuje) powinna zostać wysłana pusta linia.

Przykładowe żądanie powinno wyglądać tak (na końcu tego powinna być pusta linia, czyli dodatkowa
  • Odpowiedz
@conel: Przepraszam, nie wysłałem po prostu całego kodu

if (client.connect(server , 80)) {
Serial.println("connected");
client.print("GET
  • Odpowiedz
@Nihomme: No i w takim wypadku to żądanie powinno działać na hostingu. Jeśli nie działa, to dodaj sobie linię:
file_put_contents('dump.txt', printr($GET, 1));
i utwórz plik "dump.txt" z CHMOD 777 i dopiero wtedy próbuj (będzie wiadome czy do skryptu w ogóle coś dochodzi).

Odnośnie FTP. FTP działa w inny sposób. W HTTP jest tak, że najpierw wywalasz cały set instrukcji jakie ma wykonać serwer, a dopiero później on daje Ci odpowiedź. U FTP wygląda to bardziej jak... rozmowa, stąd jego implementacja jest trudniejsza (ale wciąż nie jest tak źle).
Sprawdź to - znajdziesz tam
  • Odpowiedz