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.

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
Sem licença Creative Commons

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

[wpseo_breadcrumb]
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
Privacy Settings saved!
Configurações de Privacidade

Entenda quais dados e informações usamos para ter melhor entrega de conteúdo personalizado para você.

These cookies are necessary for the website to function and cannot be switched off in our systems.

Para usar este site, usamos os seguintes cookies tecnicamente exigidos

  • wordpress_test_cookie
  • wordpress_logged_in_
  • wordpress_sec

Decline all Services
Accept all Services