pont_serie.py

LattePanda Alpha · Archivo : pont_serie.py · Lenguaje : Python · Uso : Téléverser un sketch Arduino et lui parler par série

El 32U4 sigue siendo un Arduino autónomo: este sketch de mando PWM, pilotado por pyserial desde el anfitrión, enseña el dúo en crudo: sin librería, protocolo a elegir. El puente que todo proyecto acaba usando.

Hardware necesario

Una LattePanda Alpha (x86 Intel m3-7Y30, Windows 10 o Linux) con su coprocesador ATmega32U4 compatible Arduino Leonardo en los conectores de 50 pines. 1 accionador en D9 (LED + 330 Ω, o transistor + lámpara).

Cableado

El puerto serie interno del MCU aparece como COM3 (Windows) o un tty interno (Linux): comprobadlo en el administrador de dispositivos o dmesg.

Funcionamiento

El sketch del MCU lee una línea entera, mapea 0-100 al PWM de 8 bits y acusa recibo; Python escribe/lee en espejo. El sleep de 2 s cubre el reset USB del 32U4 al abrir el puerto. El ATmega32U4 es un Leonardo auténtico: prográmelo como « Arduino Leonardo » en el IDE por su puerto COM interno. En el anfitrión, la librería Python lattepanda de DFRobot habla con él por serie.

Para ir más lejos

Protocolo JSON en este canal, o watchdog: sin consigna en 5 s, el MCU corta el PWM.

pont_serie.py

#!/usr/bin/env python3
# Cote MCU (a televerser d'abord, carte « Arduino Leonardo ») :
#   void setup(){ Serial.begin(9600); }
#   void loop(){
#     if (Serial.available()){
#       int v = Serial.readString().toInt();
#       analogWrite(9, map(v, 0, 100, 0, 255));   // consigne 0-100 -> PWM D9
#       Serial.print("recu "); Serial.println(v);
#     }
#   }
# Cote hote : envoyer des consignes et lire les accusés.
import serial, time

port = serial.Serial("COM3", 9600, timeout=1)   # port du MCU (Linux : /dev/ttyS*)
time.sleep(2)                                    # le 32U4 se reinitialise a l'ouverture

for consigne in range(0, 101, 10):
    port.write(f"{consigne}\n".encode())
    reponse = port.readline().decode().strip()
    print(f"consigne {consigne:3d} -> MCU: {reponse}")
    time.sleep(0.3)
port.close()

← Volver a la ficha