communication_protocole_i2c
Ceci est une ancienne révision du document !
Table des matières
Communication avec le protocole I2C
Ressources
Seulement 2 fils, les appareils sont définis par des adresses.
- I2C sur fr.wikipedia.org Les libs font le boulot, pas besoin d“apprendre la page par coeur. Par contre, le § sur les résistances de pull-up est important.
- I2C par Nick Gammon This post describes how the I2C (Inter-Integrated Circuit, or “Two-Wire”) interface works, with particular reference to the Arduino Uno which is based on the ATmega328P microprocessor chip. A lot of the details however will be of more general interest.
Exemple à revérifier
- https://github.com/sergeLabo/furuta/tree/main/doc/NickGammon_I2C l'exemple de Nick simplifié
Exemple entre Raspberry Pi et Arduino Leonardo
Contexte: Le codeur 4000 points est complétement marabouté! La Leonardo ne peut pas être Slave en SPI, il faut faire la comm entre Pi et Arduino en I2C.
Code python pour la Pi en master
from time import time, sleep from smbus2 import SMBus addr = 42 bus = SMBus(1) sleep(1) E = 0 def request(): global E try: b2 = bus.read_i2c_block_data(addr, 0, 4) b = bytearray(b2) pos = (b[0] << 8) + b[1] except IOError: pos = None E += 1 return pos t = time() n = -1 e = 0 nbr = 1000 print("Speed Test ...") while n < nbr: n += 1 pos1 = request() sleep(0.01) pos2 = request() sleep(0.025) if pos1 and pos2 and nbr % 2 == 0: print(pos2 - pos1) d = ((((time() - t)/nbr) - 0.035)*1000) print("Temps de transmission", round(d, 1), "ms") print("Nombre d'erreur:", E) bus.close()
Code pour Arduino Leonardo
#include <Wire.h> #include <AS5048A.h> // 10 = SS // false = no debug AS5048A angleSensor(10, false); const byte MY_ADDRESS = 42; int val = 0; void setup() { // Capteurs Panauto angleSensor.begin(); Wire.begin (MY_ADDRESS); Wire.onRequest(requestEvent); } void loop() {} void requestEvent () { int ang = angleSensor.getRotationInDegrees()*10; val = ang; byte buf [2]; buf [0] = val >> 8; buf [1] = val & 0xFF; Wire.write (buf, 2); }
Pull-up Resistors
communication_protocole_i2c.1662540353.txt.gz · Dernière modification : 2022/09/07 08:45 de serge