raspberry protocole I2C smbus2 communication vers arduino
Bonjour,
Super ! Merci avec ces quelques remarques j'ai enfin réussi a transferer les données voulues !!!! après trop d'heures de galère ...
Merci beaucoup. Voici les codes (si ça peut aider d'autres personnes... comme moi) :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
#CODE POUR RASPBERRY
from smbus 2 import SMBus
addr = 0x08
with SMBus(1) as bus:
data = 43265
bus.write_word_data(addr, 0, data)
print ("transmit word")
print (data) |
et
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
// CODE POUR ARDUINO
#include <Wire.h>
void setup()
{
Wire.begin(8);
Wire.onReceive(reveiveEvent);
Serial.begin(2000000);
}
void loop()
{
delay(500)
}
void receiveEvent(int howMany)
{
if (howMany > 0)
{
uint16_t r1 = Wire.read();
uint16_t r2 = Wire.read();
uint16_t r3 = Wire.read();
uint16_t valeur = r2 | r3 <<8;
Serial.print("valeur= ");
Serial.println(valeur);
}
} |
raspberry protocole I2C smbus2 communication vers arduino
Bonjour,
J'actualise cette discussion car en faisant plusieurs tests je me rends compte que ce code génère une sorte de déconnection. Lorsque je l'execute, un certain nombre de messages sont bien envoyés mais il finit par apparaitre un message d'erreur :
Code:
1 2 3 4 5 6
| Traceback (most recent call last):
File "/home/pi/./speedsimulator.py", line 21, in <module>
bus.write_word_data(addr, 0, data, force=None) #ecriture et transmission de la valeur OCR1A
File "/home/pi/.local/lib/python3.9/site-packages/smbus2/smbus2.py", line 496, in write_word_data
ioctl(self.fd, I2C_SMBUS, msg)
OSError: [Errno 121] Remote I/O error |
Je pense que c'est certainement lié à l'utilisation du "SMBus" dans ce code. Du coup je souhaite savoir si il est possible de sortir cette ligne de la boucle While ? de cette façon :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| #!/usr/bin/env python
#executer avec python3
import time
from smbus2 import SMBus
addr = 0x08
val = 1
with SMBus(1) as bus:
while True:
print (val)
if (val<4.1666):
data = round(159552000/(val*648))
print ("valeur < 4.1666 OCR1A = ", data)
bus.write_word_data(addr, 0, data)
print ("transmit word")
print (data)
val = val + 0.01
time.sleep(0.2)
else:
data = round(159552000/(val*648))
print ("valeur > 4.1666 OCR1A = ", data)
bus.write_word_data(addr, 0, data)
print ("transmit word")
print (data)
val = val + 0.01
time.sleep(0.2) |
Merci pour vos conseils.
Raspberry protocole I2C smbus2 communication vers Arduino
Bonjour,
bon du coup afin de palier à ce désagrément j'ai modifié le code afin de passer en exception cette anomalie.
A chaque fois que la liaison i2c est "cassée" alors un message d'erreur apparait et le code reprend son cours (utilisation de try et exception).
Et ça marche !!
Pour simplifier ça donne un code de cette structure :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| def fonction():
xxx
xxx
xxx
while True:
with SMBus(1) as bus :
Try :
fonction()
except :
print("/////////////// erreur /////////////")
fonction() |