Forum
>>
Programmazione Python
>>
Scripting
>>
Problema con comunicazione tra PC ed ARDUINOUNO via USB
Pagina: 1
Esegui il login per scrivere una risposta.
Pagina: 1
Scritto da fabio75 |
2024-01-14 03:30:06 - Problema con comunicazione tra PC ed ARDUINOUNO via USB
|
Salve sto tentando di far cumunicare tramite caratteri via USB Il PC con ARDUINOUNO.
Ho scritto il seguente codice lato PC con python3: import time import serial try: serial = serial.Serial("/dev/ttyACM0", 115200) if serial.is_open: print ("\n Il collegamento è stato effettuato con successo \n") seriale.close() except: print(""" Collegamento fallito, controllare se il dispositivo è stato connesso correttamente, o di avere inserito il nome della porta corretto \n""") while 1: time.sleep(1) serial.write('a') time.sleep(1) serial.write('a')Lato ARDUINOUNO ho scritto il segue codice che dovrebbe ricevere dei caratteri dal PC col codice python: #include <TimerOne.h> #define MAX_BUFFER 10 void read_USB(); int elemento_buffer=10; char bufferMAX BUFFER; void setup(void) { Serial.begin(115200); while (!Serial) delay(10); // will pause Zero, Leonardo, etc until serial console opens Serial.println("OK!"); Timer1.initialize(1000); //testa se ci sono comandi sulla USB ogni 1msec Timer1.attachInterrupt(read_USB); // read USB to run every 0.15 seconds } void loop() { while((Serial.available())>0) { // se c'è qualche byte da leggere, allora... char carattere=Serial.read(); // ...leggi byte if(carattere=='\r') continue; if(carattere=='\n') { bufferelemento buffer=0; // inserisco un carettere NULL per indicare la fine dell'array elemento_buffer=0; // resetto l'indice dell'array break; // esco dal ciclo while } bufferelemento buffer=carattere; // creo l'array di caratteri elemento_buffer++; // incremento l'indice del buffer if(elemento_buffer==MAX_BUFFER) // se si raggiunge il limite di byte del buffer allora... { elemento_buffer=MAX BUFFER-1; // ...sovrascrivi quello precedente } if(buffer0 == 'a') { Serial.println(buffer); } buffer0='0'; //pulisci buffer } } void read_USB() { if((Serial.available())>0) { buffer0='0'; } }Il codice ARDUINO è testato e funziona mentre il codice python3 non funziona e mi da il seguente errore: Collegamento fallito, controllare se il dispositivo è stato connesso correttamente, o di avere inserito il nome della porta corretto Traceback (most recent call last): File "/home/fabio/Scrivania/prova.py", line 20, in <module> serial.write('a') AttributeError: module 'serial' has no attribute 'write'Ho trovato in internet in un sito il codice python ma non capisco perche non funziona e mi da errore. Aiutatemi per favore. |
|
Scritto da nuzzopippo |
2024-01-15 16:59:32 - Re: Problema con comunicazione tra PC ed ARDUINOUNO via USB
|
È da ieri che guardo questo post sperando di NON risponderTi io, dato che non conosco "Arduino Uno" e che non ho mai avuto necessità di effettuare comunicazioni seriali, quindi non conosco nemmeno pySerial ... non parliamo, poi, del linguaggio C ... comunque, dato che il Tuo post sembra non aver solleticato alcun utente con conoscenze adeguate, proverò a darti un aiutino io.
Intanto, chiariamo che lo "aver trovato su internet" del codice python stabilisce che sei su di un percorso in salita, se non conosci python ... e da ciò che leggo sembra che qualche pecca in merito ci sia. Una prima osservazione, riguardo al codice python, è che se vai a chiamare una Tua variabile "serial" vai a coprire, nello spazio dei nomi, il modulo "serial" che importi, peccato veniale nel Tuo codice ma che, comunque, induce a confusione, tant'è che Ti ha indotto a scriverlo come "seriale" per chiuderlo, faccenda che avrebbe generato un ulteriore errore se mai il codice fosse arrivato ad essere eseguito a quel punto ... stai stabilendo una connessione seriale no? Chiama, p.e., "s_conn". Altro fattore critico sarebbe il chiudere la connessione prima ancora di utilizzarla per i "write" effettuati nel ciclo while ... se è chiusa, come farebbe a scrivere? Ciliegina sulla torta, intercettare l'errore senza farsi dire "perché" avviene ... nel Tuo codice stabilisci una connessione con "/dev/ttyACM0", non eccepisco su questo ma osservo che è una notazione del genere utilizzato su linux, apparentemente è tale istruzione che ti causa l'errore, sei sicuro che sia il tty giusto?, verificalo con un "lshw -short" (o "sudo lshw -short" se hai un sistema configurato con i sudoer's) ... o magari sei su windows (in tal caso, forse, sarebbe meglio indicare una porta COM) ... Non mi pronuncio sul codice C, ma prova ad utilizzare questo codice import time import serial s_conn = None try: s_conn = serial.Serial("/dev/ttyACM0", 115200) if s_conn.is_open: print ("\n Il collegamento è stato effettuato con successo \n") except Exception as e: msg = f'Collegamento fallito :\n{e}' print(msg) if not s_conn is None: response = 's' while response == 's': time.sleep(1) s_conn.write('a') time.sleep(1) s_conn.write('a') response = input('Premere "S" per continuare ').lower() s_conn.close()a posto del Tuo (magari indicato "COM4" o qualcosa di simile al posto di "/dev/ttyACM0" se sei su windows) e vedi un po' cosa succede, se la connessione non riesce potrai postare il messaggio di errore restituito. Ciao Fatti non foste a viver come bruti... |
|
Scritto da Gulshan Negi |
2024-01-19 09:52:33 - Re: Problema con comunicazione tra PC ed ARDUINOUNO via USB
|
Well, there are some issues with your python code, can you replace your code with this one.
import time import serial try: ser = serial.Serial("/dev/ttyACM0", 115200) if ser.is_open: print("\nConnection was successful\n") except Exception as e: print(f"Connection failed: {e}\n") exit() while True: time.sleep(1) ser.write(b'a') # Use 'b' before the character to convert it to bytes time.sleep(1) ser.write(b'a') # Use 'b' before the character to convert it to bytes Thanks |
Pagina: 1
Esegui il login per scrivere una risposta.