Go Down

Topic: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz ) (Read 112565 times) previous topic - next topic

chicotore

Bonjour a tous,

J'ai donc réussit a récupérer sur la toile un code avec deux boutons que j'ai remis a ma sauce ! je me suis donc dit "aller on tente de faire 4 boutons", je compile nikel ça me détecte pas d'erreur mais biensur une fois que je veut accéder a la page ça ne fonctionne pas et pour moi impossible de voir l'erreur ! pour moi c'est cohérent ...

Code Arduino 2 boutons (fonctionnel ):



Code Arduino 4 boutons (non fonctionnel ):



PS: j'ai mis les codes sur megaupload car ils sont trop long pour être posté sur le forum dans les balises
Code: [Select]
^^

chicotore

Bon bah j'ai essayer de modifier 2 ou 3 trucs mais c'est pas ça, ça ne fonctionne toujours pas  :smiley-yell:

chicotore

Bonjour a tous,

Bon comme je n'arrive toujours pas a augmenter mon nombre de bouton et que personne ne veut m'aider  =(, j'essaye donc d'avancer et d'intégrer la sonde de température a ma page. Il s'agit d'une sonde type LM35.
J'ai donc intégrer mon code dans l'arduino, j'ai un bon retour d'information sur le serial monitor mais je coince c'est pour l'afficher sur ma page. En effet sur un LCD, il y a la fonction très intuitive qu'est "lcd.print(le nom de la variable);" mais avec l'ethernet-shield comment faire ?

j'ai regarder l'exemple avec une sonde DSxxxxx Onewire mais je pige pas trop comment faire afficher la température sur la page ... quelqu'un pourrais me donner un coup de pouce ? et je veut bien aussi de l'aide toujours a propos de mes boutons car je suit bloqué pour une connerie et pas loin de tous abandonner car ça commence a me souler de toujours me retrouver bloqué tous les 5 minutes  :smiley-yell:

merci

chabot380

Salut chico !  ;)

dans ta page tu mets :
Quote

          client.print("Temperature: ");
          client.print(temperature);
          client.print(" degrees C");


ça doit marcher.

A+
Ubuntu16.04
ARDUINO UNO / Atemga2560pro / Arduino Nano
Technicien Télé Vidéo à la retraite.

al1fch

Chicotore tu n'est pas le seul à avoir des difficultés à exploiter le ENC28J60 avec la librairie que les vendeurs de shields indiquent !!! C'est une librairie qui a le mérite d'exister mais ne permet pas d'écrire du code très lisible. D'ou un besoin : une librairie plus accessible pour ce composant économique.

Je connais deux voies en chantier mais déjà fonctionnelles :
-celle de JeeLabs et de sa librairie Ethercard que j'ai un peu petit peu utilisé.
-celle plus ambitieuse de Turicas qui vise le fonctionnement sur ENC28J60 des sketches 'officiels' pour W5100.
Je n'ai pas encore testé cette dernière mais ça vaudrait peut être le coup de faire une pause et de travailler un peu à partir des petits exemples de serveurs inclus avec cette librairie. ça pourrait t'ouvrir la voie du client.print indiqué par Chabot380.....
https://github.com/turicas/Ethernet_ENC28J60
Bon courage

chicotore

Ouais c'est une vrai galère cet ENC28J60 ....

Je pense mettre un terme a mon projet domotique, pour le moment je me vois mal finaliser quelque chose de cohérent ... je n'est pas, seul, les compétence nécessaire a un tel projet ! Je suit en pleine reflexion car ce projet me tenais a coeur mais je n'arrive même pas a passer de 2 à 4 boutons sur mon interface ... et je parle même pas du capteur de température  =(

ekaki


(...) j'ai un bon retour d'information sur le serial monitor mais je coince c'est pour l'afficher sur ma page. En effet sur un LCD, il y a la fonction très intuitive qu'est "lcd.print(le nom de la variable);" mais avec l'ethernet-shield comment faire ?
(...)

Je n'ai pas l'habitude des shields ETH mais cela me fait penser à un soucis similaire lors d'un affichage via interface RS232; la fonction ?.print(variable) ne fonctionne pas.
Il faut passer par une transformation de la variable en chaine afin de pouvoir l'envoyer par le print().
Un peu casse-bonbons et consomme de la ressource, mais à priori pas d'autres solutions...

osaka

Bonjour, j'ai suivi un peux ce sujet parce qu'il m’intéresse et là j'ai l'impression que tu met la charrue avant les bœufs
A ta place j'aurais suivis les recommandations de ojal


Je me permets de revenir une fois de plus dans cette discussion...
Je ne comprends pas du tout comment ce projet avance... Vous en êtes à essayer un problème très ponctuel d'affichage d'une image alors qu'aucune base n'a été définie pour ce projet de domotique...
Une fois de plus, je préconise d'établir un cahier des charges, définir des orientations d'architecture etc etc...

Qu'en pensez-vous?






Mon cahier des charges se définie sur le tas suivant ce que j'arrive a mettre en place et ce que je n'arrive pas a faire !



Le plus gros du problème ce situe là et reprendre le code (de plus complexe et imbuvable) de quelqu'un d'autre est une mauvaise idée quand on ne maitrise pas un peux le sujet,limite ça peut juste servir d'exemple pour mieux comprendre.
Je sais que c'est pénible et qu'on a envie de tout avoir tout de suite avec un minimum d’investissement mais au final ça ne marchera pas, la preuve en est le résultat.

Prend ton temps, commence par maitriser un peux mieux le langage c (ou tout autre langage procédurale), les algorithmes de base et après tout te paraitra plus simple et clair, tu te demanderas même comment tu a pus faire certaine erreurs sur des chose pourtant très basiques et banales.

Je préféré être franc, pour l'instant tu perd ton temps  :~ .
Il est préférable de perdre 1 mois à ton aise (sur le site du zéro par ex) avec les bases plutôt que d'avancé et galérer 6 mois pour un résultat qui marchera peut être mais qui sera bancal, sans possibilité d'évolution (dépendances), bugger et non optimal.

Entre () j'ai aussi un projet domotique mais je pencherais plutôt sur une solution pages web hébergées délocalisée,ajax (XMLHttpRequest) ,serveur et contrôleur arduino + protocole maison genre x10 en hexa pour la communication et commandes entre le serveur arduino et le client (web).
Ajax sera remplacé à terme par les websocket (standardisé) histoire de pouvoir notifié au client (l'explorateur) d'un changement d'état d'un capteur ou autre (impossible sans rafraichissement de la page par ex pour ton problème avec le lm35).
J'ai déjà développé une application modulaire (plcbus, 1wire, ...) serveur (socket) de domotique en java donc ça ne devrait pas être trop compliqué d'appliqué les même principe à l'arduino.

Désolé si je t'ai découragé ou autre mais ce ne serait pas te rendre service que de t'aider à "débugger" ton code.


Je n'ai pas l'habitude des shields ETH mais cela me fait penser à un soucis similaire lors d'un affichage via interface RS232; la fonction ?.print(variable) ne fonctionne pas.
Il faut passer par une transformation de la variable en chaine afin de pouvoir l'envoyer par le print().
Un peu casse-bonbons et consomme de la ressource, mais à priori pas d'autres solutions...


normal non ?

http://arduino.cc/en/Serial/Print
Quote

print()
Description

Prints data to the serial port as human-readable ASCII text ...

chicotore



osaka

Moi je dis repose toi  :smiley-sleep:, étudie un peut tout ça  ]:D et plus tard repart sur de bonne base  :%.

chabot380

Quote
Sur ebay j'ai prit le moins chère, 10€ ethernet-shield chinois

Oui mais vrai casse tête chinois pour programmation petit scarabé !


Regarder lien là : http://www.ordinoscope.net/index.php/Electronique/Hardware/Communication/ENC28J60

A+ petit scarabé
Maître chabot.

Ubuntu16.04
ARDUINO UNO / Atemga2560pro / Arduino Nano
Technicien Télé Vidéo à la retraite.

al1fch

#87
Aug 07, 2011, 04:28 pm Last Edit: Aug 07, 2011, 04:47 pm by al1fch Reason: 1
Je me permet d'insister lourdement sur l'existence d'une nouvelle librairie pour Ethershield
développée par Turicas (https://github.com/turicas/Ethernet_ENC28J60).
Elle n'est pas finalisée mais déjà opérationnelle.
C'est une Librairie Ethernet pour Ethershield !
On utilise une Ethershield comme si c'était un shield (officiel) à base de W5100... avec le confort de codage qui va avec.
Un coup d'oeil à l'exemple (un des 7 exemples fournis avec) ci dessous montre à mon avis que le résultat est déjà intéressant. On croirait voir un programme ecrit pour la carte 'officielle'.
Les 'client.print' n'y manquent pas... on y voit également l'affichage de valeurs prises sur des entrées analogiques (pourquoi pas un LM35 ?)

Avant de jeter éventuellement l'éponge ton projet mérite sans doute d'aller faire un tour de piste avec cette librairie. (Il peut etre nécessaire de modifier la ligne 39 du fichier "enc28j60.c" pour tenir compte du câblage de la broche CS sur la carte utilisée)


chicotore

J'ai essayer la nouvelle librairie dès que tu l'as posté ici mais chez moi ça ne fonctionne pas.

Code: [Select]
#include <Ethernet.h>
#define LED 8

byte mac[] = { 0x54, 0x55, 0x58, 0x10, 0x00, 0x24 };
byte ip[] = {192,168,1,15};
char link[30], LEDStatus[4];

Server server(80);

void setup() {
  pinMode(LED, OUTPUT);
  Ethernet.begin(mac, ip);
  server.begin();
}

void loop() {
  Client client = server.available();
  if (client) {
    char request[10];
    int i = 0;
    boolean current_line_is_blank = true;
    request[9] = '\0';
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if (i < 9) {
          request[i] = c;
          i++;
        }
        if (c == '\n' && current_line_is_blank) {
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
         
          client.println("<html><head><title>Arduino etherShield</title></head><body>");
          client.println("<h1>Arduino etherShield Example</h1>");
          client.println("<table>");
          client.print("<tr><td>Analog inputs:</td><td><b>");
          for (int x = 0; x < 6; x++) {
            client.print(x);
            client.print(" = ");
            client.print(5000 * (analogRead(x) / 1024.0));
            client.print(" mV<br>");
          }
          client.println("</b></td></tr><tr><td>uptime:</td> <td><b>");
          client.print(millis() / 1000.0);
          client.println(" seconds</b></td></tr>");
          if (strncmp("GET /off", request, 8) == 0) {
            digitalWrite(LED, LOW);
            sprintf(LEDStatus, "OFF");
            sprintf(link, "<a href=\"/on\">Turn on</a>");
          }
          else {
            sprintf(LEDStatus, "ON");
            digitalWrite(LED, HIGH);
            sprintf(link, "<a href=\"/off\">Turn off</a>");
          }
          client.print("<tr><td>LED status:</td> <td><b>");
          client.print(LEDStatus);
          client.println("</b></td></tr><tr><td colspan=\"2\" align=\"center\">");
          client.println(link);
          client.println("</td></tr></table></body></html>");
          break;
        }
        if (c == '\n') {
          current_line_is_blank = true;
        } else if (c != '\r') {
          current_line_is_blank = false;
        }
      }
    }
    delay(1);
    client.stop();
  }
}


Impossible d'accéder au serveur ....

Quote
(Il peut etre nécessaire de modifier la ligne 39 du fichier "enc28j60.c" pour tenir compte du câblage de la broche CS sur la carte utilisée)


Comment connaitre cette broche ? si cette librairie est faite pour le shield en enc28j60 la broche devrais être la bonne non ?

al1fch

cette librairie reprend le câble normal d'une carte Ethershield non modifiée = CS en pin10 (pin 53 pour carte Mega).  Je n'avais pas eu de probleme avec un 28J60 monté sur plaque d'essai.
Dès que possible ( en soirée) je regarde à nouveau de près.
Le déplacement du CS commence à intervenir quand il y a conflit avec d'autres composants SPI (carte SD...)

Go Up