Comunicação gpio serie de strings entre Arduino e Raspberry Pi com Python3 – simples

 

Programa Arduino

serial_mod1_v1

#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX

byte recGpio[64];
byte recUsb[64];
boolean newGpio = false;
boolean newUsb = false;

void setup() {
Serial.begin(115200); // Open serial monitor at 115200 baud to see ping results.
mySerial.begin(115200);
}

void loop() {
getUsbSerialUpdate();
getGpioSerialUpdate();
if(newGpio) {
byte f;
Serial.println("GPIO: "); 
for(f = 0; f < 64; f++) {
Serial.print(recGpio[f]);Serial.print(" "); 
if(recGpio[f] == '\0') break;
}
Serial.println();
for(f = 0; f < 64; f++) {
Serial.print((char)recGpio[f]);
if(recGpio[f] == '\0') break;
}
Serial.println();
newGpio = false;

}
if(newUsb) {
byte f;
Serial.println("USB: "); 
for(f = 0; f < 64; f++) {
Serial.print(recUsb[f]);Serial.print(" "); 
if(recUsb[f] == '\0') break;
}
Serial.println();
for(f = 0; f < 64; f++) {
Serial.print((char)recUsb[f]);
if(recUsb[f] == '\0') break;
}
Serial.println();
newUsb = false;
}
}

void getUsbSerialUpdate() {
boolean complete = false;
static byte i = 0;
static byte rec[64];
while(Serial.available()) {
rec[i] = Serial.read();
if(rec[i] == 10)complete = true;
i++;
}

if(complete) {
byte f;
rec[i] = '\0';
for(f = 0; f < i+1; f++) {
recUsb[f] = rec[f];
}
newUsb = true;
i = 0;
}
}

void getGpioSerialUpdate() {
boolean complete = false;
static byte i = 0;
static byte rec[64];
while(mySerial.available()) {
rec[i] = mySerial.read();
i++;
}

if(i) {
byte f;
for(f = 0; f < i; f++) {
mySerial.print((char)rec[f]);
}
mySerial.println("");

rec[i] = '\0';
for(f = 0; f < i+1; f++) {
recGpio[f] = rec[f];
}
newGpio = true;
i = 0;
} 
}

 

Programa Raspberry Pi

gpioserial1.py

#!/usr/bin/python3

import serial
ser = serial.Serial('/dev/ttyAMA0',115200)

import time
timestr = time.strftime("%Y%m%d-%H%M%S")

while True:
outval = input("enter: ");
if not outval:
continue

ser.write(str(outval).encode());
read_serial = ser.readline().decode('ascii')
print("received: " + read_serial)