ce n'était pas une grosse modif, j'ai copié la fonction d'export json.
j'ajoute une autre modif, puisque j'ai résolu mon soucis avec mon capteur DHT11 (je déclarais une variable pour la broche utilisée, mais en fait, je ne m'étais pas rendu compte que j'appelais la fonction avec un numéro "en dur").
Pour ajouter température et humidité, j'utilise les librairies d'Adafruit ("Adafruit DHT unified" et "DHT sensor library"):
dans le fichier wifinfo.ino, du coté des déclarations de variables:
#include <DHT.h>
DHT dht(14, DHT11, 15);
dans "UpdateSysinfo", la lecture de la sonde (avec 2 essais en cas de non réponse)
int retry = 0;
float h = dht.readHumidity();
while (isnan(h) && (retry <2)) {
delay(500);
h = dht.readHumidity();
retry++;
}
sprintf( buff, "%f", h);
sysinfo.humidity = h;
float t = dht.readTemperature();
retry = 0;
while (isnan(t) && (retry <2)) {
delay(500);
t = dht.readTemperature();
retry++;
}
sprintf( buff, "%f C", t);
sysinfo.temperature = t;
Pour stocker les données, modif de la structure dans wifinfo.h:
// sysinfo informations
typedef struct
{
String sys_uptime;
String temperature;
String humidity;
} _sysinfo;
Dans webserver.cpp, modif de la sortie des infos "getSysJSONData"
response += "{\"na\":\"Uptime\",\"va\":\"";
response += sysinfo.sys_uptime;
response += "\"},\r\n";
response += "{\"na\":\"Temperature\",\"va\":\"";
response += sysinfo.temperature ;
response += " °C\"},\r\n";
response += "{\"na\":\"Humidity\",\"va\":\"";
response += sysinfo.humidity ;
response += " %\"},\r\n";
j'exporte aussi ces données dans les exports json, xml et raw, dans leurs fonctions respective:
void sendJSON(void)
{
ValueList * me = tinfo.getList();
String response = "";
// Got at least one ?
if (me) {
// Json start
response += FPSTR(FP_JSON_START);
response += F("\"_UPTIME\":");
response += seconds;
response += F(",\"_TEMPERATURE\":");
response += sysinfo.temperature;
response += F(",\"_HUMIDITY\":");
response += sysinfo.humidity;
(...)
}
void sendXML(void)
{
ValueList * me = tinfo.getList();
String response = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<data>\r\n";
// Got at least one ?
if (me) {
// Json start
response += F("<_UPTIME>");
response += seconds;
response += F("</_UPTIME>\r\n");
response += F("<T>");
response += sysinfo.temperature;
response += F("</T>\r\n");
response += F("<H>");
response += sysinfo.humidity;
response += F("</H>\r\n");
(...)
}
void sendRAW(void)
{
ValueList * me = tinfo.getList();
String response = "";
// Got at least one ?
if (me) {
// Json start
response += F("UPTIME ");
response += seconds;
response += F(" #\r\n");
response += F("T ");
response += sysinfo.temperature;
response += F(" #\r\n");
response += F("H ");
response += sysinfo.humidity;
response += F(" #\r\n");
(...)
}
Selon la broche utilisée pour votre DHT11, changez la ligne
DHT dht(14, DHT11, 15);
J'utilise la GPIO14 (D5), car sur mon nodeMCU, on a cote à cote 3V-GND-D5, ce qui correspond à l'ordre des broches de mon capteur.
alt text
Attention si vous utilisez ce capteur:
alt text
L'ordre des broches est différent.
Si vous utilisez un DHT22, ça marche aussi, il suffit de remplacer DHT11 par DHT22.
Le 3ème paramètre (15) n'est normalement plus utilisé sur les versions récente de la librairie. Il permet d'ajuster la vitesse de lecture à la vitesse du CPU. C'est maintenant automatique.