En raison de spams récurrents, les messages des nouveaux inscrits sont modérés a priori. Ne vous inquiétez pas si vous ne voyez pas apparaitre votre message immédiatement sur le forum. (November 04, 2021) x

Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5

[Help] problème transmission série
#1

Bonjour,
Je désire établir une communication unidirectionnelle d'un Arduino vers un Raspberry. Voici un exemple simple.
1/ Côté Arduino
Code :
int i=0;
void setup() {
  Serial.begin(9600);
  Serial.println("Un message va etre envoye toutes les deux secondes des maintenant !");
}

void loop() {
  Serial.println("Message #" + String(i));
  delay(2000);
  i++;
}
2. Côté Raspberry (Python)
Code :
import serial
print('Running. Press CTRL-C to exit.')

# Ouverture du port serie avec :
# '/dev/ttyXXXX' : definition du port d ecoute (remplacer 'X' par le bon nom)
# 9600 : vitesse de communication
serialArduino = serial.Serial('/dev/ttyUSB0', 9600)

# Ecriture de chaque message recu
while True :
      print(serialArduino.readline())   
Le résultat devrait être « Message #0 » etc
Mais il est « b'Message #0\r\n' »

Pourriez-vous me dire d'où provient le problème ?
Merci !
Répondre
#2

Alors pour le \r\n, c'est normal, c'est l'utilisation de println (print new line) qui envoit ces caractère (carriage return, new line).
Le b' semble être un header ou un code de contrôle.
Tu pourrais peut-être essayer d'utiliser Serial.write("Message #" + String(i)); qui ne devrait pas compliquer ton message.
Répondre
#3

(09-02-2022, 12:43:55)CrazyCat a écrit :  Alors pour le \r\n, c'est normal, c'est l'utilisation de println (print new line) qui envoit ces caractère (carriage return, new line).
Le b' semble être un header ou un code de contrôle.
Tu pourrais peut-être essayer d'utiliser Serial.write("Message #" + String(i)); qui ne devrait pas compliquer ton message.

Bonjour CrazyCat
Je savais pour le \n et pas pour le \r (mais je n'avais pas cherché non plus)
Bon, ta solution engendre des erreurs :

Arduino : 1.8.19 (Linux), Carte : "Arduino Nano, ATmega328P (Old Bootloader)"

/home/pi/develop/arduino/test_serie_usb_00/test_serie_usb_00.ino: In function 'void loop()':
test_serie_usb_00:8:40: error: no matching function for call to 'HardwareSerial::write(StringSumHelper&)'
  Serial.write("Message #" +  String(i));
                                        ^
In file included from /home/pi/.arduino15/packages/arduino/hardware/avr/1.8.4/cores/arduino/Arduino.h:233:0,
                from sketch/test_serie_usb_00.ino.cpp:1:
/home/pi/.arduino15/packages/arduino/hardware/avr/1.8.4/cores/arduino/HardwareSerial.h:129:20: note: candidate: virtual size_t HardwareSerial::write(uint8_t)
    virtual size_t write(uint8_t);
                    ^~~~~
/home/pi/.arduino15/packages/arduino/hardware/avr/1.8.4/cores/arduino/HardwareSerial.h:129:20: note:  no known conversion for argument 1 from 'StringSumHelper' to 'uint8_t {aka unsigned char}'
/home/pi/.arduino15/packages/arduino/hardware/avr/1.8.4/cores/arduino/HardwareSerial.h:130:19: note: candidate: size_t HardwareSerial::write(long unsigned int)
    inline size_t write(unsigned long n) { return write((uint8_t)n); }
                  ^~~~~
/home/pi/.arduino15/packages/arduino/hardware/avr/1.8.4/cores/arduino/HardwareSerial.h:130:19: note:  no known conversion for argument 1 from 'StringSumHelper' to 'long unsigned int'
/home/pi/.arduino15/packages/arduino/hardware/avr/1.8.4/cores/arduino/HardwareSerial.h:131:19: note: candidate: size_t HardwareSerial::write(long int)
    inline size_t write(long n) { return write((uint8_t)n); }
                  ^~~~~
/home/pi/.arduino15/packages/arduino/hardware/avr/1.8.4/cores/arduino/HardwareSerial.h:131:19: note:  no known conversion for argument 1 from 'StringSumHelper' to 'long int'
/home/pi/.arduino15/packages/arduino/hardware/avr/1.8.4/cores/arduino/HardwareSerial.h:132:19: note: candidate: size_t HardwareSerial::write(unsigned int)
    inline size_t write(unsigned int n) { return write((uint8_t)n); }
                  ^~~~~
/home/pi/.arduino15/packages/arduino/hardware/avr/1.8.4/cores/arduino/HardwareSerial.h:132:19: note:  no known conversion for argument 1 from 'StringSumHelper' to 'unsigned int'
/home/pi/.arduino15/packages/arduino/hardware/avr/1.8.4/cores/arduino/HardwareSerial.h:133:19: note: candidate: size_t HardwareSerial::write(int)
    inline size_t write(int n) { return write((uint8_t)n); }
                  ^~~~~
/home/pi/.arduino15/packages/arduino/hardware/avr/1.8.4/cores/arduino/HardwareSerial.h:133:19: note:  no known conversion for argument 1 from 'StringSumHelper' to 'int'
In file included from /home/pi/.arduino15/packages/arduino/hardware/avr/1.8.4/cores/arduino/Stream.h:26:0,
                from /home/pi/.arduino15/packages/arduino/hardware/avr/1.8.4/cores/arduino/HardwareSerial.h:29,
                from /home/pi/.arduino15/packages/arduino/hardware/avr/1.8.4/cores/arduino/Arduino.h:233,
                from sketch/test_serie_usb_00.ino.cpp:1:
/home/pi/.arduino15/packages/arduino/hardware/avr/1.8.4/cores/arduino/Print.h:57:12: note: candidate: size_t Print::write(const char*, size_t)
    size_t write(const char *buffer, size_t size) {
            ^~~~~
/home/pi/.arduino15/packages/arduino/hardware/avr/1.8.4/cores/arduino/Print.h:57:12: note:  candidate expects 2 arguments, 1 provided
/home/pi/.arduino15/packages/arduino/hardware/avr/1.8.4/cores/arduino/Print.h:56:20: note: candidate: virtual size_t Print::write(const uint8_t*, size_t)
    virtual size_t write(const uint8_t *buffer, size_t size);
                    ^~~~~
/home/pi/.arduino15/packages/arduino/hardware/avr/1.8.4/cores/arduino/Print.h:56:20: note:  candidate expects 2 arguments, 1 provided
/home/pi/.arduino15/packages/arduino/hardware/avr/1.8.4/cores/arduino/Print.h:52:12: note: candidate: size_t Print::write(const char*)
    size_t write(const char *str) {
            ^~~~~
/home/pi/.arduino15/packages/arduino/hardware/avr/1.8.4/cores/arduino/Print.h:52:12: note:  no known conversion for argument 1 from 'StringSumHelper' to 'const char*'
exit status 1
no matching function for call to 'HardwareSerial::write(StringSumHelper&)'


Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.

Ceci dit, j'ai contourné le problème avec cette fonction :
Code :
def purge(ligne):
    return ligne[2:len(ligne)-5]
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)