Bonjour,
J'ai acheté le fameux "Chirp!" pour éviter d'oublier d'arroser mes plantes : Site officiel.
Au début c'était bien, mes plantes étaient ravis de cet achat puis je me suis rendu compte d'un gros défaut : "Les piles". Les piles se vident en 6 mois, et pas d'information sur l'état des piles, donc je croyais que ça fonctionnait mais non et ça c'est encore pire pour les plantes.
Je me suis dit que j'allais mettre ça sur un arduino, suivi d'un Esp_01 en série avec easy esp et le tout dans Domoticz via le protocol "Mysensors Serial", pour ceux que ça intéressent : Cliquez ici.
D'après le site de l'auteur de "Chirp!" c'est totalement utilisable comme périphérique I2C sur un arduino via des scripts qu'il fournis. Déjà, la grosse galère, l'auteur finit avec une tempo qui devrait être en cours de code, ce qui fait qu'on se retrouve avec des valeurs qui changent sans cesse de façon aléatoire. Il inverse l'humidité et la luminosité, bref pas cool ses fameux tutos.
Pour la luminosité et l'humidité, c'est ok, j'ai trouvé.
Normalement on devrait pouvoir avoir la température aussi, mais là je bloque, si quelqu'un voit d'où ça vient, je ne suis pas contre un peu d'aide.
Voici déjà ce qui fonctionne :
#include <Wire.h>
int show = 0; //0: ne pas tester i2c 1: tester si il y a un périphérique i2c
int Heure = 10;//Réglage heure pour tester...
int Minutes = 52;//Réglage minutes pour tester...
void writeI2CRegister8bit(int addr, int value) {
Wire.beginTransmission(addr);
Wire.write(value);
Wire.endTransmission();
}
unsigned int readI2CRegister16bit(int addr, int reg) {
Wire.beginTransmission(addr);
Wire.write(reg);
Wire.endTransmission();
delay(20);
Wire.requestFrom(addr, 2);
unsigned int t = Wire.read() << 8;
t = t | Wire.read();
return t;
}
void setup() {
Wire.begin();
Serial.begin(9600);
writeI2CRegister8bit(0x20, 6); //reset
}
void loop()
{
if (show == 1)
{
byte error, address;
int nDevices;
Serial.println("Recherche en cours...");
nDevices = 0;
for(address = 1; address < 127; address++ )
{
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("Equiment I2C trouve a l'addresse 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Erreur inconnue a l'address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0) Serial.println("Aucun Equipement I2C trouve\n");
else Serial.println("Pause de 1minute...");
}
Serial.print("Heure : ");
Serial.print(Heure);
Serial.print("H");
Serial.print(Minutes);
Serial.print("mn, Humidité : ");
writeI2CRegister8bit(0x20, 3); //request light measurement (si ça sert bien à ça???)
delay(9000);
Serial.print(readI2CRegister16bit(0x20, 4)); //read capacitance register
Serial.print(", Luminosité : ");
delay(500);//La fameuse tempo qui change tout.
Serial.print(readI2CRegister16bit(0x20, 0)); //read light register
//C'est ici que ça devrait fonctionner pour la température
// Serial.print(readI2CRegister16bit(0x20, 5)); //temperature register
Minutes = Minutes + 1;
if (Minutes > 59)
{
Minutes = Minutes - 60;
Heure = Heure + 1;
}
if (Heure>24) Heure = Heure - 24;
Serial.print(", Prochaine lecture à : ");
Serial.print(Heure);
Serial.print("H");
Serial.print(Minutes);
Serial.println("mn ...");
delay(50000);
}
Voici le résultat :
Heure : 10H54mn, Humidité : 439, Luminosité : 108, Prochaine lecture à : 10H55mn ...
Heure : 10H55mn, Humidité : 437, Luminosité : 3784, Prochaine lecture à : 10H56mn ... Volet fermé
Heure : 10H56mn, Humidité : 435, Luminosité : 5706, Prochaine lecture à : 10H57mn ...Et TV fermé
Heure : 10H57mn, Humidité : 434, Luminosité : 111, Prochaine lecture à : 10H58mn ...
Heure : 10H58mn, Humidité : 432, Luminosité : 107, Prochaine lecture à : 10H59mn ...
Heure : 10H59mn, Humidité : 431, Luminosité : 110, Prochaine lecture à : 11H0mn ...
Heure : 11H0mn, Humidité : 430, Luminosité : 107, Prochaine lecture à : 11H1mn ...
Heure : 11H1mn, Humidité : 429, Luminosité : 106, Prochaine lecture à : 11H2mn ...
Heure : 11H2mn, Humidité : 428, Luminosité : 106, Prochaine lecture à : 11H3mn ...
PS : J'ai essayé ce code sur un arduino 2560 officiel, ça ne fonctionne pas et sur un clone en uno, ça fonctionne sauf la température.
Merci d'avance pour ceux qui pourrons m'aider et à bientôt.