Bonjour
je ne sais pas si je suis dans le bon sujet. A modifier si necessaire.
Je cherche à lire des infos sur une Arduino Uno + Shield Ethernet R3 sans passer par un plugin du type
Jeeduino
Actuellement j’ai un petit programme dans ma Uno qui permet de voir dans mon exploreur des valeurs et des états que je peux modifier, je tape IP et j’ai ça:
Ceci avec ce code dans ma Uno: (origine du code inconnu un vieux code que j’avais trouvé il y a bien longtemps)
#include <SPI.h> //bibliothèqe pour SPI
#include <Ethernet.h> //bibliothèque pour Ethernet
#include <SD.h> // bibliothèque pour la carte SD
byte mac[] = {à inserer ici}; // tableau pour l'adresse MAC de votre carte
byte ip[] = {192, 168, 1, 40}; //tableau pour l'adresse IP
EthernetServer serveur(80); // déclare l'objet serveur au port d'écoute 80
// Initialise notre serveur
unsigned long tpsDep; //temps départ pour la gestion des LED
int pinLed[5] = {2, 3, 5, 6, 7}; //tableau des pins de LED
boolean etatLed[5] = {0, 0, 0, 0, 0}; //tableau des états des LED
int modeLed[5] = {0, 0, 0, 0, 0}; // tableau des modes des LED
void setup() {
for (int l = 0; l < 5; l++) {
pinMode(pinLed[l], OUTPUT);
}
Serial.begin (9600); //initialisation de communication série
Ethernet.begin (mac, ip); //initialisation de la communication Ethernet
Serial.print("*\n-> Le serveur est sur l'adresse : ");
Serial.println(Ethernet.localIP()); //on affiche l'adresse IP de la connexion
serveur.begin(); // démarre l'écoute
}
void loop() {
gestionClient(); // fonction qui gère toute la communication avec le client
gestionLed(); // fonction qui gère l'allumage des LED
}
//----------------------Fonctions----------------------
//fonction qui gère la communication avec le client
void gestionClient() {
EthernetClient client = serveur.available(); //on écoute le port
if (client) { //si client existe
Serial.println("Client en ligne"); //on le dit...
if (client.connected()) { // si le client est connecté
GET(client); //appel de la fonction de décodage
//réponse au client
entete(client); // fonction pour l'entête de la page HTML
corps(client); // fonction pour le corps
piedPage(client); // fonction pour le pied de page
Serial.println("Fin de communication avec le client\n");
client.stop(); //on déconnecte le client
}
}
}
//fonction de fabrication de l'entête HTML
void entete(EthernetClient cl) {
//infos pour le navigateur
cl.println("HTTP/1.1 200 OK"); // type du HTML
cl.println("Content-Type: text/html; charset=ascii"); //type de fichier et encodage des caractères
cl.println("Connection: close"); // fermeture de la connexion quand toute la réponse sera envoyée
cl.println();
//balises d'entête
cl.println("<!DOCTYPE HTML>");
cl.println("<html>");
cl.println("<head><title>Web-Commande de LED</title></head>");
cl.println("<body><h1>Web-Commande de LED</h1><hr><br>");
////
//NOUVEAU ajoute état de pins
{
cl.println("<h1>Etat des pins analogiques</h1>"); //titre en grosse lettres
cl.println("<hr>"); //ligne horizontale
for (int p=0;p<5;p++){ // boucle pour parcourir les pins
cl.print("pin Analogique"); // affichage
cl.print(p); //numéro de pin
cl.print(" : "); // affichage
cl.print(analogRead(p)); //valeur donnée par le CAN
cl.print("<br>"); //saut de ligne
}
}
////
}
//fonction de fabrication du corps de page
void corps(EthernetClient cl) {
cl.println("<br>"); // saut de ligne
//boucle pour construire chaque ligne en fonction des LED
for (int l = 0; l < 5; l++) {
cl.print("<br>LED ");
cl.print(l);
cl.print(" ");
Serial.println(l);
switch (modeLed[l]) {
case 0:
cl.print("OFF ");
break;
case 1:
cl.print("ON ");
break;
case 2:
cl.print("CLI ");
break;
}
cl.print(" <a href=?"); //création du lien inutile de répéter l'adresse du site
cl.print(l);
cl.println(" target=_self >Change</a><br>");
}
}
//fonction de fabrication du pied de page
void piedPage(EthernetClient cl) {
//balises de pied de page
cl.println("<br><hr>");
cl.println("</body>");
cl.println("</html>");
}
//fonctin décodage GET
void GET(EthernetClient cl) {
boolean lu = 0; //variable pour indiquer l'état de lecture
while (cl.available()) { // tant qu'il a des infos à transmettre
char c = cl.read(); // on lit le caractère
delay(1); //delai de lecture
if (c == '?' && lu == 0) { //si "?" repéré
c = cl.read(); //on lit le caractère suivant qui contient la donnée
int led = int(c) - 48; //on la transforme en nombre
modeLed[led] = (modeLed[led] + 1) % 3; //on change l'état de la LED
delay(10);
lu = 1; // on dit qu'on a lu l'info
}
}
}
//fonction d'allumage des LED par rapport au tableau de mode.
void gestionLed() {
unsigned long tpsAct = millis(); // récupération du temps actuel
if (tpsAct - tpsDep > 250) { //si délai dépassé
for (int l = 0; l < 5; l++) { // chaque LED
if (modeLed[l] == 0) { // si mode éteint
etatLed[l] = 0; // on éteind
}
else if (modeLed[l] == 1) {// si mode allumé
etatLed[l] = 1; //on allume
}
else if (modeLed[l] == 2) { //si mode clignotant
etatLed[l] = !etatLed[l]; //on inverse l'état
}
digitalWrite(pinLed[l], etatLed[l]); //on met le pin à jour
tpsDep = tpsAct; //on réinitialise le temps
}
}
}
Et t il possible avec un virtuel et ou un scenario de récupérer les infos de la page Web directement sur la Uno
je suis un bidouilleur sans connaissances en informatique, je cherche un truc simple.
Bonne journée