Modifications

Sauter à la navigation Sauter à la recherche
1 171 octets supprimés ,  15 décembre 2018 à 15:25
Ligne 71 : Ligne 71 :  
Sur le plan physique, cela consiste en deux fils: SCL et SDA, la ligne d'horloge (SCL) et ligne de donnée (SDA).
 
Sur le plan physique, cela consiste en deux fils: SCL et SDA, la ligne d'horloge (SCL) et ligne de donnée (SDA).
   −
Les objets I2C son créés en étant rattaché spécifiquement sur un bus. Le bus peut être initialisé à la création de l'objet --ou-- initialisé plus tard:
+
Les objets I2C sont créés en étant rattaché spécifiquement sur un bus matériel (en précisant son ID) -OU- sur un bus émulé de façon logiciel (en précisant les 2 broches sda et scl de façon arbitraire).
 +
 
 +
Le bus peut être initialisé à la création de l'objet --ou-- initialisé plus tard:
    
Voici quelques exemples:
 
Voici quelques exemples:
Ligne 77 : Ligne 79 :  
from machine import I2C
 
from machine import I2C
   −
i2c = I2C(1)                        # créé sur le bus 1
+
i2c = I2C(1)                        # créé sur le bus 1 de la Pyboard
i2c = I2C(1, I2C.MASTER)            # Créé et initialisé comme maître (master)
+
i2c = I2C( sda=Pin(2), scl=Pin(4) ) # créé sur 2 broches arbitraire d'un l'ESP8266-EVB
i2c.init(I2C.MASTER, baudrate=20000) # Initialisé comme maître (master)
  −
i2c.init(I2C.SLAVE, addr=0x42)       # Initialisé comme esclave (à l'adresse 0x42)
  −
i2c.deinit()                        # Désactive le périphérique (bus I2C)</nowiki>
  −
</syntaxhighlight>
  −
 
  −
Afficher l'objet i2c vous permet d'avoir des informations à propos de sa configuration.
     −
=== En mode esclave ===
+
# scanne les esclaves disponibles et retourne une list d'adresses 7-bits
Les méthodes de base pour un esclave I2C sont:
+
i2c.scan()                     
* {{fname|send}}
  −
* {{fname|recv}}
     −
<nowiki>i2c.send('abc')      # esclave envoyant 3 bytes/octets
+
# Ecrire 3 octets vers l'esclave à l'adresse 42 (adresse 7-bits)
i2c.send(0x42)      # esclave envoyant un seul byte/octet (fourni en valeur numérique)
+
i2c.writeto(42, b'123')        
data = i2c.recv(3)   # esclave réceptionnant 3 bytes/octets</nowiki>
     −
Pour faire une réception ''in situ'', il faut premièrement créer un {{fname|bytearray}}:
+
# Lire 4 octets depuis l'esclave à l'adresse 42
 +
i2c.readfrom(42, 4)
   −
<nowiki>data = bytearray(3) # Création d'un buffer (mémoire tampon)
+
# Lire 3 octets à partir de l'adresse mémoire (registre) 8
i2c.recv(data)       # Réception de 3 bytes/octets, écriture dans "data"</nowiki>
+
# de l'esclave (esclave à l'adresse 42).
 +
i2c.readfrom_mem(42, 8, 3)  
   −
Vous pouvez spécifier un temps d'attente maximum avec le paramètre ''timeout'' (en ms):
+
# écrire 1 octet (\x10) à l'adresse mémoire (registre) 2
 +
# de l'esclave (esclave à l'adresse 42)
 +
i2c.writeto_mem(42, 2, b'\x10') </syntaxhighlight>
   −
<nowiki>i2c.send(b'123', timeout=2000)  # timeout après 2 secondes</nowiki>
+
Afficher l'objet i2c vous permet d'avoir des informations à propos de sa configuration.
 
  −
=== En mode maître ===
  −
Lorsqu'un maître (''master'') envoi des données à un périphérique doit spécifier l'adresse du destinataire:
  −
 
  −
<nowiki>i2c.init(I2C.MASTER)
  −
i2c.send('123', 0x42)        # envoyer 3 bytes/octets à l'esclave ayant l'adresse 0x42
  −
i2c.send(b'456', addr=0x42)  # Utilisation du mot clé "addr" pour indiquer l'adresse</nowiki>
  −
 
  −
Le maître dispose également d'autres méthodes:
  −
 
  −
<nowiki>i2c.is_ready(0x42)          # vérifié si l'esclave 0x42 est prêt
  −
i2c.scan()                  # Scanne les esclaves du bus et retourne une
  −
                            #  liste avec les adresses valides
  −
i2c.mem_read(3, 0x42, 2)    # Lecture de 3 bytes/octets depuis la mémoire
  −
                            #  de l'esclave 0x42, en démarrant à l'adresse
  −
                            #  2 dans l'esclave
  −
i2c.mem_write('abc', 0x42, 2, timeout=1000)</nowiki>
      
=== Constructeur ===
 
=== Constructeur ===
29 917

modifications

Menu de navigation