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.

 

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://cleitonbueno.com/qt5-conhecendo-um-verdadeiro-canivete-suico/

http://cleitonbueno.com/qt5-instalacao-em-ambiente-linux/

http://cleitonbueno.com/qt5-qt-console-e-qt-widgets/

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:
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.

Cleiton Bueno
Proprietário da B2Open onde oferecemos consultoria, treinamentos e desenvolvimento em Sistemas Embarcados. Entusiasta a filosofia open-source, mais de 10 anos de experiências em Linux e FOSS. Em sistemas embarcado do firmware baremetal ao Linux Embedded, e há aproximadamente 8 anos desenvolvendo em (C, Python, Qt e muito Shell Script), além de profiling, hardening e tuning para targets com Linux Embarcado. Graduado em Engenharia da Computação pela UNICEP com ênfase em robótica e sistemas embarcados.

4
Deixe um comentário

avatar
 
2 Comment threads
2 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
3 Comment authors
André CurvelloCleiton BuenoFrancesco Sacco Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Francesco Sacco
Visitante

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

Cleiton Bueno
Visitante

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

Obrigado André. Que bom que gostou!

Abraço.