Ho un problema, ho collegato RX e tx del arduino a tx e RX del Raspberry pi5 attraverso un livellatore di tensione...controllato tensioni giuste e continuità ma la seriale proprio non vuole funzionare.....sto attualmente comunicando con porta ama10 dato che da Raspberry pi5 la seriale0 è ttyama10.....qualcuno sa perché non mi funziona???
A parte RX e TX e livelli, stessa velocità (9600? altro?)? Stesse impostazioni dei dati (es. N81, o E71, ecc.)?
Credo sanche che magari qualche porzione di codice di entrambi i lati sarebbe utile vederli.
Velocità 115200 non ho ancora provato a mandare un dato da Arduino a Raspberry ma so che da Raspberry a Arduino non funziona dato che non si illumina neanche il led di ricezione dati....non ho capito bene la parte delle stesse impostazioni dati..potresti spiegarmi? Il codice dalle due parti è semplice dopo quando ho sotto mano il PC lo inoltro...
A parte la velocità, N81 significa Nessun bit di parità, 8 bit dati 1 stop, E71 parità Even, 7 bit dati, 1 stop, eccetera, ma può esserci anche il flow control che può essere hardware (non so se RPI per default ce l'abbia hardware ossia segnali DTR/DSR, RTS/CTS, e pure DCD...) o software (es. XON/XOFF).
Insomma, per prima cosa devi verificare che "parlino la stessa lingua"
) poi vediamo il resto.
Oddio mi cogli alla sprovvista...si inviano delle semplici lettere....dopo allego i codici...mi chiedevo se si poteva eseguire la seriale senza il livellatore....
Quale scheda arduino? Ad esempio la Nano ESP32 dovrebbe essere "nativa" a 3,3v quindi puoi usarla senza conversione di tensione. E costa relativamente poco.
Mega 2560...hu una versione mini che si può comprare su internet....si chiama mega 2560 pro...
Allora, sono tornato a casa qui allego file e codici
Per rasp il codice è questo...
arduino=serial.Serial(port="/dev/ttyAMA10",baudrate=115200,timeout=0.1)
def collegamento(x):
arduino.write(x.encode('utf-8'))
y=''
while y=='':
y=(arduino.readline()).decode("utf-8")
return int(y)
per l'arduino è un semplice
void seriale(){
if (Serial.available() > 0)
{
Seriale = Serial.readStringUntil('\n');
}
}
inoltro pure la foto dei collegamenti e il prodotto costruito....
.......ditemi che devo fare.....
... normalmente, su Arduino MEGA, la Serial è connessa al convertitore USB <-> Seriale ... dato che la MEGA ha 4 seriali fisiche, perché non provi ad usare un'altra porta tra Serial1 e Serial3 dato che non vengono utilizzate?
Dopo di che, su Arduino, perché invece di usare quelle orribili funzioni preconfezionate non usi la classica Serial.read() e leggi carattere a carattere chiedendoti cosa hai ricevuto? Così vedi se comunque qualche cosa arriva ... ![]()
Guglielmo
ho cambiato codice come ha suggerito gpb01
arduino
void setup() {
Serial1.begin(9600);
}
void loop() {
if (Serial1.available() > 0) {
String data = Serial1.readString();
Serial1.print("I am Arduino\n");
Serial1.println(data);
}
}
raspberry
import serial
import time
arduino_serial = serial.Serial('/dev/ttyAMA10', 9600, timeout=1)
arduino_serial.flush()
while True:
arduino_serial.write(b"I am Raspberry Pi!\n")
line = arduino_serial.readline().decode('utf-8').rstrip()
print(line)
time.sleep(1)
inoltre ho provato a togliere il livellatore e collegare il tx del rasp con il rx dell'arduino.....senza successo....sembra quasi che raspberry non voglia far uscire dati dalla seriale.....
... continui ad utilizzare quella porcheria di funzione prefabbricate invece di imparare ad usare TU la seriale ... di usa la Serial.read() carattere a carattere e si prendono le dovute decisioni in base a ciò che si riceve ... tutto il resto ti nasconde eventuali problemi.
Guglielmo
ma se fai un loopback (TX della Raspi con RX della Raspi) e scrivi e poi leggi, riesci a rileggere, sulla Raspi, il carattere che trasmetti?
Guglielmo
ora per ora dato che credevo fosse un problema del livellatore l'ho tolto lasciando solo una connessione tra tx del rasp all'rx dell'arduino .....ora provo a rimetterlo su e a rifare il test ma non la vedo bella.....
... NON è detto che il livello HIGH della Raspi venga letto dalla UNO R3 come livello HIGH ... dipende dalle tolleranze ... teoricamente dovrebbero bastare 3V, ma siamo veramente al limite.
Guglielmo
ok allora provo di nuovo con i codici mandati precedentemente....
Il problema persiste e non capisco dove sbaglio....mi servirebbe un oscilloscopio per vedere se effettivamente il rasp fa uscire qualcosa ma non ce l'ho sotto mano....=(
allora ho una notizia....spero sia buona....quando spengo l'arduino si riesce a vedere il led di accensione acceso pochissimo....quando io spengo si vede la lucetta di ricezione tx accendersi ma proprio pochissimo... quando accendo sul serio l'arduino sul serio invece non si riesce a vedere la lucetta che si illuminava prima....consigli???
ma hai letto il mio post #12?
Guglielmo
Si l'ho letto e c'ho provato ma senza successo ....credevo fosse qualcosa di buono che quando lo spengo si intravede la lucetta accendersi quando invio qualcosa...


