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())