Communication I2C entre un ATTiny85 et un Arduino Uno

De Sam's Projects.
Aller à : Navigation, rechercher

Sommaire

Description

Pour relier tout mes interrupteurs et capteurs dans mon projet de domotique SACHA, j'utilise le bus I2C.

Tout les interrupteurs seront contrôlés par un ATTiny85 qui sera relier par un bus I2C en tant qu'esclave. Le maître étant bien sur l'Arduino Uno.

Cette méthode me permet d'ajouter sur le même cable (4 fils) jusqu'à 128 interrupteurs/capteurs.

Pour programmer un ATTiny85, il faut se référer à la programmation d'un ATTiny85 avec un Arduino Uno.

Composants

  • Un ou plusieurs ATTiny85 (20PU)
  • Un Arduino Uno
  • Un ou plusieurs boutons avec une résistance de 10K chacun
  • Deux résistance de 4,7K ou 10K

Schéma

Schéma

Téléchargements

Programme

Télécharger les librairies TinyWireM et TinyWireS.

Transférer le programme Master dans l'Arduino et le programme Slave dans l'ATTiny85.

Si vous avez plusieurs ATTiny85, n'oubliez pas de changer leur adresse I2C.

Vous aurez dans le terminal serial de l'Arduino :

  • 0 => Pas de liaison
  • 1 => Echange correct, pas d'appui sur le bouton
  • 2 => Echange correct, appui sur le bouton

Arduino_Master_I2C.ino.c

// PROGRAMME MASTER SUR ARDUINO UNO
 
#include <Wire.h>
 
#define ATTINY_SLAVE_1   0x27
#define ATTINY_SLAVE_2   0x28        
 
void setup(){
  Wire.begin();                            
  Serial.begin(38400);                     
}
 
void loop(){
 
  Wire.requestFrom(ATTINY_SLAVE_1, 1);    // On demande 1 octet
 
  if (Wire.available()) {
     byte c = Wire.read();
     Serial.println(c);
  } else {
    Serial.println("0");  
  }
 
  Wire.requestFrom(ATTINY_SLAVE_2, 1);   
 
  if (Wire.available()) {
     byte c = Wire.read();
     Serial.println(c);
  } else {
    Serial.println("0");  
  }
 
}

Arduino_Master_I2C.ino.c

// PROGRAMME SLAVE SUR ATTINY85
 
#include "TinyWireS.h"
 
#define ATTINY_SLAVE_ADRESSE 0x27 // A changer en fonction de l'esclave
 
#define BUTTON_PIN 3
 
byte      data;
 
void setup() {
  pinMode(BUTTON_PIN,INPUT);
  TinyWireS.begin(ATTINY_SLAVE_ADRESSE);
  byteRcvd = 0;
  data = 1;
}
 
void loop() {
 
    if(digitalRead(BUTTON_PIN) == LOW){
      data = 2;
    }else{
      data = 1;
    }
    TinyWireS.send(data);
}
Outils personnels
Espaces de noms

Variantes
Actions
Farfouillage
Liens divers
Boîte à outils