Comunicazione seriale tra Python e Arduino

In questa guida vedremo come inviare dati da un computer a una scheda Arduino attraverso una comunicazione seriale con Python. La comunicazione seriale tra Python e Arduino avviene attraverso una libreria molto utilizzata: Pyserial.

Installare libreria PySerial per comunicazione seriale

PySerial è una libreria Python che viene utilizzato per leggere e scrivere dati seriali su Arduino o qualsiasi altro microcontrollore. Per installare la libreria, visita la pagina di download di PySerial e seguire i passaggi seguenti:

Scarica PySerial dal link sopra o apri CMD e digita

pip install pyserial

Ora all’interno del programma principale possiamo inserire il comando

import serial

Se nessun errore viene visualizzato, allora la libreria è installata correttamente.

Codice Python

Creiamo il nostro script Python che invia sulla porta seriale un valore immesso da tastiera. Nella creazione dell’oggetto Serial dobbiamo inserire il nome della port a cui è connesso Arduino, nell’esempio è ‘COM4’

# Importing Libraries
import serial
import time

arduino = serial.Serial(port='COM4', baudrate=115200, timeout=.1)

def write_read(x):
    arduino.write(bytes(x, 'utf-8'))
    time.sleep(0.05)
    data = arduino.readline()
    return data

while True:
    num = input("Enter a number: ") # Taking input from user
    value = write_read(num)
    print(value) # printing the value

Codice Arduino

Il codice Arduino è molto semplice, inizializza la velocità della porta seriale a ‘115200’ e setta un Timeout di 1ms. Attraverso un ciclo while e l’istruzione ‘available‘ attende la ricezione di nuovi byte sulla porta seriale.

Alla ricezione di nuovi dati, essi vengono letti dalla porta con l’istruzione ‘readString‘ ed assegnati alla variabile x.

int x;

void setup() {
  Serial.begin(115200);
  Serial.setTimeout(1);
}

void loop() {
  while (!Serial.available());
  x = Serial.readString().toInt();
  Serial.print(x + 1);
}

Funzioni principali per la comunicazione seriale

Le funzioni più importanti che possiamo utilizzare con l’oggetto Serial sono:

  • void Serial.begin(int baudrate): inizializza la comunicazione con i parametri standard (8 bit di dati, no parità e 1 bit di stop) e con la velocità baudrate.
  • int Serial.available(): fornisce il numero di bytes letti e presenti nel buffer di lettura (max 64 bytes).
  • int Serial.parseInt(): restituisce il primo int presente nel buffer di lettura
  • float Serial.parseFloat(): restituisce il primo float presente nel buffer di lettura 
  • size_t Serial.readBytes(byte buffer[], int length): legge un numero di bytes dal buffer di lettura, e li mette nell’array buffer partendo dall’indice 0 (size_t corrisponde a unsigned int).
  • int Serial.read(): restituisce il primo byte presente nel buffer. Se il buffer di lettura è vuoto, restituisce -1.
  • size_t Serial.write(byte buffer[], int length): scrive un numero di bytes dalla posizione 0 del buffer sul canale. Restituisce il numero di bytes scritti.
  • size_t Serial.print(value): scrive il valore fornito in ASCII sul canale. Può essere un numero, una stringa, … . Restituisce il numero di bytes scritti
  • size_t Serial.println(value): uguale al precedente comando, ma termina l’invio con il termiantore return (carattere di ritorno).

Related Articles

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Ultimi Articoli