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); } } |
oba amigo tranquilo olhei o seu código do python é semelhante ao que procuro receber e enviar msm simulteneamente do arduino utilizei uma fração do seu código(python) mas o retorno do arduino não esta bom o retorno se repete mesmo digitando caracteres diferentes pode me da uma ajuda. um abraço
ResponderExcluirBoa tarde! Poderia explicar melhor sobre esse retorno que se repete? Não entendi muito bem.
ResponderExcluirOba tranquilo bom é assim eu envio um caracter para acender o led o arduino me retorna a palavra ligado ai quando eu envio um caracter para apagar o led ele me retorna ligado onde era para me retornar desligado e vise versa o led acende e apaga numa boa obriga pela atenção
ResponderExcluirBom dia! Se quiser me enviar via e-mail, acho que poderemos analisar melhor o trecho do código fonte. Fiz uns testes aqui com esse código que postei e não obtive problemas. Abraços! fellipe.couto@yahoo.com.br
Excluiroba boa noite eu me achei deu bom consegui obrigado
ResponderExcluir