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 === |