Arduino I2C Intro-MasterWriter

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche

Programme "Master Writer"

Comme précisé plus avant dans la documentation, en "Master Writer", le Maître envoi un message à esclave et n'attend aucune réponse en retour.

Petit rappel en image tel que décrit dans les concepts:

 

Programme du Maître

Voici le programme issu de l'article "Arduino - MasterReader" sur Arduino.cc.

// Librairie Wire - Master Writer (Maitre ecrit)
// par Nicholas Zambetti <http://www.zambetti.com>
// Traduction par MCHobby.be <http://www.mchobby.be>
// Montage & tutoriel détaillé disponibles sur 
//    http://mchobby.be/wiki/index.php?title=Arduino_I2C_Intro-Montage
// 
// Démontre l'usage de la librairie Wire.
// Ecrit des données vers un périphérique esclave I2C/TWI
//
// A utiliser avec le programme esclave de cet exemple.
//
// Crée le 29 mars 2006
// Traduit le 9 mars 2013 (MCHobby)
//
// This example code is in the public domain.
// Ce code d'exemple fait partie du domaine public.
//
#include <Wire.h>

void setup()
{
  Wire.begin(); // joindre le bus i2c (adresse est optionnelle pour un maître)
}

byte x = 0;

void loop()
{
  Wire.beginTransmission(4); // Commencer transmission vers l'esclave  #4
  Wire.write("x is ");       // Envoi de 5 octets (5 bytes)
  Wire.write(x);             // envoi d'un byte/octet (valeur numérique)  
  Wire.endTransmission();    // fin transmission

  x++;
  delay(500); // delay de 500 ms
}

Programme de l'esclave

Et voici le programme correspondant provenant de l'exemple.

// Librairie Wire - Master Writer (Maitre ecrit)
// par Nicholas Zambetti <http://www.zambetti.com>
// Traduction par MCHobby.be <http://www.mchobby.be>
// Montage & tutoriel détaillé disponibles sur 
//    http://mchobby.be/wiki/index.php?title=Arduino_I2C_Intro-Montage
// 
// Démontre l'usage de la librairie Wire.
// Ecrit des données vers un périphérique esclave I2C/TWI
//
// A utiliser avec le programme esclave de cet exemple.
//
// Crée le 29 mars 2006
// Traduit le 9 mars 2013 (MCHobby)
//
// This example code is in the public domain.
// Ce code d'exemple fait partie du domaine public.
//
#include <Wire.h>

void setup()
{
  Wire.begin(4);                // Joindre le Bus I2C avec adresse #4
  Wire.onReceive(receiveEvent); // enregistrer l'événement (lorsqu'une demande arrive)
  Serial.begin(9600);           // Démarrer une communication série
}

void loop()
{
  delay(100);
}

// Fonction qui est exécutée lorsque des données sont envoyées par le Maître.
// Cette fonction est enregistrée comme une événement ("event" en anglais), voir la fonction setup()
void receiveEvent(int howMany)
{
  while(1 < Wire.available()) // Lire tous les octets sauf le dernier
  {
    char c = Wire.read();     // lecture de l'octet/byte comme caractère
    Serial.print(c);          // afficher le caractère
  }
  int x = Wire.read();        // lecture de l'octet/byte ignoré comme un entier
  Serial.println(x);          // Afficher la valeur numérique 
}

Comment tester

Programmation

  • Brancher l'Arduino Maître et programmez le.
  • Brancher l'Arduino Esclave et programmez le.
  • Débranchez le tout.

Raccordements

Nous partirons du principe que vous ne disposez que d'une seule alimentation. cette fois, ce sera l'esclave qui sera alimenté par le câble USB et le Maître qui sera alimenté par l'esclave.

  1. Raccordez les BROCHES GND des deux Arduino ensembles
  2. Effectuez les raccordement tels que précisés dans la section Montage
  3. Brancher le 5v de l'ESCLAVE -> Vin du maitre (permet au maître d'être alimenté par l'esclave)

Résultats

  1. Branchez le cable USB sur l'esclave (cette fois ci, c'est lui qui renvoi les ordres reçu du maître).
  2. Ouvrez le moniteur Serie d'Arduino (9600 bauds).

Vous devriez voir arriver les ordres suivant reçu par l'ESCLAVE apparaître sur le port série

x is 0
...
x is 14
x is 15
x is 16
x is 17
x is 18
x is 19
... 

Fonctionnement en quelques mots

Le fonctionnement est relativement simple mais démontre très bien le concept "Master Reader".

  1. Le Maître envoi un message/commande de 6 octets (bytes, 5 octets/bytes de texte + 1 valeur numérique codée sur 1 octet/bytes) à l'esclave sur le bus I2C
  2. L'esclave reçoit l'ordre sur le bus I2C
  3. L'esclave relaye l'ordre reçu vers le port série.

En savoir plus

L'article "Arduino - MasterReader" sur Arduino.cc vous propose plus d'informations. Vous y trouverez en autre la description des fonctions:


Réalisé par Meurisse D. pour MCHobby.be.

Contient également quelques images et exemples d'Arduino.cc, droits et copyrights sur ces ressources restant bien évidement à Arduino.cc.

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.