A comunicação serial e a porta serial fazem parte de equipamentos eletrônicos como periféricos de computador, modems, sistema de aquisição de dados, sistemas para configuração de equipamentos médicos, industriais, de radiocomunicação, kits de avaliação, depuração e desenvolvimento de microcontroladores e DSPs, etc. daí sua importância na compreensão de como usar e implementar a porta serial na placa micro:bit.

As comunicações seriais permitem que os microcontroladores enviem e recebam dados por 2 fios, geralmente conectados à porta serial. Os computadores também possuem uma porta serial, por isso é muito comum conectar esses dispositivos para enviar e receber dados, conforme mostra a imagem a seguir:

 


| Clique na imagem para ampliar |

 

 

O princípio de funcionamento da porta serial é baseado em circuitos digitais denominados: "Shift registers", que, por exemplo, para o transmissor, recebem um byte (8 bits) e os emitem ou enviam por 1 bit. Os receptores leem 1 bit e emitem um byte (8 bits), conforme mostrado na imagem a seguir:

 


| Clique na imagem para ampliar |

 

 

Para que os registradores de deslocamento funcionem, eles precisam de um pulso de clock, que indica a velocidade de transmissão ou bits por segundo (bps). Nas comunicações seriais essa velocidade também é conhecida como: “baud”. Para que a comunicação seja bidirecional, é necessário que cada dispositivo tenha um transmissor e um receptor. Um dos principais usos da porta serial é transmitir strings de texto, como mostra a imagem a seguir, onde a placa microbit transmite a string: "Hello world", para um computador.

 


| Clique na imagem para ampliar |

 

 

Podemos ver como os dados viajam pelos registradores de deslocamento e chegam ao outro lado de maneira ordenada. Um ponto importante a se ter em mente para a correta transmissão/recepção dos dados é que os dois clocks ou velocidades (bauds) devem ser iguais no transmissor e no receptor.

Para utilizar os blocos de comunicação serial na placa micro:bit, acesse o menu: “Avançado” e depois o menu: Serial, conforme a imagem a seguir:

 


 

 

 

Aparecerá uma janela com os blocos para comunicação serial, conforme imagem a seguir:

 


| Clique na imagem para ampliar |

 

 

Ao utilizar blocos de porta serial, o MakeCode oferece um console simulador para verificar os dados enviados pela porta serial. Selecione o botão: "Mostrar console do simulador" conforme mostrado na figura a seguir:

 


 

 

 

Uma janela como a mostrada na imagem a seguir será exibida:

 


| Clique na imagem para ampliar |

 

 

O simulador possui uma janela para plotar ou representar graficamente valores numéricos e uma janela para texto. Nesta seção usaremos este simulador para ver a comunicação serial. É necessário ter a versão mais recente do navegador para ter um melhor desempenho do simulador. Para sistemas operacionais inferiores ao Windows 10, pode ser necessário instalar algum driver para reconhecer a placa microbit.

 

 

Gravar na porta serial.

 

Para escrever um número na porta serial podemos usar o bloco chamado: “serial write number”, que é mostrado na imagem a seguir:

 


| Clique na imagem para ampliar |

 

 

Por exemplo, o programa a seguir envia um número aleatório entre 0 e 10 pela porta serial.

 


 

 

 

O bloco: “escolher aleatoriamente de” encontra-se no menu: “Matemática”. No console você pode ver os dados, conforme mostrado na imagem a seguir:

 

 


| Clique na imagem para ampliar |

 

 

Para escrever uma string de texto (string) na porta serial, podemos usar o bloco chamado: “serial write string”, que é mostrado na imagem a seguir:

 


| Clique na imagem para ampliar |

 

 

 

Para escrever uma linha de texto, ou seja, uma string de caracteres terminada com um retorno de carro e uma nova linha, podemos usar o bloco chamado: "serial write line", que é mostrado na figura a seguir:

 


| Clique na imagem para ampliar |

 

 

O programa a seguir mostra o uso dos blocos vistos anteriormente:

 


| Clique na imagem para ampliar |

 

 

Para abrir o botão do console, pressione o botão A ou B no cartão simulador de micro:bit. Ao pressionar os botões podemos ver os dados no console como mostra a imagem a seguir:

 


| Clique na imagem para ampliar |

 

 

Para escrever um texto no formato: nome: valor, podemos usar o bloco chamado: “serial write value”, que é mostrado na figura a seguir:

 


| Clique na imagem para ampliar |

 

 

Por exemplo, o programa a seguir envia a temperatura pela porta serial. A variável de temperatura encontra-se no menu: “Input”

 


 

 

 

Com o mouse, você pode alterar o valor da variável de temperatura no simulador e ver os valores no terminal como mostra a imagem a seguir:

 


| Clique na imagem para ampliar |

 

 

 

 

Para escrever um array de valores numéricos como CSV (Comma Separated Values), ou seja, valores separados por vírgulas, podemos utilizar o bloco chamado: “serial write matrix numbers of”, conforme mostra a imagem a seguir:

 


| Clique na imagem para ampliar |

 

 

 

Leitura da porta serial.

Para ler os dados recebidos pela porta serial, como uma string de caracteres, podemos utilizar o bloco chamado: “serial read string”, conforme mostra a imagem a seguir:

 


 

 

 

Para ler uma linha de texto da porta serial, podemos utilizar o bloco chamado: “serial read line”, conforme mostra a imagem a seguir:

 


| Clique na imagem para ampliar |

 

Para ler uma linha de texto da porta serial, retornando os dados quando chega um delimitador, podemos utilizar o bloco chamado: “serial read until”, como mostra a imagem a seguir:

 


| Clique na imagem para ampliar |

 

 

Os delimitadores de bloco: "serial read until", podem ser vistos na imagem a seguir:

 


 

 

 

Para capturar um evento quando um dos delimitadores for igual, podemos utilizar o bloco chamado: "serial ao receber dados", conforme mostra a imagem a seguir:

 


| Clique na imagem para ampliar |

 

 

Os delimitadores que podem gerar eventos são mostrados na imagem a seguir:

 


 

 

 

 

Configuração e blocos avançados da porta serial.

A maioria dos blocos que veremos a seguir, encontram-se em um menu chamado "mais", localizado abaixo do menu: "Série", conforme mostra a imagem a seguir:

 


| Clique na imagem para ampliar |

 

 

Para definir o tamanho do buffer de transmissão, podemos usar o bloco chamado: “serial define o tamanho da memória de transmissão interna para”, que é mostrado na imagem a seguir:

 


| Clique na imagem para ampliar |

 

 

Para definir o tamanho do buffer de recepção da porta serial, podemos usar o bloco chamado: “serial set internal receive memory size to”, que é mostrado na imagem a seguir:

 


| Clique na imagem para ampliar |

 

 

Para enviar um buffer pela porta serial, podemos usar o bloco chamado: “serial write buffer”, que é mostrado na imagem a seguir:

 


| Clique na imagem para ampliar |

 

 

Para ler vários caracteres do buffer de recebimento, podemos usar o bloco chamado: “serial read buffer”, que é mostrado na imagem a seguir:

 


| Clique na imagem para ampliar |

 

 

No parâmetro do bloco: "serial read buffer", você pode especificar o número de caracteres que deseja ler. Se este parâmetro for zero (0), o bloco retornará os dados disponíveis no buffer de recebimento.

Para definir a taxa de transmissão da porta serial, podemos usar o bloco chamado: “serial definir a taxa de transmissão”, que é mostrado na imagem a seguir:

 


| Clique na imagem para ampliar |

 

 

Normalmente este bloco se encaixa no bloco: "na inicialização" e a imagem a seguir mostra as velocidades possíveis que podem ser configuradas, sendo as mais utilizadas na prática 9600 e 115200 bauds:

 


 

 

 

Por padrão, a conexão para a porta serial é feita pela porta USB da placa micro:bit. Essa configuração pode ser alterada para que os dados da porta serial entrem e saiam dos pinos da placa micro:bit. Para configurar a entrada e saída da porta serial nos pinos, utilize o bloco chamado: “serial redirect to”, que pode ser visto na figura a seguir:

 


| Clique na imagem para ampliar |

 

 

Nos parâmetros que o bloco recebe, temos:

TX: é o pino de transmissão no qual os dados seriam enviados.

RX: é o pino de recepção no qual os dados serão recebidos.

velocidade: É a velocidade em bauds, para receber e transmitir dados.

Observe na figura a seguir, os possíveis pinos que podem ser selecionados para TX e RX no menu suspenso do bloco: “serial redirect to”:

 


 

 

 

A figura a seguir mostra as taxas de transmissão possíveis no menu suspenso do bloco:

 

 


 

 

 

O seguinte é um exemplo onde a porta serial é redirecionada para o pino P1 (TX) e P2 (RX) com uma velocidade de 9600 bauds:

 


 

 

 

Para configurar a entrada e saída da porta serial, para comunicação via conexão USB, podemos utilizar o bloco chamado: “serial port redirect to USB”, que é mostrado na imagem a seguir:

 


 

 

 

 

Leitura serial da micro:bit pelo computador.

Se você deseja ler diretamente os dados seriais da placa micro:bit, é necessário instalar um emulador de terminal como: Putty, Tera Term, etc. Vamos instalar o emulador de terminal putty, que você pode baixar no site: https://www.putty.org 

Depois de baixar o programa, vá para o gerenciador de dispositivos do Windows, que se encontra em “Configurações/Sistema/Sobre”, expanda a seção: Portas (COM & LPT) e verifique o número COM que foi atribuído a placa micro:bit.

 


| Clique na imagem para ampliar |

 

 

Supondo que foi atribuído, por exemplo, COM8 para o cartão microbit, abra o programa PuTTY e na tela principal utilize a seguinte configuração: Serial/COM8/115200, conforme figura a seguir:

 

 


 

 

 

Opcionalmente você pode verificar: “CR Implícito em cada LF”, conforme mostrado na imagem a seguir:

 


 

 

 

Agora você pode selecionar o botão: “Abrir” e um terminal aparecerá como mostrado na imagem a seguir:

 


| Clique na imagem para ampliar |

 

 

Uma das principais aplicações dos terminais é a depuração de projetos com microcontroladores e DSPs. Pois bem, utilizar o bloco: "serial write line", dentre as diversas atividades de um programa em desenvolvimento com a placa micro:bit, permite saber como ele responde e quais atividades estão sendo geradas, antes de determinados eventos em um projeto.