W swoim już drugim wpisie na Majsterkowo chciałbym pokazać Wam jak zrobić za pomocą Arduino (oczywiście następnie mikroprocesora) Internetowy termometr. Taki projekt może być przydatny dla Was i Waszych znajomych, w szczególności w miastach które nie mają swoich własnych stacji pogodowych. Termometr wyświetli na żywo aktualny podgląd temperatury oraz pokaże wykres jej zmian.
Nie wszystkie z tych czynności będą realizowane przez układ, większość z nich wykona serwer PHP, gdyż lepiej się sprawdzi przy większych obciążeniach. Przykład działania można zobaczyć u mnie: podgląd temperatury & archiwum zmian temperatur & fanpage.
Potrzebne elementy
- Płytka stykowa 400
- LCD Kit 2×16 (możesz pominąć, jeśli nie chcesz widzieć podglądu fizycznie)
- 2x Czujnik temperatury DS18B20 (działa na złączu OneWire i jego dokładność to 0,5 stopnia, analogowy sensor jest łatwiejszy do zakodowania, jednak o wiele mniej dokładny)
- ATmega 328P-PU (w mniejszej nie zmieści się biblioteka OneWire wraz z biblioteką modułu Ethernet)
- Moduł Ethernet ENC28J60 (np. z eBaya)
- Rezystor 4,7k
- Kawałek skrętki UTP lub innego kabla, tak aby móc wystawić termometr za okno
- (opcjonalnie) 3 goldpiny aby łatwiej wtykać kabel w płytkę
Potrzebne biblioteki
Biblioteki należy umieścić w folderze libraries naszego Arduino IDE. Oczywiście umieszczamy je w folderach takich w jakich są, nie luzem.
UWAGA! Biblioteka ENC28J60 pokrywa się z funkcjami biblioteki Ethernet Shield, dlatego musimy ją najpierw usunąć z katalogu libraries!
Schemat podłączeń
Posiadamy już wszystkie potrzebne biblioteki oraz części, pora przejść do ich podłączenia. Zastosowałem 2 termometry gdyż docelowo mierzę temperaturę wewnętrzną oraz zewnętrzną. Oczywiście termometr mierzący temperaturę zewnętrzną nie jest wetknięty w płytkę, przylutowałem do niego 3 kabelki ze skrętki UTP i wystawiłem za okno. Po drugiej stronie kabla przylutowałem 3 goldpiny tak aby łatwiej móc podłączyć kabelek do płytki.
Moduł ENCJ28J60 którego użyłem podłączyłem do zasilania 5V. Uczyniłem to dlatego, że model jaki posiadam toleruje takie napięcie i upraszcza to dalszą część czyli przenoszenie kodu na ATmegę, jednak według dokumentacji moduł ten powinno zasilać się napięciem 3,3V!
Kod dla mikroprocesora
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
#include "etherShield.h" #include "ETHER_28J60.h" #include <LiquidCrystal.h> #include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS 2 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); LiquidCrystal lcd(3, 4, 5, 6, 7, 8); // piny pod jakimi jest wyświetlacz float temp=-100,temp2=-100; // wartość początkowa temperatur unsigned long lastTempRequest = 0; int delayInMillis = 0; static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24}; // ustawiamy MAC adres static uint8_t ip[4] = {192, 168, 1, 15}; // ustalamy adres IP pod jakim ma być dostępny program static uint16_t port = 80; ETHER_28J60 e; void setup() { lcd.begin(16, 2); lcd.print("(C) Kubofonista"); lcd.setCursor(0, 1); lcd.print("Ladowanie"); e.setup(mac, ip, port); sensors.begin(); sensors.setWaitForConversion(false); // ustawiamy aby sensory pobierały wartości w tle, nie zawieszając programu sensors.setResolution(12); // ustalamy rozdzielczość pomiaru sensors.requestTemperatures(); // wysyłamy pierwsze żądanie odczytu temperatur delayInMillis = 750 / (1 << (12 - 12)); // wpisujemy czas po jakim żądanie temperatury będzie gotowe do odczytu lastTempRequest = millis(); // ustalamy aktualny czas jako czas ostatniego żądania temperatur } void loop() { char* params; int et,et2; if (millis() - lastTempRequest >= delayInMillis) // czas jaki upłynął jest wystarczający aby wartości były gotowe { temp = sensors.getTempCByIndex(0); // pobranie wartości pierwszego termometru temp2 = sensors.getTempCByIndex(1); // pobranie wartości drugiego termometru // Poniżej wyświetlenie tych danych na wyświetlaczu // lcd.begin(16, 2); lcd.print("Out: "); lcd.print(temp); lcd.setCursor(0, 1); lcd.print("In: "); lcd.print(temp2); sensors.requestTemperatures(); // wysłanie kolejnego żądania temperatur delayInMillis = 750 / (1 << (12 - 12)); // wpisujemy czas po jakim żądanie temperatury będzie gotowe do odczytu lastTempRequest = millis(); // ustalamy aktualny czas jako czas ostatniego żądania temperatur } if (params = e.serviceRequest()) // obsługa połączenia przychodzącego { if(strcmp(params, "temp_out") == 0) { // żądanie typu http://192.168.1.15/temp_out et = temp*100; // wyświetlenie temperatury bez przecinków e.print(et); // wyplucie wyniku do klienta } else if(strcmp(params, "temp_in") == 0) { // żądanie typu http://192.168.1.15/temp_in et2 = temp2*100; // wyświetlenie temperatury bez przecinków e.print(et2); // wyplucie wyniku do klienta } e.respond(); // wysłanie odpowiedzi } } |
Wyjaśnienia może wymagać tutaj kwestia odliczania między wysłaniem żądania pobrania temperatur a odczytaniem ich wyników. Otóż normalnie program po wysłaniu żądania oczekiwał by na jego zakończenie i dopiero przeszedł dalej. Jest to działanie niepożądane gdyż blokowało by możliwości przyjmowania w tym czasie połączeń internetowych. W związku z tym czujniki zostały ustawione tak, aby temperatura pobierana była w tle. Nie zmienia to jednak faktu, że zanim temperatura będzie do odczytania musi upłynąć pewien okres czasu, jest on ściśle określony w dokumentacji. Wewnątrz pętli sprawdzam, czy czas już upłynął, jeśli tak to odczytuję temperatury i wysyłam nowe żądanie. Dzięki temu moduł ethernet jest w stanie działać cały czas i przyjmować połączenia nawet w trakcie oczekiwania na dane.
Po uruchomieniu programu na wyświetlaczu powinna ukazać się aktualna temperatura wewnętrzna oraz zewnętrzna, możemy teraz przejść dalej.
Kod dla serwera WWW
Z uwagi na to, że taki serwer WWW jaki został stworzony w powyższym kodzie nie był by w stanie realizować bardziej zaawansowanych funkcji dalszą część zrealizowałem na normalnym serwerze WWW z PHP oraz MySQL. Skrypt PHP nawiązuje połączenie z układem i pobiera z niego temperaturę. Zastosowałem taką metodę dlatego, że między serwerem WWW a domem mam stały tunel VPN. W pozostałych przypadkach prawdopodobnie potrzebne okaże się przekierowanie jednego z portów na routerze na IP naszego układu. Oczywiście można było to zbudować w drugą stronę, aby to układ łączył się z serwerem.
Struktura bazy danych
1 2 3 4 5 |
CREATE TABLE IF NOT EXISTS `tpr` ( `time` int(20) unsigned NOT NULL, `temp` float NOT NULL, PRIMARY KEY (`time`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; |
Pobieranie danych
Jak już wspominałem celem przeniesienia obsługi żądań na normalny serwer WWW było odciążenie układu z serwowania dużej ilości zapytań. W związku z tym nie miało by sensu aby każde zapytanie do strony z temperaturą odpytywało układ. Z tego powodu zdecydowałem się na napisanie pliku pobierającego dane do bazy i umieszczenie go w crontabie wykonywanym co 5 minut:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php error_reporting(0); mysql_connect('localhost','user','haslo'); mysql_select_db('baza'); $tpr = file_get_contents('http://10.3.1.2:8888/temp_out')/100; if(!$tpr) { die; } if($tpr == -100) { die; } $time = time(); mysql_query("INSERT INTO `tpr` SET `time` = '{$time}', `temp` = '{$tpr}'"); ?> |
W linii 6 temperatura mnożona wcześniej w układzie jest teraz dzielona tak aby otrzymać normalny wynik. Niestety bez takiego zabiegu nie udało się uzyskać temperatury z miejscami po przecinku. Linia 8 zabezpiecza nas przed pobraniem wartości zaraz po uruchomieniu układu, gdy jeszcze nie ma aktualnych danych o temperaturze.
Wyświetlanie danych
Do wyświetlania danych zastosowałem prosty skrypt PHP który następnie obsadziłem na blogu za pomocą iframki:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<?php error_reporting(0); mysql_connect('localhost','user','pass'); mysql_select_db('baza'); $last = mysql_query("SELECT * FROM `tpr` ORDER BY `time` DESC LIMIT 1"); $l = mysql_fetch_array($last); $temper = $l['temp']; $czas = $l['czas']; ?> <html> <head> <title>Temperatura ;-)</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW"> </head> <body> <center> <font style="font-size:150px; font-weight:bold"><?php echo $temper;?> °C</font> <h2>Dane z własnego sensora, czas: <?php echo $czas; ?></h2> </center> </body> |
Rysowanie wykresów
To najbardziej złożona część tego projektu. Wykresy są rysowane za pomocą JavaScript przez przeglądarkę po otrzymaniu odpowiednich danych przez PHP. Plik ten docelowo również został wstawiony jako iframka na blogu.
Z uwagi na to, że listing kodu od wykresów jest długi, zamiast wstawiać go tutaj przygotowałem paczkę która zawiera zarówno powyższe kody, jak i kod wykresów oraz niezbędne do jego działania biblioteki JavaScript: kliknij aby pobrać.
Finalizacja projektu
Jak to na koniec realizowania projektu przystało, pora teraz przenieść się z Arduino na czystą ATmegę, tak aby Arduino mieć do kolejnych zabaw. Programujemy mikroprocesor oraz zmieniamy podłączenia kabelków na następujące:
Na sam koniec
Internetowy termometr to tylko jedno z przykładowych zastosowań, można go np. przerobić aby był bezprzewodowy, lub też np. zrobić tak aby zapalać sobie światło w pokoju przez Internet (ja tak zrobiłem) – całkiem fajny efekt gdy można zapalić światło bez wstawania od komputera lub przez telefon (zostało to opisane we wpisie “Lampka zapalana przez Internet“) oraz wiele wiele innych. Jeżeli macie jakieś fajne pomysły – podzielcie się w komentarzach :)
dobry wpis, tylko jak obslugiwac te ramki z kodami bo jak sie wyswietli to zaslania tekst
Poprawione :)
teraz jest ok ;)
Fajny projekt. Sam chciałem taki zrobić i jestem w trakcie tylko zastój mi się zrobił :D Mam już prawie gotowy skrypt PHP + highcharts.com wyświetlający statystyki ale nie miałem czasu się za niego wziąć bo mam milion pomysłów na minutę :D Mam tą samą płytkę modułu ethernet kupioną na allegro i chodzą po ok. 30zł. co jest ceną dość przystępną w porównaniu z jakimiś dedykowanymi shieldami pod Arduino :D Może w niedługim czasie się za to zajmę i dodam własny poradnik ale to zobaczymy :) Jeśli nie to polecam zainetersowanie się skryptem highcharts.com bo jest naprawdę fajny i gdzieś znalazłem nawet kod wraz z php i mysql tylko już nie pamiętam gdzie ale mam go na dysku :D
Ja tak tylko skomentuję ten moduł – 30zł to mimo wszystko dużo, na eBayu za około 10zł i darmowa wysyłka :)
Nie ma czegoś takiego jak darmowa wysyłka, może być najwyżej wliczona w cenę. Za darmo to tylko w ryj można dostać.
MSPANC :)
Można by to nazwać wliczeniem w cenę ale gdyby wliczyć przesyłkę w cenę 1$ produktu (np. modułu kart SD), to gdzie jest w nim cena produktu? ;)
Przesyłki międzynarodowe są dotowane przez usługę pocztową odbiorcy. Zatem wysyłając przesyłki po Polsce subsydiujesz koszty transportu z Tajwanu :P
Jesteś pewny tej teorii? Dlaczego więc darmowe przesyłki są praktycznie tylko z Hong-Kongu?
Za 10zł. to nie znalazłem ale za ok.15zł. jest :) Proszę link dla chętnych zakupu http://www.ebay.pl/sch/i.html?rt=nc&LH_PrefLoc=2&_nkw=ethernet%20arduino&_fln=1&_sc=1&_sop=15&_trksid=p3286.c0.m283
Ja kupiłem wczoraj kolejne 2 sztuki po 12zł każda i bez kosztów wysyłki ;)
Pomysł trafiony w 10! Gratuluję!
Jestem ciekaw opisów Twoich projektów, o których wspominałeś powyżej (w połączeniu z internetem i via telefon – o tym chyba jeszcze nie było na Majsterkowie).
Tak z innej beczki – jest opcja, żeby zbudować analogiczne rozwiązanie, ale np. z czujnikiem dymu (o ile takie w ogóle są do zamontowania) albo czymś w ten deseń?
No i przy okazji choć to trochę OT – jak wygląda kwestia domontowania do tego, ale i do innych projektów, modułu GSM, który wysyłałby np. smsa z jakąś informacją lub dzwonił na podany numer np. włączając mikrofon?
Dzięki ;)
Z Internetem i telefonem to chodziło o jedno – przeglądarkę ale w sumie mam możliwości zrobić to SMSem tylko, że opis jak zrobić to SMSem nie był by dla nikogo przydatny – mam własne SMSC i własne API do tego, czyli ja sobie to mogę zrobić ale nikt nie będzie w stanie powielić tego pomysłu.
Niektóre serwisy typu smsapi.pl oferują odbiór SMSów ale jest to kosmiczna cena jak do stosowania w takich zabawkach.
Co do czujnika dymu to szczerze mówiąc nie wiem, nie spotkałem się z takowym nigdzie.
Modułu GSM nie testowałem, jest on też dość drogi i jego stosowanie w tego typu projektach mija się z celem. W przypadku wysyłki SMS to jeszcze można by to obejść wysyłając przez API jakiegoś serwisu (albo tak jak ja przez swoje własne) – ale już z rozmowami telefonicznymi i podsłuchem gorzej ;)
Byłbym bardzo wdzięczny gdybyś opisał sterowanie tym światłem :D Btw super temat
tez jestem za
Okej, w takim razie na dniach postaram się to dla Was opisać – ja mam to w tej samej płytce ale chciałem zostawić to na osobny post.
Przedsmak jak działa takie zapalanie można zobaczyć tutaj: https://www.youtube.com/watch?v=mLC_ZseKU50
Super! Już sie nie moge doczekac ;)
W akapicie “schemat” chyba warto było by ten schemat wstawić?
Masz na myśli schemat tradycyjny? Nie wstawiałem bo dość fatalnie to tam wtedy wygląda taka plątanina kabli.
Na pewno nie gorzej niż to, co jest teraz.
no przydałby się schemacik.
Mam jedno pytanie:
W opisach katalogowych czujnika DS18S20 (np. http://nettigo.pl/products/321) podano, że dokładność czujnika to “0.5 stopnia w zakresie od -10 do 85 stopni”.
Tymczasem, na Twojej stronie można zobaczyć np. temperaturę -2.75 °C (dane z 2013-03-10 12:55:02)
Jak udało Ci się osiągnąć dokładność 0.01°C ?
W dokumentacji do DS18B20 masz ładnie opisane dlaczego tak, a nie inaczej ;P (Strona 3 – “OPERATION — MEASURING TEMPERATURE”).
Wynika to z ustawienia rozdzielczości. W kodzie przedstawionym przez autora, komentarz do linii 35. jest błędny. Ustawiasz rozdzielczość pomiaru, a nie dokładność. Dokładność jest prawie niezmienna w zakresie od -10 do 85 stopni i wynosi 0,5 stopnia o czym zapewnia producent ;P
Komentarz poprawiony, dzięki ;)
Dzięki za informację. Teraz dopiero doczytałem w pedeefie.
Duży szacun dla Autora za kompleksową realizację projektu od sprzętowej bazy do webowego frontendu. Mnie by się nie chciało – kiedyś robiłem rejestrację temperatury odczytywanej z czujnika na procesorze przez lmtools i skończyło się na instalacji i konfiguracji mrtg + rrdtool. :^)
No ale wtedy wystarczyła rejestracja temperatury w komputerze, nie było mowy o stacji pogodowej.
BTW, do takiej stacji warto by było dodać odczyt/rejestrację napięcia pochodzącego np. z ogniwa baterii słonecznej (do wymontowania z lampy ogrodowej dostępnej w hipermarkecie za ok 10zł).
Jako czujnik nasłonecznienia? To jest dobra myśl :D
Ogólnie mam w planach też deszcz/wiatr (prędkość wiatru+kierunek) ale to nieco dalsza perspektywa ;)
Jeśli możesz przedstaw jak zapalić swiatło przez telefon z androidem :)
To będzie działać mniej więcej tak jak na filmiku który dałem wyżej, tylko via przeglądarka w telefonie :)
Na dniach postaram się opisać
http://www.php.net/manual/en/function.mysql-connect.php
“This extension is deprecated as of PHP 5.5.0, and will be removed in the future. Instead, the MySQLi or PDO_MySQL extension should be used. See also MySQL: choosing an API guide and related FAQ for more information. Alternatives to this function include:
mysqli_connect()
PDO::__construct()”
Tak, wiem – ale to na tyle daleka perspektywa, że będę się martwił później. Poza tym będąc u siebie na serwerze mam swobodę wyboru jaką wersję PHP chcę używać.
Kwestie bazy danych i prezentacji danych na wykresie latwo rozwiązac z pomoca serwisu: http://cosm.com
biblioteka: https://cosm.com/support/libraries
Mógłby ktoś napisać jak zrobić coś takiego na W5100? :)
Miałem pisać podobny tutorial, ale widzę że już jest ;) Z kumplem stworzyłem coś podobnego, a wykorzystaliśmy do tego komputerek HP T5500 z Debianem, ręcznie wykonany moduł 1-wire na RS232 i bibliotekę RDDtool to generowania wykresów ;) Muszę się w końcu zebrać i to opisać :D
Czy mógł byś opisać swoje rozwiązanie? Mam moduł 1-Wire na RS232 i też HP T5000 leży nieużywany. Nie mam jednak zbyt dużego doświadczenia z linuxem i opis by się przydał.
Witam,
mam trochę inne pytanie, w jakim programie jest zrobiony schemat? (płytka stykowa, przewody i Arduino)
Fritzing
Kurde, co tu wejdę to Twoje pomysły mnie po prostu zabijają. Termometr fajna sprawa, a ja ciągle cierpię na brak czasu, bo chętnie bym sobie przećwiczył te wasze pomysły. Tak więc proszę – o artykuł, w którym zaprogramujesz mnie bym miał więcej czasu – nawet przez internet ;P
Pytanie nooba: podłączasz to do routera?
Jak najbardziej :)
Kuba co z obsługą przez telefon – zakupiłem już moduł i czekam na Twój wpis ;D
Masz na myśli światło? Już niebawem :)
Niebawem? Czekam i czekam … ;)
Bardzo ciekawe rozwiązanie. Kubuś szalejesz. Słowa uznania.
Właśnie sam próbuje zrobić taki termometr tylko że z wysyłaniem danych a nie odbiorem przez skrypt php. Minusem, dość dużym dla mnie jest tutaj to że musimy mieć obsługę crone’a na serwerze a nie każdy ma taką możliwość. Polecam pobranie biblioteki z tego poradnika http://www.blue17.elektroda.eu/mikrokontrolery-avr/1618 i użycie example “etherShield_client” który wysyła dane na serwer i w php już możemy sobie zrobić aby albo zapisywał dane do bazy danych albo do pliku .txt
Tutaj gotowy kod php http://www.mercenarymind.com/arduino/463-ethernet-shield-for-arduino-a-web-client-example
Póki co działa i zapisuje ale przydało by się poprawić trochę ten przykładowy kod :) Na plus jest to że cały kod z biblioteką etherShield zajmuje tylko 5 854 bytes także możemy wykorzystać Atmega8 w końcowym układzie :)
Jednak gdzieś jest błąd bo po jakimś czasie przestaje zapisywać do tego pliku a i z komunikacją z zewnętrznym serwerem też jest jakiś problem także działa tylko na serwerze postawionym u siebie. Jak ktoś się lepiej zna to może poprawić :D
Zdecydowałem się jednak na Twój skrypt i kod bo u mnie na serwerze jest CRON ale niestety działa tylko co godzinę :( No ale do wykresów wychodzi w sam raz :)
Dodam jeszcze że masz drobny błąd w index.php jest $czas = $l[‘czas’]; a powinno być $czas = $l[‘time’]; a właściwie to powinno być $czas = date( ‘Y-m-d H:i:s’, $l[‘time’]); aby wyświetliło poprawnie datę i czas ;)
Jeśli chcemy samą godzinę (00:00:00) to $czas = date( ‘H:i:s’, $l[‘time’]);
Pingback: Termometr ruszył. | SQ9RIL - Blog
Pingback: Internetowy termometr na Arduino [Atmega328 + DS18B20 + ENC28J60] | SQ9RIL - Blog
Witam
U mnie wyskakuje blad
‘ETHER_28J60’ does not name a type
i co z tym zrobic?
Skasowałeś domyślną bibliotekę przed dodaniem tej odemnie ?
Witam, czy kod pisany na ATmege to czysty język C?
Zaprezentowany kod wykorzystuje funkcje od Arduino, dlatego zgodnie z podlinkowaną instrukcją konieczne jest wgranie bootloadera Arduino
Nope. Bootloader w Arduino nie robi nic, oprócz udostępnienia funkcji wgrywania wsadu. Nie udostępnia żadnych funkcji systemowych, wsad skompilowany w Arduino IDE (C++ + plik Arduino.h) będzie poprawnie działał na “czystym” procesorze.
Pingback: Lampka zapalana przez Internet » Majsterkowo.pl
Pomysł termometru rewelacja.
Właśnie testuję Twój układ.
Mam tylko pytanie o wyświetlanie temperatury na stronie WWW (nie używam serwera SQL ani PHP – interesuje mnie jedynie wyświetlenie wartości na stronie)
Temperatura podawana jest bez przecinka. Da się jakoś go wstawić do wartości temperatury na stronie WWW?
Pingback: Własny detektor burzy - część 1 » Majsterkowo.pl
Witam mam problem z tym projektem. Pobiera mi temperaturę na serwer ale tylko raz potem nie da rady pobrać jej na nowo gdyż ENC28J60 się chyba ścina i nie da rady wejść nawet lokalnie sprawdzić jaka jest temperatura.
Ten sam problem. Może ktoś znalazł rozwiązanie ??
Bardzo fajny projekcik dla początkujących i właśnie od niego zaczynam przygode z Arduino ale jest tu masa błędów i początkujący nie uruchomi układu.
moduł lan – źle podpięte GND
moduł LCD – pin 5 podpięty do VCC zamiast GND
pin 4 i 6 ma być podpięty do ATmegi do 5 i 6
sygnał z czujników DS ma być podpiety do pinu 4 Atmegi
wszystko to można wywnioskować z kodu programu
no i w kodzie PHP trzeba zwrócić uwage na ujednolicenie adresów IP oraz definicja czasu o której już wspomniano w komentarzach.
Układ nie ruszył mi też na wewnętrzym oscylatorze Atmegi (działał na zewnętrznym 16MHz) ale to dlaczego to musze się dokształcić.
No i według “rysunku” zasilanie czujników temperatury jest odwrotnie. Kiedy trzymamy DS18B20 płaską stroną do siebie masa jest po lewej stronie, a “+” po prawej!!! Bez karty katalogowej ani rusz, prawie usmażyłem palec dotykając czujnika po kilku sekundach takiego odwrotnego podłączenia – nauczka na przyszłość żeby nie ufać ślepo wszystkiemu co mądrze wygląda.
Pingback: Internetowy termometr | Paweł Wiejkut
Witam majsterkowiczów! Rozpocząłem pracę z tymże termometrem, i wszystko szło dobrze. Aż do momentu podłączenia modułu Ethernet. Wszystkie biblioteki i inne rzeczy zaimplementowałem dobrze, lecz gdy podpinam gotowy projekt pod router, nie ma żadnego efektu. Na adresie ( 192.168.1.15 ) nic się nie pokazuje. Czy mógłby ktoś mi pomóc z tym? Pilne. Z góry dzięki ;)
Zmien adres na adres z puli DHCP twojego routera.
Witam
Mam poważny problem. Mianowicie ma zrobiony taki termometr, także na pc (webserv) serwer i bazę danych i wszystko ładnie pracuje. Chciałem Zrobić serwer na raspberry pi i tu zonk. Serwer apache, mysql, phpadmin to samo co na windowsie ale odczytuje dane tylko raz, zapisuje do bazy danych i zawiesza połączenie z modułem ethernet w arduino. Kombinuje już parę dni i nie mogę dojść do skutku co jest przyczyną. Może ktoś podrzuci jakiś pomysł bo mi się już wyczerpały.
Pozdrawiam
Jako ze nie udało mi się rozwiązać tego problemu, to zrobiłem w drugą stronę. Arduino wysyła dane do serwera, a serwer już zapisuje w bazie mysql. A dalej to tak samo jak w tym projekcie.
Dzięki za dobry poradnik. Będę próbować połączyć termometr z systemem powiadamiania o listach w skrzynce pocztowej, a wszystko wysyłane bezprzewodowo za pomocą nRF24L01 do arduino, który te informacje będzie wysyłać i na LCD i do internetu.
czy coś ja źle widzę czy nie doczytałem ale czujniki DS są źle podłączone na schemacie – prawa nóżka (jedynka) powinna iść do masy a idzie do +5 ? prawie spaliłem czujnik gdyby nie to że przypadkowo dotknąłem go bo nie widziałem pomiarów i szybko odłączyłem zasilanie. Aż mi wyskoczył pęcherz ta palcu :)
Witam.
Mam problem. Jak wejdę na stronę wypuszczoną przez arduino to wyświetla mi się temperatura. Ale jeśli zrobię to przez PHP z wykorzystaniem file_get_contents układ na arduno wysyła raz temperaturę i się zawiesza.
Gdzie szukać przyczyny.
Biblioteki nie działają pod najnowszą wersją Arduino 1.6.0 i 1.6.1. :)
Witam. Czy jest w stanie pomoc mnie z tym plikiem cron. Strona i baza jest na udu.pl. Komunikacja miedzy strona a baza jest oraz miedzy arduino a wyjsciem. Dane jednak gina przed myql. Podejrzewam problem z crone. Nie jestem specialista ..wiec potrzebuje pomocy step by step z tym plikiem Dzieki
Cześć
Mam taki błąd podczas kompilacji
Documents/Arduino/libraries/etherShield/etherShield.h:34:76: error: ISO C++ forbids declaration of ‘progmem_s’ with no type [-fpermissive]
uint16_t ES_fill_tcp_data_p(uint8_t buf,uint16_t pos, const prog_char progmem_s);
Witam,
Zazdroszczę talentu programisty :P. Chciałbym się zapytać w jaki sposób adres IP 192.168.1.15 z routera domowego udało Ci się zamienić na adres lokalny 10.3.1.2:8888 i odebrać dane temperatury ? Z góry dzięki za odpowiedź.
In file included from C:\Program Files (x86)\Arduino\libraries\etherShield/etherShield.h:25:0,
from sketch_dec19d.ino:1:
C:\Program Files (x86)\Arduino\libraries\etherShield/ip_arp_udp_tcp.h:32:66: error: ‘prog_char’ does not name a type
extern uint16_t fill_tcp_data_p(uint8_t buf,uint16_t pos, const prog_char progmem_s);
^
Hej, wrzucam do Arduino Twój kod i wywala mi IDM taki problem:
C:\Program Files (x86)\Arduino\libraries\etherShield/ip_arp_udp_tcp.h:32:77: error: ISO C++ forbids declaration of ‘progmem_s’ with no type [-fpermissive]
extern uint16_t fill_tcp_data_p(uint8_t buf,uint16_t pos, const prog_char progmem_s);
^
In file included from sketch_dec19d.ino:1:0:
C:\Program Files (x86)\Arduino\libraries\etherShield/etherShield.h:34:65: error: ‘prog_char’ does not name a type
uint16_t ES_fill_tcp_data_p(uint8_t buf,uint16_t pos, const prog_char progmem_s);
Witam Koledzy!
Czy może ktoś narysować i zamieścić chemat ideowy tego ostatniego układu na samodzielnym kontrolerze. Ten widok na płytce stykowej nie za bardzo przemawia. Pozdrawiam, i z góry dziekuję.
Witam
Super termometr czegoś takiego właśnie szukałem, jestem trochę zielony w sprawach Arduino, czy może mi ktoś łopatologicznie wytłumaczyć krok po kroku co zrobić z bibliotekami, co z wycinkami kodów umieszczonych powyżej w ramkach, a może podeśle mi ktoś sklejony plik do kompilacji ?
z góry dziękuję za pomoc
Pozdrawiam Robert
Witam, pod którą wersją Arduino było to tworzone, na 1.6.6 nie działa
Program działa w wersji 1.0.5 r2, biblioteki należy rozpakować do katalogu libraries w Arduino, należy również skasować starą bibliotekę Ethernet
Witam !
Masz moze przerobione php rysujace wykresy do wersji php7 !!!