Através da comunicação serial, o Arduino troca informações com um programa
Python no computador.
O Python pode receber informações de sensores conectados ao Arduino e enviar
comandos para serem executados.
Para trabalhar com a comunicação serial no Python utilizamos a biblioteca
pyserial.
No Python é necessário informar qual a porta de comunicação serial o Arduino
está conectado e qual a taxa de transferência (baud rate) que está
configurado.
Montei um exemplo mostrando o Python recebendo a informação de dois botões
sendo pressionados e, ao mesmo tempo, podendo enviar comandos ao Arduino para
acionar dois LEDs.
Esquema de ligação no Arduino:
Código fonte Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | """ Programa : PYTHON - ARDUINO Autor : Fellipe Couto [ http://www.efeitonerd.com.br ] Data : 16/05/2020 """ import serial print("\n## PYTHON - ARDUINO ##") print("www.efeitonerd.com.br") ports = [] for n in range(50): try: ports.append(serial.Serial("COM" + str(n)).port) except: pass if len(ports) == 0: input("\nArduino não conectado.") quit() elif len(ports) == 1: port_com = ports[0] else: print("\nPortas disponíveis:") for n in ports: print("\t" + n) port_com = "COM" + input("\nInforme o número da porta: ") try: port = serial.Serial(port_com, 115200, timeout=0.5) print("\nEscutando o Arduino... (Pressione Ctrl+C sempre que necessário enviar um valor ao Arduino)\n") while port.is_open: try: arduino = str(port.readline().decode()) if arduino != "": print("Arduino -> " + arduino) except KeyboardInterrupt: value = input("\nValor para enviar ao Arduino: ") port.write(value.encode()) except Exception as ex: input("\nERRO: " + str(ex)) |
Código fonte Arduino:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | /*--------------------------------------------------------- Programa : PYTHON - ARDUINO Autor : Fellipe Couto [ http://www.efeitonerd.com.br ] Data : 16/05/2020 ---------------------------------------------------------*/ #define BUTTON_A 2 #define BUTTON_B 3 #define LED_BLUE 4 #define LED_RED 5 void setup() { //Configuração dos pinos pinMode(BUTTON_A, INPUT_PULLUP); pinMode(BUTTON_B, INPUT_PULLUP); pinMode(LED_BLUE, OUTPUT); pinMode(LED_RED, OUTPUT); //Inicia a comunicação serial Serial.begin(115200); } void loop() { String value = ""; //Verificando a serial while (Serial.available() > 0) { value += Serial.readString(); delay(25); } //Verifica os valores recebidos através da serial if (value == "blue_on") { digitalWrite(LED_BLUE, HIGH); Serial.println("LED azul ligado!"); } else if (value == "blue_off") { digitalWrite(LED_BLUE, LOW); Serial.println("LED azul desligado."); } else if (value == "red_on") { digitalWrite(LED_RED, HIGH); Serial.println("LED vermelho ligado!"); } else if (value == "red_off") { digitalWrite(LED_RED, LOW); Serial.println("LED vermelho desligado."); } else if (value == "blink_leds") { Serial.print("Piscando leds..."); for (int i = 0; i < 70; i++) { digitalWrite(LED_BLUE, !digitalRead(LED_BLUE)); digitalWrite(LED_RED, !digitalRead(LED_RED)); delay(50); } Serial.println("Pisca finalizado."); } else if (value != "") { Serial.println("Valor não reconhecido."); } //Botão A if (digitalRead(BUTTON_A) == LOW) { Serial.println("Botão (A) pressionado!"); delay(500); } //Botão B if (digitalRead(BUTTON_B) == LOW) { Serial.println("Botão (B) pressionado!"); delay(500); } } |
Nenhum comentário:
Postar um comentário