Arduino – Własny internetowy termometr za pomocą Xively

Arduino – Własny internetowy termometr za pomocą Xively

Zapewne widzieliście już poradnik Jakuba Furmana o własnym internetowym termometrze. Do jego wykonania potrzebowaliśmy jednak mieć nieco wiedzy o bazach danych, cron tabie i tym podobnych. Dla przeciętnego człowieka – nie geeka, było to dość ciężkie do zrozumienia i zastosowania. Na szczęście można to zrobić to łatwiej za pomocą strony Xively.com (dawny Pachube). Umożliwia ona wstawianie pewnych wartości, a następnie za pomocą żądania HTTP odczytanie ich.

Zastosowanie Xively ma pewne zalety np.:

– odczyty będzie można zobaczyć z każdego miejsca, nie dotyczy nas wtedy ograniczenie przez niepubliczny adres IP i zakładanie serwera w sieci lokalnej,

– umożliwia automatyczne tworzenie prawie dowolnie konfigurowalnych wykresów,

Opublikuj swój projekt i odbierz 50% rabatu do wykorzystania w sklepie Nettigo.pl

– jest bardzo prosty w obsłudze.

 

Koniec opowiadania, zabierzmy się do pracy.

Potrzebne elementy:

Arduino,

– Ethernet Shield,

– cyfrowy czujnik temperatury, w tym przypadku DS18B20,

– rezystor 4,7 KΩ

– płytka stykowa + kabelki.

 

Schemat podłączenia, choć prosty, dla formalności podaje obrazek z Fritzinga. Należy pamiętać, że rezystor umieszczony poniżej powinien mieć wartość 4,7 KΩ.

 

schemat2

 

Powinniśmy także założyć konto na stronie Xively.com i stworzyć projekt:

tworzenie

 

Po założeniu należy znaleźć odpowiednie numery, kody i nazwy:

tworzenie2

 

Teraz możemy przejść do pisania programu. Jako podstawę użyłem ćwiczenie z podstawowej biblioteki Ethernet Shield – Pachube Client.

 

Jako, że niestety przy tej bibliotece i czujniku pierwszy odczyt jest zazwyczaj niepoprawny, w moim przypadku to 85 st. C lub -127 st.C, w tym miejscu:

możemy dodać kolejny warunek i w przypadku odczytu np. wartości wyższej niż 35 st. C żądać ponownego odczytania temperatury.

 

Po uzupełnieniu wedle uznania kodu, możemy wgrać go na Arduino, a jeżeli wszystko poprawnie podłączyłeś i wpisałeś, powinna się pojawić taka odpowiedź w monitorze portu COM:

Możemy teraz na stronie projektu podglądać temperaturę. Ale co jeżeli chcemy ją wyświetlić na własnej stronie? Z pomocą przychodzi nam PHP i żądanie HTTP metodą GET. Przedstawię tu jak przedstawić odebrane wartości.

Najpierw szukamy na stronie projektu czegoś takiego jak API Endpoint i kopiujemy go.

Następnie tworzymy plik *.php. Uwaga: Aby móc wyświetlić stronę php, nie wystarcza zwykła przeglądarka jak w przypadku html, ale serwer. Można zrobić sobie domowy w programie Xammp lub wykupić jakiś tani hosting.

Do pliku wpisujemy to:

 

Jak widać w tym przypadku żądanie wykonałem za pomocą file_get_contents, a odkodowanie za pomocą json_decode, oczywiście metod jest mnóstwo, ja przedstawiłem jedną z łatwiejszych.

Dodatkowo, jak na wstępie wspomniałem, Xively daje nam do dyspozycji generowanie wykresów jak to zrobić? Z pomocą przychodzi tutaj strona z dokumentacji: https://xively.com/dev/docs/api/data/read/single_datastream/.

Wykres zwyczajnie wklejamy za pomocą <img src=”url”>.

Efekt można zobaczyć na mojej stronie: serwer.xaa.pl/temp.php graf jest nieco dziwny, gdyż dawno akurat w tym projekcie nie wysyłałem danych.

Dziękuję za uwagę i mam nadzieję, że dzięki temu poradnikowi uda Wam się stworzyć własny, internetowy termometr. W razie pytań proszę pisać je w komentarzach, postaram się odpowiedzieć na każde z nich.

Ocena: 3.95/5 (głosów: 59)
Nettigo - patron działu Elektronika

Podobne posty

Regulator PID na arduino.

Regulator PID na arduino.

Witam wszystkich majsterkowiczów! Chciałbym przedstawić wam moje nagranie dotyczące realizacji regulatora PID przy użyciu arduino.Regulatory…

13 komentarzy do “Arduino – Własny internetowy termometr za pomocą Xively

  • Dobry projekt. Do wizualizacji danych wystarczy przeglądarka. Dane pobrać AJAXem i sformatować w JavaScript. Wykresy rysować w Canvas HTML5.

    Odpowiedz
  • Czy koniecznie musi być rezystor 4.7KΩ? Gdzieś czytałem, że może być w przedziale od 4.7-10KΩ, i sam mam do DS18B20 podpięte 10KΩ i działa dobrze.

    Odpowiedz
  • Ja zrobiłem taki projekt z użyciem Node na Linuxie i po stronie serwera. Napisałem taki prosty analizator z użyciem biblioteki SerialPort

    [code]

    var serialport = require(„serialport”);

    var SerialPort = serialport.SerialPort;

    http = require(„http”);

    var port = new SerialPort(„/dev/ttyUSB0”, {

    baudrate: 9600,

    parser : serialport.parsers.readline („n”)

    });

    port.on („data”, function (d) {var odpowiedz = „Odpowiedz z serwera z res.send: „;

    http.get(„http://*.pl/?temperatura=”+d, function(res){

    console.log („n Temperatura odczytana z Arduino: „+d);

    console.log(„Kod odpowiedzi serwera: „+res.statusCode);

    res.on („data”, function(kawalek){odpowiedz += kawalek;});

    res.on („end”, function(){console.log(odpowiedz);});

    });

    });

    [/code]

    Ścieżka będąca pierwszym elementem konstruktora zostaje wcześniej odczytana z komunikatu bufora warstwy jądra z polecenia dmesg.

    Po stronie serwera użyłem Nodowego Expressa i napisałem taką trasę:

    [code]

    app.get(‚/’, function(req, res) {

    if (req.url == „/” && t===undefined) {

    res.render („brakdanych”);

    }

    else if (req.url == „/” && (t || t==0)) {

    res.render(„termometr”,{temperatura : t});

    }

    else {

    t = req.query.temperatura;

    res.send („Hej klient-parser, to ja serwer, wysylam ci odpowiedz: „+t);

    }

    });

    [/code]
    (to jest kluczowa część skryptu)
    Jak widać w trasie wykorzystywane są dwa pliki Jade , brakdanych oraz termometr.

    Termometr w Jade wygląda następująco:

    [code]

    doctype html

    html

    head

    title Wizualizacja

    script(src=”javascripts/termometrCanvas.js”)

    link(rel=”stylesheet”, href=”stylesheets/styl.css”)

    body

    canvas#plotno

    p#nie #{temperatura}

    [/code]

    i po wyrenderowaniu strony uruchamia napisany przezemnie z użyciem Canvas API kod w JavaScripcie wizualizujący dane w postaci termometru.
    Paragrafu p o identyfikatorze #nie(wyswietlaj) uzyłem do przekaźnika temperatury t z server.js do pliku w JavaScripcie, nie miałem lepszej koncepcji jak to zrobić.
    Przepraszam jeśli coś się tu źle sformatowało, wiadomo, że Jade wymaga bardzo rygorystycznego podejścia do formatowania.
    Polecam Kolegom Majsterkowiczom spróbować Node i Arduino, miłego dnia.

    Odpowiedz
  • U mnie jest chyba coś nie halo z tym odwołaniem w pliku PHP do strony Xively.
    Na stronie na moim serwerze wyskakuje warning o nieautoryzowanym dostępie.
    Czy ten API Endpoint to ma być wklejony w linii 11 ?
    Jak przesłać tam login i hasło?

    Odpowiedz
  • Możliwe, kwestia lekkiego zmodyfikowania kodu. We wszystkie pola jak API_KEY, FEED ID, login, password należy wpisać własne dane

    Odpowiedz
  • Witam czy zna ktoś jakiś dobry tutorial o wysyłaniu tego typu zapytań/poleceń przez arduino. Zaprezentowanu tu kod odpalił się bez najmniejszych problemów na module enc28j60, natomiast próbuję zrobić coś podobnego, ale dla serwera domoticz i nie chce działać. Korzystam, z przykładu dla ethernet shielda, i działa, natomiast po wpisaniu wartości dla domoticz’a mam błąd 400 i koniec.

    Odpowiedz

Odpowiedz

anuluj

Arduino - Własny internetowy termometr za pomocą Xively

Nie przegap nowych projektów!

Zapisując się na nasz Newsletter będziesz miał pewność, że nie przegapisz żadnego nowego projektu opublikowanego w Majsterkowie!

Od teraz nie przegapisz żadnego projektu!

Masz uwagi?