Bonjour à tous,
j'aimerais pouvoir récupérer la date qui est généré via un script Javascript sur mon serveur afin de la stocker dans une variable sur le arduino, je ne sait pas trop comment m'y prendre.
Pour l'instant j'arrive à envoyer des données sur le site mais j'aimerais faire l'inverse, j'utilise des requette XML avec AJAX.
Je vous poste mon code ainsi qu'une image de ma page WEB :
/*--------------------------------
Programme mis en place par Quentin
dans le cadre du stage de BTS à l'Institut Pascal.
Ce programme s'utilise avec un shield ethernet, il permet
d'afficher des valeurs en continue sur une page Web
dynamique.
Dans ce programme la Fonction F() dans les prints
permet d'économiser de la mémoire vive.
---------------------------------*/
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // Adresse mac du shield
IPAddress ip(172, 27, 11, 254); // Adresse Ip ( à changer en fonction de son réseaux )
EthernetServer server(80); // ici on créer un serveur sur le port 80
String HTTP_req; // on store la requete HTTP
void setup()
{
Serial.begin(9600); // on démarre la liaison série a 9600 Bps
Serial.print(F("Parametrage avec ip fixe... : "));
Serial.println(ip);
delay(1000);
// on paramètre la carte en IP FIXE
Ethernet.begin(mac, ip); // Initialisation du shield Ethernet
Serial.println(F("Init..."));
delay(1000);
server.begin(); // On démarre le serveur
Serial.println(F("Serveur Prêt !"));
delay(1000);
}
void loop()
{
EthernetClient client = server.available(); // On essaye d'avoir des clients
if (client) { // Si un client est disponible
boolean currentLineIsBlank = true;
while (client.connected()) { // et qu'il est connecté
if (client.available()) // et qu'il envoie des données
{
char c = client.read(); // lire 1 byte (character) du client
HTTP_req += c; // on sauvegarde les requette HTTP 1 char à la fois
// la dernière ligne de la requette client est blanche et finit par \n
// On repond au client seulement quand la dernière ligne est recue
if (c == '\n' && currentLineIsBlank) {
// envoyer un en-tête de réponse http standard
client.println(F("HTTP/1.1 200 OK"));
client.println(F("Content-Type: text/html"));
client.println(F("Connection: keep-alive"));
client.println(); // ligne indispensable
// Requette AJAX pour les états
if (HTTP_req.indexOf("ajax_analog") > -1) {
// lit l'état de l'entrée analogique
GetAjaxData(client);
}
else { // requette HTTP pour la page WEB
// envoie la page WEB - contient le JavaScrypt avec les appels AJAX
client.println(F("<!DOCTYPE HTML>"));
client.println(F("<html>"));
client.println(F("<head>"));
// Balise Style contenant la mise en forme de la page
client.println(F("<style>"));
client.println(F("body {background-color: #ad836e;}"));
client.println(F("h1 {font-size: 3em; text-align: center;}"));
client.println(F("div {display: inline-block;}")); // permet de définir une balise div en inline
client.println(F("h2 {font-size: 2em; border: 1px solid black; width: 500px; margin: auto; margin-bottom: 100px; padding-left: 150px;}"));
client.println(F("#time {line-height: 50px;}"));
client.println(F("</style>"));
client.println(F("<meta charset=\"utf-8\" />")); // encodage
client.println(F("<title> MESURE D'UNE PIECE </title>"));
// JavaScript permettant de refresh la div de température et d'humidité
client.println(F("<script>"));
client.println(F("function GetSwitchAnalogData() {"));
client.println(F("nocache = \"&nocache=\" + Math.random() * 1000000;"));
client.println(F("var request = new XMLHttpRequest();"));
client.println(F("request.onreadystatechange = function() {"));
client.println(F("if (this.readyState == 4) {"));
client.println(F("if (this.status == 200) {"));
client.println(F("if (this.responseText != null) {"));
client.println(F("document.getElementById(\"sw_an_data\").innerHTML = this.responseText;"));
client.println(F("}}}}"));
client.println(F("request.open(\"GET\", \"ajax_analog\" + nocache, true);"));
client.println(F("request.send(null);"));
client.println(F("setTimeout('GetSwitchAnalogData()', 1000);"));
client.println(F("}"));
client.println(F("</script>"));
client.println(F("</head>"));
client.println(F("<body onload=\"GetSwitchAnalogData()\" >"));
client.println(F("<header>"));
client.println(F("<h1> Récupération des mesures de la pièce </h1>"));
client.println(F("</header>"));
client.println(F("
"));
client.println(F("<section>"));
client.println(F("<h2> TEMPERATURE : <div id=\"sw_an_data\"></div> °C </h2> <H2> HUMIDITE : % </h2>")); // dans la div sera écrit la température
client.println(F("<h2 id=\"time\"> DATES DES MESURES : <script type=\"text/javascript\" language=\"javascript\">"));
client.println(F("d = new Date();"));
client.println(F("document.write(d.toLocaleDateString()+' '+d.toLocaleTimeString());"));
client.println(F("</script> </h2>"));
client.println(F("</section>"));
// pied de page
client.println(F("<footer>"));
client.println(F("<p> Page Web réalisée par Quentin dans le cadre du stage de BTS </p>"));
client.println(F("</footer>"));
client.println(F("</body>"));
client.println(F("</html>"));
}
Serial.print(HTTP_req); // Affiche les requette HTTP recue sur le port série
HTTP_req = ""; // finished with request, empty string
break; // sortir de la boucle
}
// toutes les lignes de textes recue par le client finissent par \r\n
if (c == '\n') {
// dernier caractère en ligne du texte reçu
// début de la nouvelle ligne avec le prochain caractère lu
currentLineIsBlank = true;
}
else if (c != '\r') {
// un caractère de texte a été reçu du client
currentLineIsBlank = false;
}
} // end if (client.available())
} // end while (client.connected())
delay(1); // On donne le temps au navigateur internet de recevoir les informations.
client.stop(); // On ferme la connection
} // end if (client)
}
// Envoie l'état de l'analogique au serveur web
void GetAjaxData(EthernetClient cl)
{
float temp;
temp = analogRead(0)*5/1024.0; // on lit le pin Analog 2
temp = temp -0.5; // Calibrage de la température à 0°C car à 0°C le capteur délivre 500mV
temp = temp/0.01; // 10mV par °C
cl.print(temp); // écrit la valeur de l'analog sur la div
}