Muy a menudo, los principiantes y no solo los desarrolladores tienen preguntas. ¿Cómo controlar con Arduino desde una computadora? ¿Y si la computadora no es una Raspberry Pi, sino una computadora doméstica normal? ¿Y si no desea sufrir con ESP8266 y administrar a través de la interfaz web? ¿Es realmente necesario abrir el IDE de Arduino cada vez y enviar comandos a través del
Monitor de puerto ? Hablaré sobre cómo crear mi propia aplicación GUI para controlar Arduino.
Equipo
Recientemente obtuve una placa muy interesante:
Arduino SS Micro . Esta placa, que se parece al Digispark Attiny 85, es una versión china del Arduino Micro con salida USB.

No hablaré de ello en detalle, porque un usuario de YouTube con el apodo
iomoio ya lo ha hecho, y su reseña se puede encontrar
aquí .
Me parece que este es un dispositivo bastante bueno y conveniente para pequeños proyectos de viviendas, porque los cables tienen una súper propiedad: perderse en el momento más inoportuno.
Se usó un MacBook Pro con sistema operativo macOS Mojave como computadora de control, pero no cierre el artículo si usa Windows o Linux; todo lo descrito en el artículo funcionará sin cambios en ningún sistema operativo.
Boceto para Arduino
Como ejemplo, se utilizará un boceto que enciende y apaga el LED, según el comando del puerto serie.
ADVERTENCIAEl LED en el Arduino SS Micro se cuelga en el puerto SS y, por lo tanto, se apaga automáticamente. A pesar de esto, el ejemplo de
parpadeo estándar es un LED parpadeante.
char inChar; #define LED_PIN SS void setup() { pinMode(LED_PIN, OUTPUT);
Si va a utilizar otro Arduino, no olvide cambiar el pin del LED.
Código de computadora
Una de las ventajas de Python, además de su multiplataforma, es la presencia de una gran cantidad de bibliotecas. Necesitaremos:
- PySerial - biblioteca para trabajar con puerto serie
- PyQT5 - biblioteca para crear una interfaz gráfica
Instalación
Para instalar, use el administrador de paquetes incorporado - pip.
pip install pyserial pyqt5
Para la conveniencia de crear una GUI, puede instalar el programa QTDesigner.
Interfaz
Dado que este programa tiene más probabilidades de demostrar las capacidades, el usuario puede seleccionar el puerto de los propuestos, así como la velocidad con la que se producirá la comunicación.

Código fuente
Todo el trabajo con el dispositivo es gracias a la biblioteca PySerial. Pero hay algunos matices. Por ejemplo, ¿cómo sabe a qué puerto está conectado el dispositivo?
En todo el conocido sitio
stackoverflow , un usuario con el apodo de
Thomas sugirió una solución preparada, que utilicé.
def serial_ports(): """ Lists serial port names :raises EnvironmentError: On unsupported or unknown platforms :returns: A list of the serial ports available on the system """ if sys.platform.startswith('win'): ports = ['COM%s' % (i + 1) for i in range(256)] elif sys.platform.startswith('linux') or sys.platform.startswith('cygwin'):
Además, debe mantener una lista de velocidades disponibles:
speeds = ['1200','2400', '4800', '9600', '19200', '38400', '57600', '115200']
Ahora juntemos el
diseño (creado en QtDesigner y convertido usando la utilidad pyuic5 a un archivo .py),
funciones para escanear puertos y el
código del programa principal .
La clase principal que contiene toda la lógica del programa.
class LedApp(QtWidgets.QMainWindow, design.Ui_Form): def __init__(self): super().__init__() self.setupUi(self) self.Port.addItems(serial_ports()) self.Speed.addItems(speeds) self.realport = None self.ConnectButton.clicked.connect(self.connect) self.EnableBtn.clicked.connect(self.send) def connect(self): try: self.realport = serial.Serial(self.Port.currentText(),int(self.Speed.currentText())) self.ConnectButton.setStyleSheet("background-color: green") self.ConnectButton.setText('') except Exception as e: print(e) def send(self): if self.realport: self.realport.write(b'b')
Las variables
self.Port y
self.Speed son listas desplegables que contienen los valores de puertos y velocidades disponibles.
Cuando hace clic en el botón
self.ConnectButton , se llama a la función de
conexión , en la que se intenta conectarse a un puerto determinado a una velocidad determinada. Si la conexión es exitosa, el botón se vuelve verde y la etiqueta cambia.

La función de
envío envía una cadena de bytes a nuestro puerto, lo que nos obliga a activar el modo parpadeante.
Por lo tanto, puede controlar varios dispositivos conectados a USB.
Este artículo es introductorio y general, se puede encontrar información más completa, por ejemplo, aquí:
El código fuente completo tanto para el boceto para Arduino como para el programa está alojado en
GitHub .