Muitas vezes, iniciantes e não apenas desenvolvedores têm perguntas. Como controlar com o Arduino a partir de um computador? E se o computador não for um Raspberry Pi, mas um computador doméstico comum? E se você não deseja sofrer com o ESP8266 e gerenciar através da interface da web? É realmente necessário abrir o IDE do Arduino a cada vez e enviar comandos pelo
Monitor de porta ? Vou falar sobre como criar meu próprio aplicativo GUI para controlar o Arduino.
Equipamento
Recentemente, recebi uma placa muito interessante:
Arduino SS Micro . Essa placa, semelhante ao Digispark Attiny 85, ainda é uma versão chinesa do Arduino Micro, com uma saída USB.

Não falarei sobre isso em detalhes, porque um usuário do YouTube com o apelido
iomoio já fez
isso e sua resenha pode ser encontrada
aqui .
Parece-me que este é um dispositivo bastante interessante e conveniente para pequenos projetos domésticos, porque os fios têm uma superpropriedade: se perder no momento mais inoportuno.
Um MacBook Pro com sistema operacional macOS Mojave foi usado como computador de controle, mas não feche o artigo se você usa Windows ou Linux - tudo o que está descrito no artigo funcionará sem alterações em qualquer sistema operacional.
Esboço para Arduino
Como exemplo, será usado um esboço que liga e desliga o LED, sob comando da porta serial.
ATENÇÃOO LED no Arduino SS Micro trava na porta SS e, portanto, apaga-se automaticamente. Apesar disso, o exemplo padrão do
Blink é um LED piscando.
char inChar; #define LED_PIN SS void setup() { pinMode(LED_PIN, OUTPUT);
Se você usar outro Arduino - não esqueça de mudar o pino do LED.
Código do computador
Uma das vantagens do Python, além de sua plataforma cruzada, é a presença de um grande número de bibliotecas. Vamos precisar de:
- PySerial - biblioteca para trabalhar com porta serial
- PyQT5 - biblioteca para criar uma interface gráfica
Instalação
Para instalar, use o gerenciador de pacotes embutido - pip.
pip install pyserial pyqt5
Para a conveniência de criar uma GUI, você pode instalar o programa QTDesigner.
Interface
Como este programa tem mais probabilidade de demonstrar os recursos, o usuário pode selecionar a porta dentre as propostas, bem como a velocidade com que a comunicação ocorrerá.

Código fonte
Todo o trabalho com o dispositivo é graças à biblioteca PySerial. Mas existem algumas nuances. Por exemplo, como você sabe a qual porta o dispositivo está conectado?
Em todo o conhecido site
stackoverflow , um usuário com o apelido
Thomas sugeriu uma solução pronta, que eu usei.
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'):
Além disso, você deve manter uma lista de velocidades disponíveis:
speeds = ['1200','2400', '4800', '9600', '19200', '38400', '57600', '115200']
Agora vamos montar o
design (criado no QtDesigner e convertido usando o utilitário pyuic5 em um arquivo .py),
funções para verificar portas e o
código do programa principal .
A classe principal que contém toda a lógica do 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')
As variáveis
self.Port e
self.Speed são listas suspensas que contêm os valores de portas e velocidades disponíveis.
Quando você clica no botão
self.ConnectButton , a função de
conexão é chamada, na qual é feita uma tentativa de conectar-se a uma determinada porta em uma determinada velocidade. Se a conexão for bem-sucedida, o botão fica verde e o rótulo muda.

A função
send envia uma string de bytes para a nossa porta - forçando-nos a ativar o modo intermitente.
Assim, você pode controlar vários dispositivos conectados ao USB.
Este artigo é introdutório e geral, informações mais completas podem ser encontradas, por exemplo, aqui:
O código fonte completo para o esboço do Arduino e o programa está hospedado no
GitHub .