Je cherche à envoyer des données lues par mes plaques Arduino sur une page de mon site internet.
J'aimerais utiliser pour cela Processing (si c'est possible), car cela me permettrait de faire une petite interface me permettant de manipuler ces données.
J'aimerais me connecter à une certaine heure tout les jours, à une page déterminée, remplir les champs d'identification et les valider puis commencer le transfert de données, puis finir par fermer la page, tout cela par le biais d'une appli Processing.
J'ai vu qu'il existait la librairie "processing.net".
J'ai fait une essai avec cet exemple :
import processing.net.*;
Client myClient;
int dataIn;
void setup() {
size(200, 200);
// Connect to the local machine at port 5204.
// This example will not run if you haven't
// previously started a server on this port
myClient = new Client(this, "http://www.processing.org/reference/libraries/net/Client.html", 5204);
}
void draw() {
if (myClient.available() > 0) {
dataIn = myClient.read();
}
background(dataIn);
}
mais cela ne fonctionne pas, processing me renvoi ces erreurs :
java.net.UnknownHostException: http://www.processing.org/reference/libraries/net/Client.html
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:177)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:433)
at java.net.Socket.connect(Socket.java:524)
at java.net.Socket.connect(Socket.java:474)
at java.net.Socket.<init>(Socket.java:371)
at java.net.Socket.<init>(Socket.java:184)
at processing.net.Client.<init>(Client.java:60)
at sketch_sep26a.setup(sketch_sep26a.java:28)
at processing.core.PApplet.handleDraw(PApplet.java:1383)
at processing.core.PApplet.run(PApplet.java:1311)
at java.lang.Thread.run(Thread.java:613)
Est ce que cela peut venir du N[ch730]de port qui ne serait pas le bon ?
Ou est ce que cette librairie n'est pas faite pour cela?
euh... oui le port est un problème, mais ce n'est pas le seul
en fait le client ne fonctionne que s'il y a un serveur de l'autre côté sur le même port. Par "serveur", on entend un programme spécifique jouant le rôle de maitre dans la connexion client/serveur, et pas de "serveur web" en tant que machine hébergeant des fichiers et des programmes.
donc deux choix s'offrent à toi :
tu as un serveur (machine) sur lequel tu peux faire fonctionner des programmes java : donc tu peux écrire un serveur (programme) également en Processing
tu as un serveur (machine) qui ne fait que de l'hébergement : dans ce cas il faut chercher quel type de langage de programmation t'est autorisé. Ensuite il faudra écrire une page dynamique (exemple : php).
Ce serait moi, je connecterai mon Arduino directement sur ma box internet, avec un shield Ethernet qui envoit des données à Pachube (un serveur machine/programme indépendant), puis je fais une page sur mon propre serveur qui va chercher sur Pachube les différentes valeurs et les affiche.
Cela fait un circuit avec un serveur en + mais je n'utiliserais que des briques déjà existantes.
Bonsoir Jean-François.
Pour ma part, je fais un peu comme de Luj06.
Mon arduino se connecte au serveur apache via un shield ethernet.
Il fait une requete sur une page "toto.php" en passant des paramètres (?nom_de_variable;sa_valeur).
Dans toto.php, le script va mettre à jour la base de données MySQL en fonction des paramètres passés dans l'URL. C'est simple et direct. En réponse, arduino peut recevoir des données du serveur (confirmation de bonne exécution par ex)
Et ça marche, mais sans utiliser processing... :-/
Tout à fait, c'est une très bonne solution. C'est comme ça que je ferais, en récupérant des exemples de php et de sql, car il est désormais simple et peu onéreux de trouver un hébergement php/mysql.
Mais je comprends aussi qu'on recherche une solution à base de fichiers. Donc voici un article décrivant comment écrire un petit programme php (appelé par l'Arduino ou par Processing) qui écrit directement dans un fichier. Il faut ensuite transformer la page html qui devait afficher les données en une page php (mais le contenu reste le même) en ajoutant à l'endroit où on veut afficher le résultat le code php de lecture du fichier précédemment créé.
Pour l'instant on est en pleins préparatifs de la Fête de la Science (novembre) donc je suis pas trop dispo pour commencer un nouveau projet développant ces propositions, mais si vous voulez le faire pour les prochains, vous pouvez publier un article sur notre site web et je vous aiderai pour le code et pour les tests (hébergement php).
Après quelques essais, j'arrive à lire les données HTML sur une page web (code source).
import processing.net.*;
Client myClient;
int dataIn;
void setup() {
size(200, 200);
String lines[] = loadStrings("http://www.arduino.cc");
println("there are " + lines.length + " lines");
for (int i=0; i < lines.length; i++) {
println(lines[i]);
}}
Voici un extrait ce que je lis dans la console :
there are 175 lines
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Arduino - HomePage </title>
<link rel='stylesheet' href='http://arduino.cc/en/pub/skins/arduino/arduino.css' type='text/css' />
<meta name="verify-v1" content="TtxFIEJAB6zdJ509wLxjnapQzKAMNm9u0Wj4ho6wxIY=" />
</head>
<body>
<div id="page">
<!--PageHeaderFmt-->
<div id="pageheader">
<div class="title"><a href="/">Arduino</a></div>
<div class="search">
<!-- SiteSearch Google -->
<FORM method=GET action="http://www.google.com/search">
<input type=hidden name=ie value=UTF-8>
<input type=hidden name=oe value=UTF-8>
<INPUT TYPE=text name=q size=25 maxlength=255 value="">
<INPUT type=submit name=btnG VALUE="search">
<input type=hidden name=domains value="http://www.arduino.cc/">
<input type=hidden name=sitesearch value="http://www.arduino.cc/">
</FORM>
<!-- SiteSearch Google -->
</div>
</div>
<!--/PageHeaderFmt-->
<!--PageLeftFmt-->
<div id="pagenav" style="text-align: right">
<div style="float: left;">
<p><a class='wikilink' href='http://arduino.cc/en/Main/Buy'>Buy</a>
|
<a class='wikilink' href='http://arduino.cc/en/Main/Software'>Download</a>
|
<a class='wikilink' href='http://arduino.cc/en/Guide/HomePage'>Getting Started</a>
|
<a class='wikilink' href='http://arduino.cc/en/Tutorial/HomePage'>Learning</a>
|
<a class='wikilink' href='http://arduino.cc/en/Reference/HomePage'>Reference</a>
|
<a class='wikilink' href='http://arduino.cc/en/Main/Hardware'>Hardware</a>
|
<a class='wikilink' href='http://arduino.cc/en/Main/FAQ'>FAQ</a>
</p>
<p class='vspace'></p>
</div>
<a class="urllink" href="http://www.arduino.cc/blog/" rel="nofollow">Blog »</a> |
<a class="urllink" href="http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl" rel="nofollow">Forum »</a> |
<a class="urllink" href="http://www.arduino.cc/playground/" rel="nofollow">Playground »</a>
</div>
<!--/PageLeftFmt-->
<div id="pagetext">
<!--PageText-->
<div id='wikitext'>
<table width='100%' border='0' cellpadding='0' cellspacing='0'><tr><td width='48%' valign='top'>
<p class='vspace'></p><div><img src='http://arduino.cc/en/uploads/Main/arduino316.jpg' alt='' title='' /></div>
<p class='vspace'></p><p><em>Photo by Nicholas Zambetti</em>
</p>
<p class='vspace'></p><p><br clear='all' />
</p>
<p class='vspace'></p><h3>Arduino News (<a class='wikilink' href='http://arduino.cc/en/Main/News'>archive</a>)</h3>
<p>2009.08.12 Arduino 0017 available from the <a class='wikilink' href='http://arduino.cc/en/Main/Software'>download page</a>.
</p>
<p class='vspace'></p><p>2009.06.17 <span style='color: red;'> Can't run Arduino after updating Java on your Mac? </span> See the <a class='wikilink' href='http://arduino.cc/en/Guide/Troubleshooting#macupdate'>solution in the troubleshooting guide</a>.
</p>
<p class='vspace'></p><p>2009.06.04 Arduino 0016 for Windows, Mac OS X, and Linux available from the <a class='wikilink' href='http://arduino.cc/en/Main/Software'>software</a> page.
</p>
<p class='vspace'></p><p>2009.03.26 <a class='wikilink' href='http://arduino.cc/en/Main/ArduinoBoardMega'>Arduino Mega</a> released. <a class='wikilink' href='http://arduino.cc/en/Main/Software'>Download</a> the new Arduino 0015 software to use it.
</p>
<p class='vspace'></p><p>2009.03.11 Arduino 0014 for Windows and Mac OS X available from the <a class='wikilink' href='http://arduino.cc/en/Main/Software'>software</a> page. This is a minor bug fix release.
</p>
<p class='vspace'></p><p>2009.02.07 Uploaded a slightly updated version of <a class='urllink' href='http://arduino.googlecode.com/files/arduino-0013-linux2.tgz' rel='nofollow'>Arduino 0013 for Linux (32 bit)</a>.
</p>
<p class='vspace'></p><p>2009.02.06 Arduino 0013 is now available (<a class='wikilink' href='http://arduino.cc/en/Main/ReleaseNotes'>release notes</a>): <a class='urllink' href='http://arduino.googlecode.com/files/arduino-0013-win.zip' rel='nofollow'>Windows</a>, <a class='urllink' href='http://arduino.googlecode.com/files/arduino-0013-mac.zip' rel='nofollow'>Mac OS X</a>, <a class='urllink' href='http://arduino.googlecode.com/files/arduino-0013-linux2.tgz' rel='nofollow'>Linux (32bit)</a>.
</p>
<p class='vspace'></p><p>2008.12.23 The Arduino software is now available for <a class='urllink' href='http://code.google.com/p/arduino/downloads/list' rel='nofollow'>download from Google Code</a>. If you have any problems, please <a class='urllink' href='http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?board=swtrouble' rel='nofollow'>let us know</a>.
</p>
<p class='vspace'></p><p>2008.10.24 Arduino 0012 for Linux AMD 64bit available for download: <a class='urllink' href='http://www.arduino.cc/files/arduino-0012-linux-amd64.tgz' rel='nofollow'>arduino-0012-linux-amd64.tgz</a>
</p>
<p class='vspace'></p><p>2008.10.19 Announcing the <a class='wikilink' href='http://arduino.cc/en/Main/ArduinoBoardDuemilanove'>Arduino Duemilanove</a>, the latest and easiest-to-use version of the basic Arduino USB board.
</p>
<p class='vspace'></p><p>2008.10.12 Arduino 0012 for Linux 32bit available: <a class='urllink' href='http://www.arduino.cc/files/arduino-0012-linux.tgz' rel='nofollow'>arduino-0012-linux.tgz</a>
</p>
<p class='vspace'></p><p>2008.09.18 Arduino 0012 available (<a class='wikilink' href='http://arduino.cc/en/Main/ReleaseNotes'>release notes</a>): <a class='urllink' href='http://www.arduino.cc/files/arduino-0012-win.zip' rel='nofollow'>Windows</a>, <a class='urllink' href='http://www.arduino.cc/files/arduino-0012-mac.zip' rel='nofollow'>Mac OS X</a>. Linux version coming soon.
</p>
<p class='vspace'></p><p><span style='color: red;'>2008.09.16 New Arduino Server!!</span><span style='color: red;'> Faster, Better, and already breaking the records ... read about it on our <a style='color: red' class='urllink' href='http://arduino.cc/blog/?p=74' rel='nofollow'>blog</a></span>
</p>
<p class='vspace'></p><p>2008.09.03 Arduino.cc on the move!! During the next week we will migrate all our online services to a new and better server, we apologize for eventual cuts while in the process.
</p>
<p class='vspace'></p><p>2008.07.11 New distributors: <a class='urllink' href='http://www.robotev.com/index.php?cPath=21' rel='nofollow'>Robotev</a> in Bulgaria and <a class='urllink' href='http://www.linuxcenter.ru/shop/embedded/' rel='nofollow'>Linux Center</a> in Russia. Full list on the <a class='wikilink' href='http://arduino.cc/en/Main/Buy'>buy</a> page.
</p>
<p class='vspace'></p><p>2008.05.17 New Hardware: <a class='urllink' href='http://www.arduino.cc/blog/?p=39' rel='nofollow'>Arduino Nano</a> available for pre-order, by <a class='urllink' href='http://store.gravitech.us/' rel='nofollow'>Gravitech</a>. Shipping June 16.
</p>
<p class='vspace'></p><p>2008.04.29 Check out: <a class='urllink' href='http://www.mecharoboshop.com/Products/physicalcomputing/arduino/' rel='nofollow'>Mecharoboshop</a>, our latest distributor in Japan
</p>
<p class='vspace'></p><p>2008.04.14 <a class='urllink' href='http://www.plughouse.co.kr' rel='nofollow'>Plughouse</a> becomes the first Arduino distributor in South Korea
</p>
<p class='vspace'></p><p>2008.03.28 Arduino 0011 now available (<a class='wikilink' href='http://arduino.cc/en/Main/ReleaseNotes'>release notes</a>): <a class='urllink' href='http://www.arduino.cc/files/arduino-0011-mac.zip' rel='nofollow'>Mac OS X</a>, <a class='urllink' href='http://www.arduino.cc/files/arduino-0011-win.zip' rel='nofollow'>Windows</a>, <a class='urllink' href='http://www.arduino.cc/files/arduino-0011-linux.tgz' rel='nofollow'>Linux</a>.
</p>
<p class='vspace'></p><p><br clear='all' />
</p>
<p class='vspace'></p><h3>Workshops (<a class='wikilink' href='http://arduino.cc/en/Main/Workshops'>archive</a>)</h3>
<p>28 and 29 March, 2009 <a class='urllink' href='http://www.tinker.it/it/now/2009/03/10/workshop-arduino-a-milano-28-e-29-marzo/' rel='nofollow'>Workshop su Arduino</a> a Milano, Italia
</p>
<p class='vspace'></p><p>7 March, 2009 <a class='urllink' href='http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1234645199' rel='nofollow'>Flash and Physical Computing</a> in Boston, US
</p>
<p class='vspace'></p><p>5-6 March, 2009 <a class='urllink' href='http://blushingboy.org/content/16kb-sound' rel='nofollow'>16KB of Sound</a> by <span class='wikiword'>BlushingBoy</span> at Arteleku, Spain
</p>
<p class='vspace'></p><p>22 February, 2009 <a class='urllink' href='http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1234325654' rel='nofollow'>Arduino class</a> at the <span class='wikiword'>TechShop</span>, San Francisco, US
</p>
<p class='vspace'></p><p>21 February, 2009 <a class='urllink' href='http://thehacktory.org/classes/arduino-beginner-microcontroller-amp-electronics-class' rel='nofollow'>Arduino starting class</a> at the Hacktory, Philly, US
(...)
J'ai un petit problème, si le serveur est indisponible durant une lecture, ça me plante mon sketch.
J'aimerais faire une validation de la connection qui me permettait ensuite de continuer le traitement des données entrantes si il y en a et qui me mettrait en attente lorsque rien ne rentre.
Je pensais faire un code genre :
if(loadBytes()<0){}
Mais ça ne fonctionne pas, si quelqu'un pouvait m'indiquer une piste pour faire ça
J'ai fait ce code pour controler ma connection, ça fonctionne plus longtemps que si ce controle n'était pas là, mais ça plante au bout d'un moment et jamais après le même nombre de demande url.
java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.Socket.connect(Socket.java:524)
at java.net.Socket.connect(Socket.java:474)
at sun.net.NetworkClient.doConnect(NetworkClient.java:157)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:388)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:523)
at sun.net.www.http.HttpClient.<init>(HttpClient.java:231)
at sun.net.www.http.HttpClient.New(HttpClient.java:304)
at sun.net.www.http.HttpClient.New(HttpClient.java:321)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:839)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:791)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:716)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:960)
at java.net.URL.openStream(URL.java:1007)
at processing.core.PApplet.createInputRaw(PApplet.java:4001)
at processing.core.PApplet.createInput(PApplet.java:3970)
at processing.core.PApplet.loadBytes(PApplet.java:4144)
at scann.draw(scann.java:133)
at processing.core.PApplet.handleDraw(PApplet.java:1425)
at processing.core.PApplet.run(PApplet.java:1327)
at java.lang.Thread.run(Thread.java:613)
The file "http://www.LURLOUJELISMESDONNEES" is missing or inaccessible, make sure the URL is valid or that the file has been added to your sketch and is readable.
Exception in thread "Animation Thread" java.lang.NullPointerException
at scann.draw(scann.java:135)
at processing.core.PApplet.handleDraw(PApplet.java:1425)
at processing.core.PApplet.run(PApplet.java:1327)
at java.lang.Thread.run(Thread.java:613)
Et cette ligne est soulignée avec un "NullPointerException" :
Tu pourrais très bien te monter le serveur sur ta machine en local (donc en principe toujours disponible) au lieu d'aller chercher à l'extérieur sur internet.
Il y a des installations simple est complète sous windows avec Apache, PHP et MySQL
EasyPHP www.easyphp.org/
ZazouMiniWebServerhttp://www.zmws.com/
Ce qui est intéressant en allant sur des serveurs "extérieurs" c'est de pouvoir obtenir des infos que l'on arrive pas à obtenir en local.... comme des données météo par exemple.
Je pense avoir trouver le problème qui me provoquait ce plantage, mais pour l'instant je teste et ça n'a jamais tenu aussi longtemps
Je suis maintenant sur un projet qui utilise les mêmes fonction décrites plus haut et j'ai toujours ce problème lors d'une connection qui n'aboutit pas, cette ligne me fige le processus et je doit tout relancer :
line = reader.readLine();
Est ce que quelqu'un saurait comment mettre une sorte de TimeOut en rapport avec cette ligne ?
J'ai pas eu à faire grand chose pour que ça tourne sur Processing :
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
/**
*
* A complete Java class that shows how to open a URL, then read data (text) from that URL,
* HttpURLConnection class (in combination with an InputStreamReader and BufferedReader).
*
* @author alvin alexander, devdaily.com.
*
*/
void draw(){
try
{
String myUrl = "http://lesiteoujenvoimesrequetes.com";
// if your url can contain weird characters you will want to
// encode it here, something like this:
// myUrl = URLEncoder.encode(myUrl, "UTF-8");
String results = doHttpUrlConnectionAction(myUrl);
System.out.println(results);
}
catch (Exception e)
{
// deal with the exception in your "controller"
}
}
/**
* Returns the output from the given URL.
*
* I tried to hide some of the ugliness of the exception-handling
* in this method, and just return a high level Exception from here.
* Modify this behavior as desired.
*
* @param desiredUrl
* @return
* @throws Exception
*/
private String doHttpUrlConnectionAction(String desiredUrl)
throws Exception
{
URL url = null;
BufferedReader reader = null;
StringBuilder stringBuilder;
try
{
// create the HttpURLConnection
url = new URL(desiredUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// just want to do an HTTP GET here
connection.setRequestMethod("GET");
// uncomment this if you want to write output to this url
//connection.setDoOutput(true);
// give it 15 seconds to respond
connection.setReadTimeout(5*1000);
connection.connect();
// read the output from the server
reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
stringBuilder = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null)
{
stringBuilder.append(line + "\n");
}
return stringBuilder.toString();
}
catch (Exception e)
{
//e.printStackTrace();
println("url not found");
throw e;
}
finally
{
// close the reader; this can throw an exception too, so
// wrap it in another try/catch block.
if (reader != null)
{
try
{
reader.close();
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
}
}
}
désolé de remonter un peu ce sujet, mais tu script final permet de lire le code source d'un site internet, et ton sujet parle d'envoyer des données? Je suis intéressé par les 2 donc ça me plait
Y a t il un moyen d'utiliser processing pour éditer une sorte de blog (je dis blog car au moins on a une adresse fixe et gratuitement/simplement).
Je suppose que ça doit énormément dépendre du site/blog concerné!
Enfin voilà je ne sais même pas si je cherche dans le bon sens, le but serai d'envoyer des données d'un sketch processing à un autre, sans avoir recours à des adressages IP dynamique et autres joyeusetés payantes et/ou en dehors de mes compétences.
Merci, je vais rechercher sur ça.
Je sais que ma question est vague, car en fait je connais pas du tout la manière de procéder, je voudrais envoyer basiquement une valeur d'un sktech à un autre, en réseau local cela fonctionne très bien (bibliothèque processing de serveur et client) mais si on va sur internet ça se complique incroyablement et je ne peux pas déplacer mon serveur ou mon client sans tout avoir à reconfigurer... c'est pour ça que j'ai pensé qu'un sketch modifierai une page web (il suffirai peut être de l'adresse et des infos de login pour avoir accès à l'écriture) et l'autre sketch lirai le code source de cette page et en déduirai la valeur transmise.
Dans ma tête cette méthode ne nécessite quasi aucun paramétrage si on déplace le "serveur" et le "client", du moment qu'ils ont accès à internet.
après j'aurais sans doute un problème de vitesse d'actualisation de données...