Coomunication RPi (python3) avec arduino sur port série

Bonjour,

je tente de faire communiquer un RPi3 avec un arduino nano sur le port série.
La finalité est de faire passer un message à apartir de l’arduino en RF433MHz.

je suis bloqué lors de l’envoie du message depuis le RPi sur le port serie où se trouve l’arduino.
Lorsque je lance mon script pyhton, il semble être pris en compte par l’arduino (via le port série) car la led rx clignote brièvement.
Toutefois du côté du récepteur (un autre arduino) je ne reçois rien.

J’ai fait des tests et la communication fonctionne bien entre les arduinos (transmetteur et récepteur)

  • si j’envoie un message dans le programme du transmetteur, il est bien reçu par le récepteur
  • si j’écoute sur le port série du transmetteur et que je j’envoie un message depuis le moniteur série, le message passe bien également

Le problème est lorsque je veux exécuter mon script python3 depuis le RPi que le message ne passe pas.

Après avoir regardé sur pas mal de forum et tenté différentes solutions de codage du messsage, je ne parviens toujours aps à faire fonctionner cette communication.
Avez-vous quelques pistes ?
Merci

voici les codes transmetteur / récepteur et script python3

Récepteur

#include <VirtualWire.h>

const int receive_pin = 2;
String Message="";
char caractere;

void setup()
{
    delay(1000);
    Serial.begin(115200);	// Debugging only

 //identification du programme
  Serial.println("prog : rx-rf433");


    // Initialise the IO and ISR
    vw_set_rx_pin(receive_pin);
    vw_set_ptt_inverted(true); // Required for DR3100
    vw_setup(2000);	 // Bits per sec

    vw_rx_start();       // Start the receiver PLL running
    delay(300);
    Serial.println("setup");
}

void loop()
{
    uint8_t buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;

    if (vw_get_message(buf, &buflen)) // Non-blocking
    {
	int i;

	// Message with a good checksum received, print it.
            Message="";
            for (byte i = 0; i < buflen; i++)
            {
              caractere=(buf[i]);
              Message.concat(caractere);
            }
            Serial.print(Message);
    }
}

transmetteur

#include <VirtualWire.h>

const int led_pin = 13;
const int transmit_pin = 12;
const int receive_pin = 2;
const int transmit_en_pin = 3;

void setup()
{
  // Initialise the IO and ISR
  vw_set_tx_pin(transmit_pin);
  //vw_set_rx_pin(receive_pin);
  //vw_set_ptt_pin(transmit_en_pin);
  vw_set_ptt_inverted(true); // Required for DR3100
  vw_setup(2000);	 // Bits per sec
  Serial.begin(9600);	// Debugging only
}

byte count = 1;

void loop()
{
  byte message[VW_MAX_MESSAGE_LEN];
  int len = Serial.readBytesUntil('\n', (char*) message, VW_MAX_MESSAGE_LEN - 1);
  if (!len) {
    return; // Pas de message
  }
  message[len] = '\0'; // Ferme la chaine de caractères
  Serial.println((char*) message);
  
  String data_send = (char*) message;  
  char charBuf[data_send.length() + 1];
  data_send.toCharArray(charBuf, data_send.length() + 1);
  transmit(charBuf);
}

   void transmit(const char *string)
{
  vw_send((uint8_t *)string, strlen(string)); // On envoie le message 
  vw_wait_tx(); // Wait until the whole message is gone
  }

et le code python3

import serial

ser = serial.Serial(
    port='/dev/ttyUSB1',
    baudrate=9600,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS
)

if ser.isOpen():
    ser.close()
ser.open()
ser.isOpen()

ser.write("hello\r\n".encode())

ouvrir le port série fait rebooter l'arduino. peut être attendez un peu avant de balancer le

ser.write("hello\r\n".encode())

Merci J-M-L
c'est bien cela.
cela explique égalent le clignotement de la led 13 au moment de la réception du message sur l'arduino transletteur

il faut ajouter au programme python3 un sleep de 2 secondes avant de faire l'envoie du message

import serial
import time

ser = serial.Serial(
port='/dev/ttyUSB1',
baudrate=9600,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS
)

if ser.isOpen():
ser.close()
ser.open()
ser.isOpen()

time.sleep(2)
ser.write("hello\r\n".encode())

Bonne nouvelle !