Attiny85 - capteur de température et humidité sans fil

Bonjour,

Cela fait quelques mois que j'ai découvers l'univers Raspbery puis Adruino et enfin Attiny.
J'ai également commence à me faire une installation domotique.
Je suis du genre à préférer faire moi meme et comprendre comment cela fonctionne plutôt que d'acheter du tout fait (j'aime bien me prendre la tête quoi).
Je suis de formation mécanitien donc je ne suis pas une bête en programmation et léectronique.

J'ai donc pour projet de me faire mes proper capteurs de temperature intérieur et extérieur pour regular mon chauffage.

Ci desous le materiel utilise :
Côté domotique :

  • Raspberry 3
  • 1 arduino nano connecté en i2c avec le RPI (je veux pas d'USB)
  • 1 émeteur 433 Mhz connecté au RPI (foncitonne très bien, notament pour piloter mon éclairage).
  • 1 récepteur 433 conencté à l'érduino
  • Soft domotique : Jeddom.

Côté sonde temperature et humidité, j'ai des capteurs DHT22 (classique) et emeteurs 433mhz.
Dans un premier temps j'ai utilisé un arduino, j'ai finis pas obtenir ce que je souhaitai, j'arrive à récupérer toutes les info sur le raspberry et donc Jeedom.

J'ai voulu passer sur attiny85 pour miniaturiser la chose et réduire fortement la consomation.

J'ai reutilize le meme code que pour l'arduino. Je l'ai juste réadapté pour l'Attiny.
J'ai chargé le bootloader 1Mhz dans l'Attiny.
Et j'ai chargé mon programme?.
J'ai une Led qui clignonte lorsque le signal est envoyé
Sauf que la LED clignote pas du tout au bon rythme et je ne reçois rien côté RPI (j'ai aussi essayé avec un autre arduino et récepteur et cela ne fonctionne pas non plus).
Après recherché il semblerait que cela soit un probleme de timer et/ou de la bibliothèque virtualwire. Sauf que je ne suis pas assez callé et je ne m'en sort pas.
Si quelqu'un pouvait m'éclairer à ce sujet, ça serait top !

Ci dessous mon programme :

//-= Inclusion des headers =-//

#include <avr/io.h>      // pour la mise en veille
#include <avr/wdt.h>     // pour la mise en veille
#include <avr/sleep.h>   // pour la mise en veille
#include "VirtualWire.h" //librairie pour l'emission rf
#include "DHT.h"

//-= Déclaration des constantes =-//

#define LED_PIN 0
#define TX_PIN 2          // Broche DATA emeteur RF433
#define DHTPIN 3 
#define DHTTYPE DHT22

//-= Déclaration des variables =-//

#define CODE 81          // Code protocole propriétaire
#define P 3                  // 1 = chambre 1, 2 = chambre 2, 3 = chambre 3, 4 = WC,5 = Salle 
float temperature;
float humidite;
de bian, 6 = extérieur...

char msg[20];
char temp1[3];
char temp2[2];
char temp3[6];
char temp4[6];

//-=Définition du capteur =-//

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  pinMode(LED_PIN, OUTPUT);
  pinMode(TX_PIN, OUTPUT);  
  vw_setup(2000);
  dht.begin();;
  vw_set_tx_pin(TX_PIN);

  
  digitalWrite(LED_PIN, HIGH);delay (1000);
  digitalWrite(LED_PIN, LOW);delay (500);
  digitalWrite(LED_PIN, HIGH);delay (1000);
  digitalWrite(LED_PIN, LOW);
}

void loop() {
  temperature = dht.readTemperature();
  humidite = dht.readHumidity();

  dtostrf(CODE,1,0,temp1);
  dtostrf(P,1,0,temp2);
  dtostrf(humidite,1,2,temp3);
  dtostrf(temperature,1,2,temp4);

  strcpy(msg,temp1);
  strcat(msg,"/");
  strcat(msg,temp2);
  strcat(msg,"/");
  strcat(msg,temp3);
  strcat(msg,"/");
  strcat(msg,temp4);

  vw_send((uint8_t *)msg,strlen(msg));                // Envoie le message
  vw_wait_tx();                                                   // Attend la fin de l'envoi

  digitalWrite(LED_PIN, HIGH);delay (500);
  digitalWrite(LED_PIN, LOW);delay (500);
  digitalWrite(LED_PIN, HIGH);delay (500);
  digitalWrite(LED_PIN, LOW);delay (500);

  delay(10000);
}

Aurel:
J'ai voulu passer sur attiny85 pour miniaturiser la chose et réduire fortement la consomation.

J'ai reutilize le meme code que pour l'arduino. Je l'ai juste réadapté pour l'Attiny.
J'ai chargé le bootloader 1Mhz dans l'Attiny.
Et j'ai chargé mon programme?.
J'ai une Led qui clignonte lorsque le signal est envoyé
Sauf que la LED clignote pas du tout au bon rythme

Bonjour
Et "par hasard" ta led ne clignoterais pas là 16 fois moins vite ? 8)

tout ce qui est "time dependant = protocole tres dépendant du temps" decoule de la frequence de cadencement du MCU

Bonjour,

Je suis un peu étonné par la valeur des delais. Trois fois un delay de 100 s (5 minutes) dans la setup. Est ce normal?
De même une tempo de 10s pour le clignottement ça parait beaucoup

Les timers ne sont pas bon
J'avais mis 100000 pour faire des essais ... vu que ma led clignotait très rapidement

Si tu charges le programme blink, est ce que ça clignote toutes les 500ms ?

Oui cela fonctionne correctement si je charge un programme qui fait juste clignoter la LED toutes les 500ms.
Je pense que le problem vient de la library VirtualWire ...
Mais je ne vois pas comment le résoudre

Bonjour,

Apparemment la librairie VirtualWire peut être utilisé avec un ATtiny85 mais à quelle fréquence ??

Il est aussi possible d'utiliser une autre librairie un peut moins connu :

http://mchr3k.github.io/arduino-libs-manchester/

Je ne sais pas si c'est ça le problème, mais dans toutes tes chaines sont trop courtes. Il manque l'octet de fin (\0)

char temp1[2];
char temp2[1];
char temp3[5];
char temp4[5];

devrait être (au minimum)

char temp1[3];
char temp2[2];
char temp3[3];
char temp4[6];

-Standby:
Bonjour,

Apparemment la librairie VirtualWire peut être utilisé avec un ATtiny85 mais à quelle fréquence ??

Il est aussi possible d'utiliser une autre librairie un peut moins connu :

Home - Arduino Manchester Encoding - Mchr3k

Effectivement j'ai vu dans le doc qu'elle est compatible ATtiny85.
J'ai essayé toutes les fréquence sans succès ...

J'ai aussi essayé manchester mais même avec l'arduino j'ai du mal à transmettre les données, c'est très instable. Et on ne peut envoyer que des (int)

kamill:
Je ne sais pas si c'est ça le problème, mais dans toutes tes chaines sont trop courtes. Il manque l'octet de fin (\0)

char temp1[2];

char temp2[1];
char temp3[5];
char temp4[5];




devrait être (au minimum)


char temp1[3];
char temp2[2];
char temp3[3];
char temp4[6];

Je maitrise pas trop tous les paramètres des chaines.
je ne savais pas qu'il fallait ajouter l'octet de fin.
Cependant avec l’Arduino je récupère bien toutes les valeurs.

Je donne un peu plus de détails :

  • ATtiny85 avec le bootloader à 1MHz, programme chargé avec ATtiny85 à 1MHz dans l'IDE : La LED clignote beaucoup plus lentement
  • ATtiny85 avec le bootloader à 8MHz, programme chargé avec ATtiny85 à 8MHz dans l'IDE : La LED clignote beaucoup plus vite
  • ATtiny85 avec le bootloader à 16MHz, programme chargé avec ATtiny85 à 8MHz dans l'IDE : La LED clignote encore plus vite