Comments on: Log Arduino data to a web server
-
wim
Bedankt voor je antwoord.
Inderdaad twee verschillende toepassingen.
Ik ga eerst eens proberen de webserver op de arduino aan de praat te krijgen.
Nog wat nieuws over de velleman kit: blijkbaar werkt die alleen als er minimaal aan twee voorwaarden voldaan wordt:
1) 12v voedingsspanning en
2) in plaats van Ethernet.h moet je UIPEthernet.h als bieb gebruiken. Dit zal met de chipset te maken hebben. -
EngineerAtHome
Ha Wim,
het lijkt er op dat je een tweetal artikelen door elkaar haalt.
1) Dit artikel gaat over data loggen naar een online database, hiervoor heb je een (virtuele) (web)server nodig waar de database (MySQL), controllersoftware (PHP) en interface (HTML/JavaScript) op draait. Zo krijg je inzicht in het verloop van de data in de tijd.
2) Het andere artikel gaat over een webinterface draaien OP/IN de Arduino. De HTML-pagina's van dat artikel worden inderdaad geserveerd vanaf de SD-kaart en dienen om actuele waardes in te zien of knoppen te bedienen.
Beide artikelen staan dus op zichzelf en dienen een ander doel. Ze kunnen overigens wel gecombineerd worden maar dat vraagt nog wat werk. :-)
Het online log-systeem werkt als volgt:
1) De Arduino stuurt een HTTP-request met de gemeten waardes naar log.php wat op de server staat.
2) Log.php is een stukje code wat de waardes uit het request opsplitst en opslaat in de MySQL database op dezelfde server.
3) Om de data weer te geven is er nog een php-bestand nodig dat de waardes weer uit de database ophaalt en weergeeft. Dit bestand staat dus ook op de server en daar is de data dan ook voor iedereen te bekijken.
Dit artikel behandeld echter alleen het Arduino deel van het project (stap 1 en 2), voor het weergeven van de data bouw je in feite een kleine website met PHP en HTML en daar zijn al veel andere websites over volgeschreven.
Al met al best complex dus. Is het voor jouw doel niet makkelijker om gewoon naar een online service te loggen zoals Thingspeak of Sparkfun [https://www.engineerathome.com/elektronica/arduino+data+naar+sparkfun+loggen/46] ?
Een MAC-adres kun je gewoon random aanmaken, ze hoeven alleen binnen jouw subnet uniek te zijn.
De Arduino mag tegelijk aan USB, UTP en netvoeding hangen, dat is geen probleem. -
Wim
Update:
Ethernet shield werkt nu.
Dwz een nwe. De dhz-kit van Velleman (ka04) werkt niet, ik vermoed een dhcp probleem.
Waar ik nog moeite mee heb is de hele keten voor te stellen.
De arduino meet de sensorwaardes.
Die zet je in de log.php op je eigen server.
Maar bij de beschrijving van de html-pagina, dus de weergave van die waardes, ga je weer terug naar de arduino en zet je de kale html-pagina op de sd-kaart. Die je dan weer vult en upload naar de server ?
Maar waar bekijk je die pagina ? Op de server (en kan iedereen die zien, bv als weerstation) of lokaal op je pc ?
En waar voer je dan die database bewerkingen uit ?
De database staat als het goed is op je server.
Dus in feite is mijn verzoek: kan je een keten plaatje maken van hoe eea aan elkaar zit ?
Alvast bedankt,
Wim -
wim
Hallo,
Als complete nieuweling zit ik een beetje vast.
Ik wil een simpele keten maken die barometer waarden meet, overzet naar een webserver en dan publiceerd als een soort weerstation. Geheel conform uw voorbeeld.
Barometer krijg ik aan de praat.
Ethernet shield niet, ondanks de nodige voorbeelden.
heel simpel: hoe maak ik een uniek mac adres aan ?
Mag arduino meag aan de usb poort blijven zitten tegelijk met UTP ?
Hoe controleer ik of de setup werkt ?
Als ik de code van: https://www.arduino.cc/en/Tutorial/WebClient, laad en gebruik krijg ik geen foutmeldingen maar verder zie ik ook niets gebeuren.
Is het een idee dat u een bassis basis tutorial schrijft hierover ? Misschien met een testcode die verbinding maakt met uw site en die dan een welkomsttekst terug geeft ?
-
Doğukan
hi,
For a project we will get data from sensors and send these data via gsm shield to a database to protect them. And also we want to see these data from a web page. How can we start this project and which steps should we follow?
thanks -
WJ
Nog bedankt voor je vorige reactie en ik ga eea eerdaags aansluiten (eerst nog in de kruipruimte de LAN kabel leggen). Tav PHP was ik (ook) compleet onkundig en daar mijn PHP-file in de root stond vergat ik natuurlijk een "/" voor te zetten voor de PHP-file. Uiteindelijk vond ik de reden waarom eea niet werkte.
Een aantal uren verder denk ik dat ik zelfs mijn PHP-file heb verbeterd. De time stamp laat ik door de database zelf bepalen (waarom moeilijk doen?). De SQL heb ik verkleint door "mysql_real_escape_string" uit de SQL te halen en in de variabelen te zetten, hierdoor wordt de SQL stukken kleiner en leesbaarder. -
EngineerAtHome
@Alejandro: this article [http://www.engineerathome.com/elektronica/build+an+ethernet+web+interface+for+arduino/35] describes how to run a webinterface on an Arduino. You can play with the example code and change it to fit your needs.
@Eastwood: welke formules doel je op? Ik reken alleen dagtotalen en uurtotalen uit, dat is niet zo moeilijk. Tegenwoordig gebruik ik Morris.js voor mijn grafieken [http://morrisjs.github.io/morris.js/] ziet er beter uit vind ik. -
Eastwood
Nog een korte vraag. Waar heb jij jouw berekeningen/formules omtrent de statistieken vandaan?
-
Alejandra Clavijo
Hola!
Actualmente me encuentro desarrollando mi tesis de pregrado que es un bombillo IP, ya cuento con la parte de medida actuadores y sensores en el arduino, sin embargo necesito realizar una pagina web para visualizar los datos y enviarle ordenes al arduino por ethernet la verdad no manejo ningún programa de remote server no se si me puedas recomendar uno en especial y un tutorial para empezar desde el principio y poder terminar mi proyecto, necesito básicamente lo que explicas en esta pagina sin embargo como tengo unos vacíos no entiendo muy bien.
Muchas gracias por tu atención, solamente hablo español no se si entiendas igual te escribo con ayuda de traductor en ingles.
Hello!
I am currently developing my undergraduate thesis which is an IP bulb, and count on part of actuators and sensors to the arduino measure, however I need to make a web page to display the data and send commands to arduino ethernet truth I do not drive any remote server program I do not know if you can recommend one in particular, and a tutorial to start over and to finish my project, I need to explain basically what this site though as I have some gaps do not quite understand.
Thank you very much for your attention, I only speak Spanish do not know if you understand just write with the help of a translator in English. -
EngineerAtHome
Hi Eastwood,
ja, dat kan! Ik heb hier nu 2 Arduino's draaien: mijn home-automation Mega die alle draadgebonden en 433 MHz sensors naar de database stuurt, en een Uno in de meterkast die het energieverbruik en nog wat extra sensors doorstuurt naar de database.
Mijn log.php ziet er nu zo uit:
foreach ($_GET as $device => $value) {
$sql = mysql_query("INSERT INTO data ( device_name, value ) VALUES ( '".mysql_real_escape_string($device)."', '".mysql_real_escape_string($value)."' )") or die(mysql_error());
}
Op deze manier maakt het dus niet meer uit wat de namen van je sensors zijn, alles wat je met een GET-request naar de server stuurt wordt gelogd in de DB. -
Eastwood
Hoi,
Ik weet niet of dat ik het goed bebrijp, maar kun je via deze uitleg 2 Arduino bordjes (met verschillende sensoren) in dezelfde online file schrijven?
Want ik zit erover te denken om ook aan een project te beginnen, maar daarvoor heb ik meerdere arduino bordjes nodig die data verzamelen, maar ik zou dan wel al die data van de verschillende bordjes naar hetzelfde online platform (file/DB) willen schrijven. Gaat dat hiermee? -
EngineerAtHome
Beste Jan Henk, in feite trek je zelf al de juiste conclusie: in de Arduino is plek voor één sketch. Wil je functionaliteit samenvoegen dan moet je dat inderdaad in een sketch combineren. Bovendien kan de Arduino, in tegenstelling tot een computer, niet multitasken. In de code moet je hier dus ook rekening mee houden, je moet zelf de processortijd over de diverse processen verdelen. In mijn geval draait op één Arduino Mega een webserver, 433 MHz ontvanger en zender, lichtsturing met timers, ledstrip, diverse licht-, temperatuur- en vochtsensors, en een luchtdruksensor. Een tweede Arduino Uno zit in de meterkast voor het uitlezen van de kWh-meter, deurbel en nog wat sensoren. Dit had in principe ook nog op de Mega kunnen draaien maar die staat om zend/ontvangst redenen niet in de meterkast.
Met één Arduino kun je al heel veel voor elkaar krijgen. Je hebt dus niet voor elk project een nieuwe Arduino nodig. Begin gewoon met wat simpeler projecten en als je het eenmaal door hebt gaat er een wereld voor je open! -
Jan Henk
Beste EngineerAtHome,
Ik heb allereerst een algemene vraag. Kun je meerdere opdrachten aan de Arduino combineren, zoals bijvoorbeeld het sturen van data van verschillende sensors naar een server / mysql database en het bedienen van verlichting etc in huis? Ik ben net begonnen met Arduino en heb tot nu toe de ervaring, dat als ik bijvoorbeeld een web client sketch naar de arduino stuur, dat hij deze sketch dan uitvoert, en als ik dan bijvoorbeeld een led wil laten knipperen, dan moet ik een nieuwe sketch uploaden, maar dan is hij de web client weer kwijt... Of moet je al je code combineren in 1 sketch en die dan naar de arduino sturen?
Uit je posts begrijp ik dat je meerdere arduino's gebruikt en die aan elkaar koppelt!? Ik vroeg me dus ook gezien het bovenstaande af, of je voor elk project een andere arduino nodig hebt.
Alvast veel dank voor een reactie!
Ik heb een arduino mega met wifi shield. -
EngineerAtHome
In de code gebruik je als het goed is if (client.connect(server,80)) {...} daar kun je ook een else {...} achter plaatsen met code die uitgevoerd moet worden als er geen connectie kan worden gemaakt, bijvoorbeeld een rode statusled laten knipperen, of een pin aansturen.
-
Leon
Ik kom erachter dat als ik de Ethernet kabel van mij Ethernetshield af haal dat de software verder werkt alsof er gewoon een verbinding tot stand komt.... met alle gevolgen van dien..
Is er manier om dit te ondervangen? zijn er bv pins die actief worden indien de Ethernet shield wel goed werkt? -
EngineerAtHome
Hi Tanja, I've checked your code real quick and I think that the error is in this line in log.php: if ($_SERVER['REMOTE_ADDR'] == " 192.168.2.121 ")
At first you need to remove the spaces inbetween the quotes "192.168.2.121".
Then the most important part: the IP-address you are using is the local network IP-address of your Arduino, but now you are talking to a server outside your local network. Therefore the IP-address get's translated by your modem/router to you external IP-address.
When you visit the site www.whatsmyip.org with a computer in the same local network as the Arduino, so in the same house, using the same modem, you can see your external IP-address. Copy this address to the mentioned line in log.php and all should be fine. Good luck! -
tanja
Dear sir these are my files for arduino and php
http://adverta.com.mk/test/arproekt/Code.ino
http://adverta.com.mk/test/arproekt/log.txt
On arduino serial monitor I get that the server is connected and readings from the sensor, but I can't manage to put them in to my database on my online server (not localhost)
Can you please tell me where is my error, because I'm new to coding.
Thanks -
tanja
Hi because I don't understand Dutch and I'm new to coding, could you please send me all code pack to my email adress
Thanks -
EngineerAtHome
Hi Mohamed, thanks! This article is translated in English on the following URL http://www.engineerathome.com/elektronica/log+arduino+data+to+a+web+server/34, maybe that helps.
Actually a couple of days ago I did start an EngineerAtHome Facebook-page, unfortunately it will be in Dutch, but you will be notified if there are any new articles :-) -
mohamed
hi thanks for the tutorial i don't understand dutch by hopefully the code have a universal language thanks again and i hope to make a facebook page so we can keep in touch with this blog
-
EngineerAtHome
Je kunt gerust HTML en PHP door elkaar gebruiken. <?php en ?> zijn de open en sluit tags van een stuk php. Dus dit kan gewoon:
<html>
...
...
<p>Hallo dit is een paragraaf in HTML</p>
...
<?php
echo 'deze regel is met php geschreven!';
?>
...
<img src='plaatje_in_html.gif'>
...
...
</html>
De plugins om grafieken te tekenen werken met JavaScript, ook dit kan je gewoon gebruiken in je PHP/HTML document. Momenteel gebruik ik zelf Morris.js om lijngrafieken te tekenen, dit werkt beter dan mijn bargraph code :-) ! Op hun site vind je ook uitleg over hoe de plugin werkt (http://morrisjs.github.io/morris.js/).
Simpel gezegd komt het er op neer dat je de data-array vult met de waarden uit je database. Dus eigenlijk schrijf je met PHP een stukje JavaScript dat wordt getoond op een HTML-pagina. De volgende PHP-code vult één data-array met gegevens van de laatste 48 uur:
<?php
$sqldata = mysql_query("SELECT datetime, lichtbuiten FROM data WHERE datetime > DATE_SUB(NOW(), INTERVAL 48 HOUR) ORDER BY datetime ASC");
while ($data = mysql_fetch_array($sqldata)) {
echo "{ y: '".$data['datetime']."', a: ".$data['lichtbuiten']." },\n";
}
?>
Als je de tutorial van Morris.js volgt dan plak je deze code op de plaats van de array achter "data: [" -
Wilco
Hallo EngineerAtHome, onderstaande bargraph heb ik nu aan de praat:
Uw code krijg ik echter niet aan de praat. De laatste regel blijft ook zwart: "} ?>" Wat ik ook probeer het wordt niet anders. Weet u wat ik fout doe? De dubbele ?> snap ik niet. -
Wilco
Hallo EngineerAtHome, bedankt voor de vorige hulp. Het werkte niet, maar heb het nu aan de praat.
code verandert in:
$sql = "INSERT INTO `data` (datetime, zonlicht,...
echo $sql;
mysql_query($sql);
mysql();
Nu logt de database netjes.
Kan nu de laatste waardes ook bekijken in localhost. Ik wil nu graag grafieken laten zien, maar loop nu hier in vast. Voorbeeld van staafdiagram werkt bij mij niet, geeft foutmelding bij "bargraph". Ook heb ik Google Charts geprobeerd. Gaat ook niet, html en php door elkaar kan dat? Is er ook ergens een duidelijke uitleg hoe je gemakkelijk een grafiek van je database kan maken? -
EngineerAtHome
Dag Wilco,
het bestandje log.php bevat de juiste SQL-instructies om de waardes aan de database toe te voegen. Dit bestand moet je zelf schrijven want is voor iedereen anders. Ik heb hierboven een voorbeeldbestand toegevoegd wat misschien meer duidelijkheid geeft. -
Wilco
Hallo,
Super interessant, maar tamelijk nieuw voor mij wat betreft wampserver, database in combinatie met arduino uno met GSM shield er op. Mijn GSM shield is nu geprogrammeerd als client en wil graag op mijn wampserver de database vullen met de 5 analoge waardes zoals in uw project. Mijn database heb ik de naam "analoog" genoemd en de tabel "meetwaarden". U heeft het over log.php bestand, deze kan ik niet vinden en ook niet iets dergelijks met analoog of meetwaarden. Wat moet ik nog instellen in phpMyAdmin om te kunnen loggen?