Bonjour,
Finalement, le code ne va pas. Il a été puis ne va plus. Enfin, quand je dis qu’il ne va plus, c’est la majorité du temps. Il y a 2min, il a marché et maintenant plus…
Quand j’écoute avec l’intégration mqtt avec # , je ne vois rien qui se passe.
J’essaye de faire communiquer 10 dht22. J’ai également du passer de l,uno au mega car pas assez de memoire
si je me connecte à mon broker avec mqttlens, je vois les messages passer.
Lorsque j’utilise mqtt explorer, je ne vois pas mon arduino, mais lorsque j’envoie des messages avec mqttlens, ils apparaissent.
Je ne sais pas pourquoi mais je me demande si ca n’a pas à voir avec le clientid, le nom d’utilisateur ou le mot de passe (ils ne sont pas indiqué dans le code et je me demande si ce n’est pas ca qui bloque).
J’essaie d’intégrer des bouts de code de gens pour qui ca marche mais le logiciel fini toujours par me dire qu’il y a des erreurs.
Est-ce que quelqu’un a une idée? Ou alors un code fonctionnel avec le moyen de remplacer ses sensors avec des dht22?
J’ai modifié mon code pour intégrer mes 10 dht22. Si vous n’en comptez que 8, c’est normal. J’ai du en retirer 2 du code qui n’étaient pas raccordées.
Voici mon code:
// Arduino Mqtt et des capteurs DHT22 (temp/humidite )
//
// Exemple de reconnexion MQTT - non bloquant
// une recopie-modif du wiki FHEM : https://wiki.fhem.de/wiki/MQTT_Einführung_Teil_3
//
// Ce croquis montre comment garder le client connecté en utilisant
// une fonction de reconnexion non bloquante, Si le client perd sa connexion,
// il tente de se reconnecter toutes les 5 secondes sans bloquer la boucle principale.
//
//
// -------------- debut ---------------
#include <DHT.h>
#include <SPI.h>
#include <Ethernet.h>
#include <PubSubClient.h>
#define DHTPIN1 24
#define DHTPIN2 26
#define DHTPIN3 28
#define DHTPIN4 30
#define DHTPIN6 34
#define DHTPIN7 36
#define DHTPIN8 38
#define DHTPIN9 40
#define DHTTYPE1 DHT22
#define DHTTYPE2 DHT22
#define DHTTYPE3 DHT22
#define DHTTYPE4 DHT22
#define DHTTYPE6 DHT22
#define DHTTYPE7 DHT22
#define DHTTYPE8 DHT22
#define DHTTYPE9 DHT22
DHT dht1 (DHTPIN1, DHTTYPE1);
DHT dht2 (DHTPIN2, DHTTYPE1);
DHT dht3 (DHTPIN3, DHTTYPE1);
DHT dht4 (DHTPIN4, DHTTYPE1);
DHT dht6 (DHTPIN6, DHTTYPE1);
DHT dht7 (DHTPIN7, DHTTYPE1);
DHT dht8 (DHTPIN8, DHTTYPE1);
DHT dht9 (DHTPIN9, DHTTYPE1);
byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED }; // adresses mac
const char* mqtt_server = "192.168.1.2";
const char* client_name = "speakerswitch";
// ------------- mqtt ---------------//
void callback(char* topic, byte* payload, unsigned int length)
{
// gérer le message est arrivé
}
EthernetClient ethClient;
PubSubClient client(ethClient);
long lastReconnectAttempt = 0;
boolean reconnect()
{
if (client.connect("Arduino_rez", "home/Arduino_rez", 0, true, "offline"))
{
// Once connected, publish an announcement...
client.publish("home/Arduino_rez","online", true);
// ... and resubscribe
client.subscribe("inTopic");
}
return client.connected();
}
// Réservez la zone de stockage pour sauver la clôture //
// capteur0
static char humidity[15];
static char temperature[15];
float h = 0.0;
float h_alt = 0.0;
float t = 0.0;
float t_alt = 0.0;
// capteur1
static char char_h1[15];
static char char_t1[15];
float h1 = 0.0;
float h1_alt = 0.0;
float t1 = 0.0;
float t1_alt = 0.0;
// capteur2
static char char_h2[15];
static char char_t2[15];
float h2 = 0.0;
float h2_alt = 0.0;
float t2 = 0.0;
float t2_alt = 0.0;
// capteur3
static char char_h3[15];
static char char_t3[15];
float h3 = 0.0;
float h3_alt = 0.0;
float t3 = 0.0;
float t3_alt = 0.0;
// capteur4
static char char_h4[15];
static char char_t4[15];
float h4 = 0.0;
float h4_alt = 0.0;
float t4 = 0.0;
float t4_alt = 0.0;
// capteur5
static char char_h5[15];
static char char_t5[15];
float h5 = 0.0;
float h5_alt = 0.0;
float t5 = 0.0;
float t5_alt = 0.0;
// capteur6
static char char_h6[15];
static char char_t6[15];
float h6 = 0.0;
float h6_alt = 0.0;
float t6 = 0.0;
float t6_alt = 0.0;
// capteur7
static char char_h7[15];
static char char_t7[15];
float h7 = 0.0;
float h7_alt = 0.0;
float t7 = 0.0;
float t7_alt = 0.0;
// capteur8
static char char_h8[15];
static char char_t8[15];
float h8 = 0.0;
float h8_alt = 0.0;
float t8 = 0.0;
float t8_alt = 0.0;
// capteur9
static char char_h9[15];
static char char_t9[15];
float h9 = 0.0;
float h9_alt = 0.0;
float t9 = 0.0;
float t9_alt = 0.0;
// remise a zero du compteur "millisecondes" depuis le dernier appel.
unsigned long previousMillis = 0;
// valeur intervalle de fréquence d'utilisation du capteur, en millisecondes (60000=1mn)
const long interval = 6000;
//***************** Setup **********************//
void setup()
{
client.setServer(server, 1883);
client.setCallback(callback);
Ethernet.begin(mac, ip);
delay(1500);
lastReconnectAttempt = 0;
Serial.begin(9600);
if (Ethernet.begin(mac) == 0)
{
Serial.println("Failed to configure Ethernet using DHCP");
return;
}
Serial.print("My IP address: ");
for (byte thisByte = 0; thisByte < 4; thisByte++) {
// print the value of each byte of the IP address:
Serial.print(Ethernet.localIP()[thisByte], DEC);
Serial.print(".");
}
Serial.println();
dht1.begin();
dht2.begin();
dht3.begin();
dht4.begin();
dht6.begin();
dht7.begin();
dht8.begin();
dht9.begin();
}
//***************** Loop **********************
void loop()
{
if (!client.connected())
{
long now = millis();
if (now - lastReconnectAttempt > 5000) // calcul temps pour reconnection client
{
lastReconnectAttempt = now;
// Tentative de reconnexion
if (reconnect())
{
lastReconnectAttempt = 0;
}
}
}
else
{
client.loop(); // Client connected
}
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) // calcul temps ecouler du capteur
{
previousMillis = currentMillis;
// ----- lecture des capteurs ------
h1 = dht1.readHumidity(); //humidite 1
t1 = dht1.readTemperature(); //Temperature 1
h2 = dht2.readHumidity(); //humidite 2
t2 = dht2.readTemperature(); //Temperature 2
h3 = dht3.readHumidity(); //humidite 3
t3 = dht3.readTemperature(); //Temperature 3
h4 = dht4.readHumidity(); //humidite 4
t4 = dht4.readTemperature(); //Temperature 4
h6 = dht6.readHumidity(); //humidite 6
t6 = dht6.readTemperature(); //Temperature 6
h7 = dht7.readHumidity(); //humidite 7
t7 = dht7.readTemperature(); //Temperature 7
h8 = dht8.readHumidity(); //humidite 8
t8 = dht8.readTemperature(); //Temperature 8
h9 = dht9.readHumidity(); //humidite 9
t9 = dht9.readTemperature(); //Temperature 9
}
// Vérifiez si un numéro valide est retourné.
// Si "NaN" "Not a Number" (pas un nombre) est renvoyé, affiche erreurs capteur.
if (isnan(t) || isnan(h) || isnan(t1) || isnan(h1) || isnan(t2) || isnan(h2) || isnan(t3) || isnan(h3) || isnan(t4) || isnan(h4) || isnan(t5) || isnan(h5) || isnan(t6) || isnan(h6) || isnan(t7) || isnan(h7) || isnan(t8) || isnan(h8) || isnan(t9) || isnan(h9) )
{
Serial.println(" un DHT22 n'a pas pu être lu");
client.publish("home/Arduino_rez","Erreur capteur",true);
// "true" envoie le message conservé, c'est-à-dire que le message reste sur le courtier
//jusqu'à ce que quelque chose de nouveau arrive.
}
else if (h == h_alt && t == t_alt && h1 == h1_alt && t1 == t1_alt && h2 == h2_alt && t2 == t2_alt && h3 == h3_alt && t3 == t3_alt && h4 == h4_alt && t4 == t4_alt && h5 == h5_alt && t5 == t5_alt && h6 == h6_alt && t6 == t6_alt && h7 == h7_alt && t7 == t7_alt && h8 == h8_alt && t8 == t8_alt && h9 == h9_alt && t9 == t9_alt )
{
//ne fais rien
}
else
{
client.publish("home/Arduino_rez","en Ligne", true);
dtostrf(h,6, 1, humidity);
dtostrf(t,6, 1, temperature);
dtostrf(h1,6, 1, char_h1);
dtostrf(t1,6, 1, char_t1);
dtostrf(h2,6, 1, char_h2);
dtostrf(t2,6, 1, char_t2);
dtostrf(h3,6, 1, char_h3);
dtostrf(t3,6, 1, char_t3);
dtostrf(h4,6, 1, char_h4);
dtostrf(t4,6, 1, char_t4);
dtostrf(h5,6, 1, char_h5);
dtostrf(t5,6, 1, char_t5);
dtostrf(h6,6, 1, char_h6);
dtostrf(t6,6, 1, char_t6);
dtostrf(h7,6, 1, char_h7);
dtostrf(t7,6, 1, char_t7);
dtostrf(h8,6, 1, char_h8);
dtostrf(t8,6, 1, char_t8);
dtostrf(h9,6, 1, char_h9);
dtostrf(t9,6, 1, char_t9);
client.publish("home/Arduino_rez/ch_heather/humidite",humidity, true);
client.publish("home/Arduino_rez/ch_heather/Temperature",temperature, true);
client.publish("home/Arduino_rez/cuisine/humidite",char_h1, true);
client.publish("home/Arduino_rez/cuisine/Temperature",char_t1, true);
client.publish("home/Arduino_rez/caves/humidite",char_h1, true);
client.publish("home/Arduino_rez/caves/Temperature",char_t1, true);
client.publish("home/Arduino_rez/salle_de_jeu/humidite",char_h1, true);
client.publish("home/Arduino_rez/salle_de_jeu/Temperature",char_t1, true);
client.publish("home/Arduino_rez/salle_de_bain/humidite",char_h1, true);
client.publish("home/Arduino_rez/salle_de_bain/Temperature",char_t1, true);
client.publish("home/Arduino_rez/ch_parents/humidite",char_h1, true);
client.publish("home/Arduino_rez/ch_parents/Temperature",char_t1, true);
client.publish("home/Arduino_rez/ch_pacey/humidite",char_h1, true);
client.publish("home/Arduino_rez/ch_pacey/Temperature",char_t1, true);
client.publish("home/Arduino_rez/bureau/humidite",char_h1, true);
client.publish("home/Arduino_rez/bureau/Temperature",char_t1, true);
client.publish("home/Arduino_rez/salon/humidite",char_h1, true);
client.publish("home/Arduino_rez/salon/Temperature",char_t1, true);
client.publish("home/Arduino_rez/ch_kirsten/humidite",char_h1, true);
client.publish("home/Arduino_rez/ch_kirsten/Temperature",char_t1, true);
h_alt = h; // annuler l'ancienne lecture ..
t_alt = t; // ... pour ne réagir qu'aux changements
h1_alt = h1;
t1_alt = t1;
h2_alt = h2;
t2_alt = t2;
h3_alt = h3;
t3_alt = t3;
h4_alt = h4;
t4_alt = t4;
h5_alt = h5;
t5_alt = t5;
h6_alt = h6;
t6_alt = t6;
h7_alt = h7;
t7_alt = t7;
h8_alt = h8;
t8_alt = t8;
h9_alt = h9;
t9_alt = t9;
// ------------ Visu sur terminal ------------------
Serial.print("humidite ch.Heather: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature ch.Heather: ");
Serial.print(t);
Serial.println(" C");
Serial.print("humidite cuisine: ");
Serial.print(h1);
Serial.print(" %\t");
Serial.print("Temperature cuisine: ");
Serial.print(t1);
Serial.println(" C");
Serial.print("humidite caves: ");
Serial.print(h2);
Serial.print(" %\t");
Serial.print("Temperature caves: ");
Serial.print(t2);
Serial.println(" C");
Serial.print("humidite salle de jeu: ");
Serial.print(h3);
Serial.print(" %\t");
Serial.print("Temperature salle de jeu: ");
Serial.print(t3);
Serial.println(" C");
Serial.print("humidite salle de bain: ");
Serial.print(h4);
Serial.print(" %\t");
Serial.print("Temperature salle de bain: ");
Serial.print(t4);
Serial.println(" C");
Serial.print("humidite ch. parents: ");
Serial.print(h5);
Serial.print(" %\t");
Serial.print("Temperature ch. parents: ");
Serial.print(t5);
Serial.println(" C");
Serial.print("humidite ch. Pacey: ");
Serial.print(h6);
Serial.print(" %\t");
Serial.print("Temperature ch. Pacey: ");
Serial.print(t6);
Serial.println(" C");
Serial.print("humidite bureau: ");
Serial.print(h7);
Serial.print(" %\t");
Serial.print("Temperature bureau: ");
Serial.print(t7);
Serial.println(" C");
Serial.print("humidite salon: ");
Serial.print(h8);
Serial.print(" %\t");
Serial.print("Temperature salon: ");
Serial.print(t8);
Serial.println(" C");
Serial.print("humidite ch. kirsten: ");
Serial.print(h9);
Serial.print(" %\t");
Serial.print("Temperature ch. kirsten: ");
Serial.print(t9);
Serial.println(" C");
}
}
//-------- Fin Pgm --------------
merci