Índice:
- Etapa 1: O que precisamos?
- Etapa 2: Conexões de Hardware
- Etapa 3: software Python
- Etapa 4: software de microcontrolador
- Etapa 5: Conclusão
Vídeo: PIC MCU e comunicação serial Python: 5 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:37
Ola pessoal! Neste projeto, tentarei explicar meus experimentos em PIC MCU e comunicação serial Python. Na Internet, existem muitos tutoriais e vídeos sobre como se comunicar com PIC MCU através de um terminal virtual que é muito útil. No entanto, em meu projeto principal, um dos requisitos é estabelecer comunicação serial entre PIC MCU e Python, o qual não consegui encontrar um bom tutorial. Então vamos começar:)
Etapa 1: O que precisamos?
Então, primeiro vamos ver o que precisamos. Em termos de hardware:
- Certamente, PIC MCU que é no meu caso PIC16f877a (você não precisa dessa placa. Isso é para simplificar algumas conexões sujas)
- Conversor de USB para TTL para se comunicar com PIC MCU pela porta USB usando pinos TX e RX.
- Programador MCU, que no meu caso é o programador K150, mas você pode usar o PicKit 2, 3 ou qualquer outra coisa.
- E finalmente um computador:)
Em termos de software:
- Um IDE para escrever código Python, que no meu caso é o Pycharm, mas você também pode usar o IDE Python regular.
- Um ambiente para programar o MCU que é no meu caso MPLAB X IDE com compilador CCS C.
Etapa 2: Conexões de Hardware
Na imagem anexada, as conexões de hardware são fornecidas entre o PIC MCU e o conversor USB TTL conforme abaixo:
RC7 (RX) ------------- TXD
RC6 (TX) ------------- RXD
GND -------------- GND
Você não precisa conectar o pino VCC do conversor USB TTL (no entanto, se você quiser, pode fazer). Essas 3 conexões são suficientes.
Etapa 3: software Python
Vamos começar a escrever um software para o lado do Python que será o transmissor no nosso caso, pois enviará a string para o MCU.
import serial #import serial librarydata = '24' #data que enviaremos dados = a + '\ 0' ser = serial. Serial ('COM17', baudrate = 9600, timeout = 1) #conecte à porta ser.write (a.encode ()) #enviar os dados
Em primeiro lugar, a biblioteca serial é importada para usar seus futuros. Queremos enviar dados de string de exemplo para confirmar no código MCU que os aceitamos. Eu quero aqui observar uma coisa. É por isso que adicionamos '\ 0' à string. Isso ocorre porque, no lado do MCU, é impossível ler a string totalmente. É lido personagem por personagem. Então, queremos saber o final da string para parar de ler. Então, adicionamos '\ 0' à string que indica o final da string. Em seguida, conectamos à porta que está conectada ao MCU. Você pode determinar essa porta pesquisando em 'Gerenciador de Dispositivos'. Portanto, tome cuidado para que você esteja na mesma porta. Afinal, enviamos os dados para o MCU. ".encode ()" deve ser adicionado aos dados da string para poder enviá-los ao receptor.
Etapa 4: software de microcontrolador
Então, vamos ver nosso código para MCU. Em primeiro lugar, quero mostrar a você o arquivo "config.h" que não é obrigatório, mas fiz isso para simplificar. Aqui, basta alterar a frequência de seu MCU.
#ifndef CONFIG_H # define CONFIG_H
#incluir
#device ADC = 16
#FUSES NOWDT // Sem cronômetro de cão de guarda
#FUSES NOBROWNOUT // Sem redefinição de brownout #FUSES NOLVP // Sem programação de baixa tensão, B3 (PIC16) ou B5 (PIC18) usado para E / S
#use delay (cristal = 6000000)
Agora vamos ver o código principal:
#incluir
#incluir
#use rs232 (baud = 9600, xmit = pin_C6, rcv = pin_C7, paridade = N, stop = 1)
#define LED_RED PIN_D0
char inp; char cmp _ = "24"; buffer char [3];
#int_rda
void serial_communication_interrupt () {disable_interrupts (int_rda); sem sinal int i = 0; inp = getc (); putc (inp); while (inp! = '\ 0') {buffer = inp; inp = getc (); putc (inp); i ++; }}
void main (void) {
set_tris_d (0x00); output_d (0xFF); enable_interrupts (GLOBAL); enquanto (1) {permitir_interrupções (int_rda); if (strcmp (buffer, cmp_) == 0) output_low (LED_RED); else output_high (LED_RED); }}
No início, incluímos a biblioteca de strings que será útil em operações de strings que, em nosso caso, é a operação de comparação de strings (strcmp). Assim, nosso propósito neste código é acender o led conectado ao pino D0 se o valor transmitido for igual ao nosso valor dado que é "cmp_" igual a "24".
Em primeiro lugar, habilitamos a interrupção "rda", que causará interrupção quando os dados forem transmitidos.
Em segundo lugar, vamos dar uma olhada dentro do ISR (interrupção do serviço de rotina), que é chamado de "serial_communication_interrupt". Internamente, nós primeiro desabilitamos o flag de interrupção para ler o valor recebido e causar interrupções adicionais. Depois disso, lemos a string caractere por caractere até chegar a '\ 0'. Enquanto lemos dentro da string, também escrevemos cada char no buffer para obter a string recebida.
No final, voltamos a entrar enquanto. Aqui, comparamos nossa string de buffer que é a string recebida e a string cmp_ para ver se obtemos a string corretamente. Se forem iguais, ligo o led, caso contrário, apago. *
* No código, fiz a reversão porque minha placa inverte os valores dos pinos da porta D. Em seu código, altere-o para:
if (strcmp (buffer, cmp_) == 0) output_high (LED_RED); senão output_low (LED_RED);
Por fim, compile-o e carregue-o em seu MCU e, em seguida, execute o código em Python. Você deverá ver o led acender.
Etapa 5: Conclusão
Concluímos uma tarefa com sucesso. Espero que seja útil para você. Se você tiver alguma dúvida, não hesite em perguntar:) Até o próximo projeto.
Recomendado:
Comunicação serial do Arduino: 5 etapas
Comunicação serial do Arduino: Muitos projetos do Arduino dependem da transmissão de dados entre vários Arduinos. Se você é um amador que está construindo um carro RC, um avião RC ou projetando uma estação meteorológica com um display remoto, você precisará saber como transferir seriamente
Comunicação serial Arduino e Python - Visor do teclado: 4 etapas
Arduino e Python Serial Communication - Keypad Display: Este projeto é feito para usuários de mac mas também pode ser implementado para Linux e Windows, o único passo que deve ser diferente é a instalação
Comunicação serial sem fio usando Bluefruit: 4 etapas
Comunicação serial sem fio usando Bluefruit: Aqui está um guia passo a passo simples para substituir seus fios por uma conexão bluetooth de baixa energia: Levei um tempo para descobrir isso porque quase não há nenhuma documentação sobre como fazer isso com tecnologia moderna de bluetooth de baixa energia, como como o Bluefrui
SmartMirror baseado na web usando comunicação serial: 6 etapas
SmartMirror baseado na Web usando comunicação serial: Este instrutível é entregue com todo o código pronto para uso. O desenvolvimento foi muito complicado, mas uma vez configurado, é muito fácil de personalizar. Dê uma olhada e divirta-se;)
Comunicação serial usando ARM Cortex-M4: 4 etapas
Comunicação serial usando ARM Cortex-M4: Este é um projeto baseado em breadboard que usa ARM Cortex-M4 (Texas Instruments EK-TM4C123GXL) para comunicação serial usando terminal virtual. A saída pode ser obtida na tela LCD 16x2 e a entrada para comunicação serial pode ser fornecida em Mo serial