9 Comentários

Comunicação serial com Arduino e Qt5 Widgets Application - Parte 2

Qt5 Widgets Application
Este post faz parte da série Comunicação serial com Arduino utilizando Qt5. Leia também os outros posts da série:

No post anterior vimos como criar um projeto no Qt Creator para interface gráfica. Que será nossa base para finalizar a aplicação de comunicação serial com uma GUI (Graphical User Interface).

Nesta segunda parte vamos ver como criar toda estrutura básica necessária para realizar comunicação serial e realizar interação com nos Widgets.

Para compreender este post é interessante ter lido o post anterior, e também o primeiro post dessa série, que mostro como preparar o ambiente para comunicação serial e um exemplo básico usando QSerialPort.

Configuração do ambiente host

Estou utilizando a distribuição Linux Mint 17 Qiana 64 bits, mas sem problemas em utilizar um Ubuntu ou Debian. A seguir são listados os seus pré-requisitos: 

  • Qt5 Instalado com o Qt Creator;
  • IDE Arduino >=1.6.2;
  • Arduino UNO;
  • Plugin Qt Serial.

Estruturando o código e criando classes

Baseado no projeto da primeira parte, com ele aberto, clique com o botão direito do mouse no nome do Projeto e vá em Add New...

Uma janela como da Figura 1 irá surgir, selecione C++ > C++ Class e clique em Choose.

Qt5 Widgets NewClass
Figura 1 - Criando classe C++ no Qt5

Na janela a seguir, como da Figura 2, devemos passar o nome da classe a ser criada, no caso, sera comserial, as demais opções são preenchidas e Base class não é importante agora, clique em Next.

Qt5 Widgets - Criando a classe
Figura 2 - Criando a classe comserial no Qt5

Na última janela como da Figura 3, clique em Finish.

Qt5 Widgets - Concluindo a criação da classe
Figura 3 - Concluindo a criação da classe

Como pode ser visto na Figura 4, foi criada a estrutura para nossa classe comserial (.cpp e .h).

Qt5 Widgets - Estrutura da classe criada
Figura 4 - Estrutura da classe criada

Para criar a estrutura de código vamos alterar o comunicacao_serial_qt_gui.pro como visto no primeiro post dessa série. 

Qt5

Qt4

Qt5 Widgets - Editando o arquivo .pro para serialport
Figura 5 - Editando o arquivo .pro para serialport

Todo o processo para abrir o dispositivo serial (/dev/ttyXXXX) e realizar leitura/escrita sobre o dispositivo será o mesmo que vimos no post anterior com Qt Console. Para facilitar eu criei algumas funções que ficaram dentro da classe comserial que criamos, então agora copie o código abaixo referente ao comserial.h.

E agora o comserial.cpp, você pode copiar o código abaixo, ou clicar com o botão direito do mouse no protótipo da função em comserial.h e ir em Refactor > Add Definition in comserial.cpp e a estrutura da função é criada automaticamente no .cpp. Inseri o código referente à cada função abaixo.

Agora vamos criar algumas conexões entre sinais e slots, ou seja, quando clicar em um botão quem irá atender ou o que será feito com esta ação, através de sinais.

Então na guia Design, clique com o botão direito do mouse no botão Conectar, vá até Go to Slot... e na janela que surgir selecione clicked() e clique em OK, como na Figura 6.

Qt5 Widgets - Adicionando ação nos botões do Qt5
Figura 6 - Adicionando sinais nos botões do Qt5

Repita o processo para os botões Desconectar e Enviar, e já vamos dar ações logo mais.

Agora o mesmo vamos fazer com widget.h, os slots que criamos acima já estarão no widget.h.

E no widget.cpp, já haverá as funções dos sinais/slots que criamos, apenas adicione o código nas funções:

Chegando aqui, sua aplicação já está apta a ser construída e executada. Eu comentei cada função e etapa que achei importante. Se tiver qualquer problema, ao construir, não se preocupe, também estou disponibilizando o projeto inteiro, que pode ser baixado, descompactado e aberto no Qt5 e irá compilar. Segue o link abaixo.

[wpfilebase tag=fileurl path='posts/comunicacao_serial_qt_gui.tar.gz' linktext='Download do Projeto' /]

Código do Arduino

O código que iremos usar no Arduino é o mesmo do post anterior.

Executando a aplicação Qt5 Widgets

Vamos construir nossa aplicação (Build Project Ctrl + B) e Executá-la (Run Ctrl + R). Na Figura 7 vamos executar nossa aplicação sem conectar o Arduino.

Qt5 Widgets - Aplicação Qt5 executando sem porta serial detectada
Figura 7 - Aplicação Qt5 executando sem porta serial detectada

Conectando o Arduino na porta USB e executando a aplicação novamente, vamos ver algo como da Figura 8.

Qt5 Widgets - Executando Aplicação Qt5 com porta serial detectada
Figura 8 - Aplicação Qt5 com porta serial detectada

Caso ao conectar o Arduino não apareça a porta ttyXXXX, existe uma grande chance de você não estar no grupo dialout ou não possuir uma regra no udev para enquadrar a criação deste dispositivo na permissão para usuário comum, o seu no caso.

Vamos resolver da maneira mais simples, adicionar o usuário ao grupo dialout. No meu caso o usuário é cleiton.

Com isso, não só com o Arduino mas qualquer placa que conecta via serial no Linux, você não terá mais problemas para ler/escrever no dispositivo com seu usuário. No meu caso não foi necessário, mas se tiver em dúvida reinicie o computador.

Feche a aplicação e abra novamente pra ver se lista o dispositivo serial como na Figura 8.

Na Figura 9, veja a seleção do BaudRate, conexão, envio dos comandos, verificação do Log e desconexão da porta serial do Arduino.

Qt5 Widgets - Comunicação Aplicação Qt5 e Arduino
Figura 9 - Comunicação Aplicação Qt5 e Arduino

E no Application Output da IDE do Qt5 podemos ver as saídas do uso do qDebug(), como na Figura 10.

Qt5 Widgets Application
Figura 10 - Qt5 Application Output saida do qDebug()

Se você acessar o diretório /tmp/build-comunicao_serial_qt_gui-... irá ter, além dos objetos gerados, o binário final, que se executar no terminal irá abrir a aplicação e no seu stdout as mensagens em vermelho da Figura 10.

O que vem por aí...

Na continuação deste post, desenvolveremos a aplicação da Figura 11.

Qt5 Widgets Application
Figura 11 - Qt5 Aplicação Completa

Referências

http://doc.qt.io/qt-5/gettingstartedqt.html
http://doc.qt.io/qt-5/qtserialport-terminal-example.html

Outros artigos da série

<< Comunicação serial com Arduino e Qt5 Widgets Application - Parte 1
Este post faz da série Comunicação serial com Arduino utilizando Qt5. Leia também os outros posts da série:
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

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

Arduino » Comunicação serial com Arduino e Qt5 Widgets Application - Parte 2
Talvez você goste:
Comentários:

9
Deixe um comentário

avatar
4 Comentários
5 Respostas
0 Seguidores
 
Discussão de maior alcance
Discussão mais quente
4 Autores de comentários
Cleiton BuenoManuel JuniorCleiton BuenoManuel JuniorAndré Curvello Comentários recentes
  Notificações  
recentes antigos mais votados
Notificar
Manuel Junior
Visitante
Manuel Junior

Boa tarde, consegue habilitar o link? [wpfilebase tag=fileurl path='posts/comunicacao_serial_qt_gui.tar.gz' linktext='Download do Projeto' /] acho que houve um erro

Manuel Junior
Membro
Manuel Junior

Olá caro, fiz em windows, existe um erro na programação, no comserial.h deve ser uint32_t. Compilei e apenas está mostrando 4 dígitos no Qtextedit e no console, poderia me dizer onde está o erro? o link para ver o projeto está deshabilitado. desde já obrigado

Cleiton Bueno
Visitante
Cleiton Bueno

Olá Manual, você tem razão no metodo da função Conectar esta como u_int32_t e o correto é uint32_t, eu acredito que algo na formação do site alterou isso, pois o Doxygen gerado no comentário acima da funcao esta certo uint32_t, alterando para isso deva resolver.

Irei encaminhar a alteração para o pessoal do editorial.

Obrigado pelo comentario.

Manuel Junior
Visitante
Manuel Junior

boa tarde, mesmo alterando o uint32 apenas plota 4 valores na serial, algo está faltando no código, você teria o link do projeto completo?

Francesco Sacco
Visitante

Cleiton, parabéns!
Utilizei seu artigo. Ele me ajudou muito!
Excelente!

Cleiton Bueno
Visitante
Cleiton Bueno

Olá Francesco. Fico feliz que tenha aplicado o artigo e dado certo.

Obrigado pelo feedback.

André Curvello
Visitante

Muito top, muito dez!!! Tá de parabéns, Cleiton!

Cleiton Bueno
Visitante
Cleiton Bueno

Obrigado André. Que bom que gostou!

Abraço.

Séries



Outros da Série

Menu