comunicazione con python

Salve, ho scritto questo codice che lo pubblico qui, per sapere come posso fare per gestire dei servo motori invece del semplice LED 13.

vi allego il codice python:

from libs.f import *
import serial
import time
arduino = serial.Serial('COM3',9600)
time.sleep(1)
while(True):
    val = my_input(3,": ", '?')
    if val=="H":
        h = "H"
        arduino.write(bytes(h, 'UTF-8'))
        print("LED ON")
    if val =="L":
        l = "L"
        arduino.write(bytes(l, 'UTF-8'))
        print("LED OFF")
    if val == "Q":
        Exit()
arduino.close()

per i servo per caso devo andare da 0 a 180 gradi?

grazie mille.

Mica ho capito. Che Arduino usi ?
Probabilmente hai su Arduino uno sketch che riceve via seriale (COM3) dei comandi da Python, ma che sketch c’e’ su Arduino ? Firmata ?

si ho un arduino uno.. lo sketch è questo:

#define LED 13
 
void setup() {
  pinMode(LED, OUTPUT);
  Serial.begin(9600);
}
 
void loop() {
  if (Serial.available()) {
    char c = Serial.read();
    if (c == 'H') {
      digitalWrite(LED, HIGH);
    }
    else if (c == 'L') {
      digitalWrite(LED, LOW);
    }
  }
}

Lo preso da un tutorial ed ho aggiustato la parte di python con le mie funzioni.

Link di riferimento:
http://www.giuseppecaccavale.it/arduino/comandare-arduino-con-python/

volevo sapere se da write invece di scrivere H o L , posso scrivere 0, 180 etc.. per muovere il servo.

ti ringrazio molto.

Non proprio. Qui stiamo spedendo un singolo carattere, se spedisci 120 ad esempio stai spedendo un testo di tre caratteri, '1','2' e '3' ovvero una stringa (vettore/array di caratteri terminati da null)
Da Arduino stai leggendo 1 char, bisogna usare a questo punto la Serial.parseInt() per leggere i vari caratteri (e poi lui li converte in valore numerico)

Se Python non mi inganna dovresti essere in grado di inviare un singolo byte attraverso il metodo write, visto che un byte puo essere interpretato come un valore numerico compreso tra 0 e 255 l'intervallo 0 180 è completamente coperto, per tanto potresti provare a scrivere arduino.write(180) dalla parte di Arduino riceverai il byte che potrai usare per impostare il tuo servo, basterebbe un semplice servo.write(Serial.read());

ok, grazie mille per le informazioni che mi avete dato.. ora studio e poi vedo di fare le prove.

vi ringrazio molto e buona giornata.

Salve, sapete mica se esiste una libreria già completa con tutti i suoi comandi e che c’è la documentazione?

Perché in python puro senza librerie mi è difficile.

Grazie mille.

Ce l'hai gia la libreria, la pySerial la documentazione la puoi trovare qui.

grazie mille della documentazione .. sai mica se c'è la possibilità di scaricare la documentazione?

grazie di nuovo.