Go Down

Topic: Un WEB server ARDUINO sur Ethernet + graphes HighCharts (Read 938 times) previous topic - next topic

hbachetti

Ce topic a éveillé ma curiosité : Afficher un graphique sur une page WEB

Ayant déjà pratiqué HighCharts sur un serveur PYTHON CherryPy, j'ai voulu expérimenter la chose avec une NANO.

Un WEB server ARDUINO sur Ethernet

Un peu galère à écrire mais ça fonctionne plutôt pas mal.



Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

hbachetti


Mise à jour : utilisation de templates HTML avec des tags :

Code: [Select]

#include <Arduino.h>

const char PROGMEM tempHumTemplate[] = "<script src = \"https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js\"></script>\n"
"<script src=\"https://code.highcharts.com/highcharts.js\"></script>\n"
"<script type=\"text/javascript\">\n"
"jQuery(document).ready(function() {\n"
"  var optionsTemp = {\n"
"    chart: {\n"
"      renderTo: 'containerTemp',\n"
"      type: 'line'\n"
"    },\n"
"    title: {\n"
"      text: 'Temperature'\n"
"    },\n"
"    xAxis: {\n"
"      categories: [$(TEMP_CATEGORIES)]\n"
"    },\n"
"    yAxis: {\n"
"      title: {\n"
"        text: 'Temperature (°C)'\n"
"      }\n"
"    },\n"
"    series: [{\n"
"      name: 'Temperature',\n"
"      data: [$(TEMP_DATA)]\n"
"    }]\n"
"  };\n"
"  var optionsHum = {\n"
"    chart: {\n"
"      renderTo: 'containerHum',\n"
"      type: 'line'\n"
"    },\n"
"    title: {\n"
"      text: 'Humidity'\n"
"    },\n"
"    xAxis: {\n"
"      categories: [$(HUM_CATEGORIES)]\n"
"    },\n"
"    yAxis: {\n"
"      title: {\n"
"        text: 'Humidity (%)'\n"
"      }\n"
"    },\n"
"    series: [{\n"
"      name: 'Humidity',\n"
"      data: [$(HUM_DATA)]\n"
"    }]\n"
"  };\n"
"  var chartTemp = new Highcharts.Chart(optionsTemp);\n"
"  var chartHum = new Highcharts.Chart(optionsHum);\n"
"});</script>\n"
"<div id=\"containerTemp\" style=\"width:100%; height:400px;\"></div>\n"
"<div id=\"containerHum\" style=\"width:100%; height:400px;\"></div>\n";


Prochaine étape : lecture de templates à partir d'une SD.

@+
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

hbachetti

Je sais, le sujet a été traité 1000 fois sur ce forum et ailleurs.

Je possède cette carte :



L'alimentation se fait en 5V.

Librairie utilisée : Ethernet dernière version.
CS = 10
Il fonctionne sans problème avec une NANO (serveur HTTP).

Le module SDcard :



Sur la photo on ne voit pas les pins DO DI : la sérigraphie SPI se trouve derrière.
L'alimentation se fait en 3.3V.
8 résistances sur le module (adaptation des niveaux je suppose).

Librairie utilisée : SdFat dernière version.
CS = 4

Il fonctionne sans problème avec une NANO et l'exemple QuickStart.

Mais vous l'aurez sans doute deviné: les deux ensemble ne cohabitent pas.

Les deux branchés ensemble :
W5100 fonctionne sans problème.
SDCARD ne fonctionne pas.

La réponse logique est : mettre les CS du W5100 à 1.
Et beaucoup de gens ont résolu leur problème comme ça.
J'ai même tiré le CS à 1 avec un fil : nada

Le symptôme le plus visible : à l'oscilloscope la pin 12 MISO est tirée à ZÉRO par le W5100, quelque soit la position de son CS.
Quand j'essaie d'initialiser la SD La pin MISO ne dépasse pas 800 mV.

Il faut que je débranche le MISO du W5100 pour que la SD soit vue.

Même chose avec une autre carte Ethernet.

IDE 1.8.5

Pendant que j'écrivais ces lignes j'ai trouvé :  ;D

Il faut absolument initialiser la carte Ethernet si l'on désire utiliser la SdCard seule.

Code: [Select]

#include <Ethernet.h>

#define IP_ADDR   "192.168.1.177"
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip;

void setup() {
  Serial.begin(115200);

  ip.fromString(IP_ADDR);
  Ethernet.begin(mac, ip);
  if (Ethernet.hardwareStatus() == EthernetNoHardware) {
    Serial.println(F("Ethernet shield was not found.  Sorry, can't run without hardware. :("));
    while (true) {
      delay(1);
    }
  }
  if (!sd.begin(4, SPI_SPEED)) {
    if (sd.card()->errorCode()) {
      Serial.println("SD initialization failed");
    }
  }
  if (sd.exists("template.txt")) {
      Serial.println(F("template.txt found OK"));
  }



Et cela suffit. La pin MISO remonte.
Je pense qu'avec un Ethernet shield avec SD intégrée, on doit avoir le même problème.

Un dernier problème :
La carte SD ne s'initialise pas toujours.

Après raccourcissement des fils du SPI, toujours le même problème.

Solution : un condensateur 10µF entre VCC et GND du module SD.

@+
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

hbachetti


Certaines µSD donnent de mauvais résultats.
La Kingston SDHC 4Gb que j'utilisais au début produisait des défauts aléatoires : fichier non trouvé, présence de caractères étranges lors de lectures.

Avec une Sandisk Extreme SDHC le résultat est bien plus fiable.

@+
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

Go Up