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
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
Comentários:
Notificações
Notificar
guest
9 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Manuel Junior
Manuel Junior
13/05/2020 19:55

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
06/05/2020 02:28

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
Cleiton Bueno
Reply to  Manuel Junior
07/05/2020 11:17

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
Manuel Junior
Reply to  Cleiton Bueno
08/05/2020 12:23

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?

André Curvello
15/06/2015 09:17

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

Cleiton Bueno
Cleiton Bueno
Reply to  André Curvello
18/06/2015 08:51

Obrigado André. Que bom que gostou!

Abraço.

Francesco Sacco
12/05/2016 15:24

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

Cleiton Bueno
Cleiton Bueno
Reply to  Francesco Sacco
15/05/2016 14:20

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

Obrigado pelo feedback.

Talvez você goste:

Séries



Outros da Série

Menu