Interface gráfica em C# para comunicação serial (UART)

Interface Gráfica

Este artigo apresenta o desenvolvimento de um projeto prático explicativo para desenvolver uma interface gráfica em C# na IDE Visual Studio Versão 2017 com o objetivo de testar a comunicação serial (UART - Universal asynchronous receiver/transmitter) através das portas USB (Universal Serial Bus) de um computador ou notebook.

 

Para auxiliar nos testes desta interface, foi também desenvolvido um código em linguagem de programação Arduino para a placa Arduino Uno. Utilizou-se os comandos de configuração, escrita e leitura das portas seriais, juntamente com outros periféricos para melhor ilustrar algumas opções de aplicação para os comandos a serem transmitidos ou recebidos via porta serial.

 

Os componentes de hardware utilizado são:

  • Arduino Uno;
  • Shield LCD Keypad Arduino;
  • 3 resistores de 1 kΩ;
  • 1 resistor de 100 kΩ;
  • Botão push-bottom.

 

Os softwares utilizados são:

  • Visual Studio 2017;
  • Arduino Software IDE.

 

Antes de efetivamente entrar no projeto, uma breve definição sobre a comunicação serial é realizada a seguir.

 

Comunicação Serial - UART (Universal asynchronous receiver/transmitter)

 

O protocolo de comunicação UART, em português significa Transmissor/Receptor Universal Assíncrono. É como o próprio nome diz, assíncrono, ou seja, não existe um sinal de clock para sincronizar o sinal transmitido com o sinal recebido. A UART é um protocolo de comunicação full-duplex, ou seja, a comunicação é realizada ao mesmo tempo de um dispositivo para o outro, pois os dados trafegam por meios diferentes, como pode ser visto na Figura 1.

 

Figura 1 - Comunicação full-duplex.

 

Para os bits serem transmitidos e recebidos, transmissor e receptor devem estar configurados com o mesmo valor de baudrate, dado em bits por segundo, que é a taxa de transmissão de dados entre um dispositivo a outro.

 

De acordo com o protocolo UART, quando não há dados no barramento ele é colocado em estado Bus Idle, mantido em lógico alto. Quando um dispositivo possui dados para serem transmitidos, primeiro ele envia um bit de inicialização chamado Start Bit, esse bit está em nível lógico baixo. Logo em seguida envia um byte, ou seja, 8 bits de informação. Para finalizar o envio dos dados, envia um bit chamado de Stop Bit que possui nível lógico alto. Esta descrição do protocolo UART pode ser visto na Figura 2.

 

Figura 2 - Protocolo UART.

 

O Projeto

 

Como já mencionado este projeto de comunicação serial via porta USB é dividido em duas partes, a principal e tema deste artigo voltada ao desenvolvimento da interface gráfica no Visual Studio utilizando a linguagem de programação C# e uma secundária voltada ao desenvolvimento do projeto no Arduino utilizando a linguagem de programação nativa.

 

Parte 1 - Interface Gráfica

 

A interface gráfica é desenvolvida na IDE Visual Studio 2017. Para se iniciar, cria-se um novo projeto clicando-se no menu FILE > New Project, seleciona-se a opção Visual C# > Windows Forms App, define-se um nome para o projeto e o diretório em que é salvo e clica-se em OK. Abre os arquivos para o desenvolvimento do código em C# e da Form para se criar a interface gráfica.

 

Figura 3 - Projeto da Interface Gráfica.
Figura 4 - Projeto do Código Fonte.

 

Pode-se observar que na interface gráfica são utilizados controles como botões, textBox, comboBox, labels, serialPort e Timer. Estes controles podem ser acessados via menu VIEW > ToolBox os arrastando-os para a tela do Form.

 

Com este projeto de interface gráfica as seguintes funções:

 

  • Configurar propriedades da comunicação serial:

 

Figura 5 - Configuração da Porta Serial.

 

  • Botão para conecta e desconecta a porta serial definida pelo usuário:

 

Figura 6 - Botão para desconectar a porta serial.

 

  • Transmissão e escrever no display de LCD:

 

Figura 7 - Dados a serem enviados ao display de LCD.

 

  • Transmissão e escrever na Porta Serial:
Figura 8 - Dados a serem enviados pela porta serial.

 

  • Habilitar e desabilitar as portas digitais de saída:

 

Figura 9 - Manipula as saídas digitais.

 

  • Ler e analisar estado da porta digital de entrada:

 

Figura 10 - Exibe o estado da entrada digital.

 

  • Receber o log via seria do estado das portas digitais:

 

Figura 11 - Exibe os dados recebidos pela porta serial.

 

A seguir é apresentado o código em C# comentado desta parte do projeto.

 

O Código

 

No link é possível baixar o projeto completo da Interface Serial desenvolvida em linguagem de programação C# publicado no Github.

 

Parte 2 - Receptor e Transmissor Serial

 

Foi escolhido o Arduino por ser mais prático a sua prototipação, mas poderia ter sido utilizado qualquer kit de desenvolvimento ou microcontrolador que possui o periférico de comunicação serial.

 

Nas próximas figuras são apresentadas como foi realizada da montagem para a realização dos testes e o esquema elétrico do circuito montado.

 

Figura 12 - Montagem prática do dispositivo receptor.
Figura 13 - Diagrama de Montagem.
Figura 14 - Esquema Elétrico.

 

 

Protocolo

 

O protocolo da comunicação serial desenvolvida neste projeto é dividido em duas partes, o cabeçalho e dados úteis.

 

Cabeçalho

Dados Úteis

 

O cabeçalho informa quais tipos de dados se pretende manipular, entre eles estão a entrada digital, saídas digitais, o LCD e os próprios dados seriais.

 

Segue abaixo como é formado os cabeçalho e os dados úteis de cada forma de manipular os periféricos.

 

  • Entrada Digital:

 

Transmissão

INP

 

Na transmissão, a interface gráfica requisita a cada 100 ms o status da entrada digital enviando ao dispositivo controlador o cabeçalho “INP” não havendo dados úteis a serem transmitidos.

 

Recepção

INPUT HIGH

INPUT LOW

 

Na recepção quando o dispositivo controlador recebe o cabeçalho “INP”, este retorna enviando à interface o dado útil “INPUT HIGH” se entrada digital estiver em nível lógico alto ou “INPUT LOW” se entrada digital estiver em nível lógico baixo.

 

  • Saída Digital:

 

Transmissão

OUT

00

OUT

01

OUT

10

OUT

11

OUT

20

OUT

21

 

Quando se deseja manipular as saídas digitais, transmiti-se o cabeçalho “OUT” e dois caracteres numéricos, sendo o primeiro indicando qual das saídas digitais se deseja manipular variando entre 0 a 2. O segundo indicando qual o estado lógico da saída, sendo “0” estado lógico baixo e “1” estado lógico alto.

 

  • LCD Display:

 

Transmissão

LCD

Comprimento da String

Dados Úteis LCD

 

Quando se deseja manipular o display de LCD é transmitido o cabeçalho formado pelo string “LCD” e pelo campo “Comprimento da String” que indica a quantidade de caracteres existentes na string contida dentro de “Dados Úteis LCD” que ajuda na exibição todas desta string. E como já mencionado, dentro de “Dados Úteis LCD” está a string que será exibida na tela do LCD.

 

  • Transmissão Serial:

 

Transmissão

SER

Dados Úteis Serial

 

Quando se deseja realizar uma transmissão um string para o dispositivo receptor, utiliza-se o cabeçalho “SER” para indicar que se seja manipular a porta serial e em “Dados Úteis Serial” é salvo a string que a serial transmitida para o dispositivo de recepção. Este dispositivo pode retornar estes dados para a Interface Serial, o que é chamado de Look Back e são exibidos do quadro “SERIAL DATA RECEIVER”.

 

O quadro abaixo apresenta como é codificado o cabeçalho do protocolo acima apresentado em codificação Arduino.

 

Figura 15 - Cabeçalho do protocolo em codificação Arduino.

 

Código

 

Neste link é possível baixar o projeto desenvolvido para o receptor serial desenvolvido no Sketch do Arduino.

 

 

Conclusão

 

Com este artigo pode-se observar que o desenvolvimento de interfaces gráficas através da IDE Visual Studio juntamente com a linguagem de programação C# facilita muito o seu projeto e manipulação.

 

Outra observação a ser feita, é que se utilizando a ToolBox para desenvolver a interface gráfica arrastando os seus controles para inserir objetos na tela e também para configurar a porta serial e temporizador, facilita muito o seu desenvolvimento.

 

A escolha do Arduino Uno para o desenvolvimento de um receptor serial se deve ao fato da sua fácil prototipagem, facilidade de manipulação das bibliotecas dos seus periféricos.

 

E por último, da forma que foi desenvolvida a Interface Serial pode ser utilizada também para manipular qualquer microcontrolador que possua o periférico de comunicação serial. O que se deve fazer é apenas manter o protocolo de comunicação serial apresentado nesse artigo.

 

Qualquer dúvida ou sugestão sobre este projeto de interface para comunicação serial, realize nos comentários abaixo.

 

Referências

 

How can a thread update a textbox in the windows form that is part of the main thread

Lendo uma String com Arduino via Serial

Mudar BackColor do Formulário?

String to Int Function

String.Substring Method

C# Message Box

Message box show

MessageBox.Show Method

Raspberry Pi - Comunicação Serial (UART) entre a Raspberry Pi e Arduino em Python e Wiring

Comunicação Serial com C# e Arduino - Parte 1

Comunicação Serial com C# e Arduino - Parte 2

NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Roniere Rezende
Natural de Cachoeira de Minas, cidade localizada no extremo sul de Minas Gerais. Graduado em engenharia elétrica pela PUC MINAS campus Poços de Caldas e técnico de telecomunicações pela Escola Técnica de Eletrônica "Francisco Moreira da Costa" - ETE "FMC" em Santa Rita do Sapucaí-MG. Atualmente atua como Analista Programador na Nexcode System na cidade de São Caetano do Sul-SP. Possui conhecimentos em eletrônica analógica, digitais, e de potência, em sistemas de telecomunicações e radiofrequência, em sistemas embarcados e linguagem de programação como C / C ++, Python e Matlab. Pesquisa e estuda sobre microcontroladores 8 e 32 bits, Arduino, Raspberry, STM32 Nucleo, desenvolvimento de dispositivos eletrônicos, sistemas embarcados, software e hardware.

3
Deixe um comentário

avatar
 
3 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
3 Comment authors
ManoellaAlisson CostaVinícius Pedro Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Manoella
Visitante
Manoella

Meus parabéns pelo artigo!
Agora posso falar que li e novas oportunidades surgiram

Alisson Costa
Visitante
Alisson Costa

Parabéns!!

Vinícius Pedro
Visitante
Vinicius

Excelente post! Muito obrigado por compartilhar.