Arduino e Display Nextion
Tutorial – Arduino e Display Nextion
Autor: Edney Rossi
Introdução:
Este tutorial objetiva acionar uma saída da placa Arduino, como por exemplo o LED onboard localizado no pino 13, ou outra saída a escolha, sendo acionado através de botão touchscreen localizado no display Nextion. O Display Nextion se comunica com o Arduino através da porta serial. Devemos usar uma alimentação exclusiva de 5v e pelo menos 500mA, para alimentar o Display, essa alimentação pode ser provida através de um carregador de smartphone.
Ingredientes:
Nextion Editor baixar em: https://nextion.tech/nextion-editor
Arduino IDE: baixar em https://www.arduino.cc/en/software
Biblioteca Nextion para Arduino : https://github.com/itead/ITEADLIB_Arduino_Nextion/archive/master.zip
Placa Arduino
Display Nextion
Placa FTDI FT232RL Conversor USB Serial
Fonte 5V ou carregar Smartphone
Preparo:
1 - Baixar e instalar os aplicativos para desktop:
Nextion Editor e Arduino IDE.
2 – Instalar a biblioteca Nextion na sua Arduino IDE:
Para isso baixe a biblioteca(arquivo.zip) do repositório GitHub da empresa fabricante do Nextion ITEAD, descompacte o arquivo dentro da pasta Library do Arduino, no Windows 10 geralmente o caminho é:
C:\Users\User\Documents\Arduino\libraries\
3 - Configurar biblioteca para Arduino UNO:
Por padrão a biblioteca do nextion é configurada para trabalhar com Arduino MEGA2560 . Para que funcione no Arduino Uno, é necessário fazer a seguinte configuração:
Abra a pasta \ITEADLIB_Arduino_Nextion\
Deve haver um arquivo NexConfig.h - abra esse arquivo.
Comente a linha 27, usando // de modo que permaneça da seguinte forma:
// # define DEBUG_SERIAL_ENABLE
Comente a linha 32:
// # define dbSerial Serial
Mude a linha 37, para que você tenha o seguinte:
#define nexSerial Serial
Salve o arquivo NexConfig.h .
4 - Criar botão no Nextion Editor:
Agora precisamos criar um botão no Nextion para acionar uma porta do Arduino, então abra o Nextion Editor, crie um novo projeto baseado no modelo de seu Display, no meu caso estou usando o Basic NX4827T043_011, é um display touchscreen resolução 480x270 com tela de 4.3 polegadas, o modelo pode ser facilmente encontrado gravado na placa de circuito impresso do display.
Clique em File > New e de um nome e salve o projeto.hmi, na próxima tela selecione o modelo do display. Selecione a orientação do display, estaremos usando 0° horizontal, clique em ok.
Eu sei, nessa hora bate a ansiedade e fechamos o tutorial e ligamos o modo intuitivo, Epa! “Erro de compilação”. O que acontece é o seguinte: o Nextion precisa gerar pelo menos um arquivo de fonte para funcionar, então é isso que faremos na próxima etapa.
Clique em Tools > Font Generator, na janela que se abre escolha uma uma fonte, determine um tamanho e de um nome para a fonte Nextion que será gerada, escolhi Arial Black tamanho 24, e dei nome de ArialBlack24, clique no botão Generate Font, dei o nome para o arquivo de arialblack24.zi , ao clicar em Salve o Nextion Editor pergunta se queremos adicionar a fonte recém gerada ao projeto apenas respondi Yes, O Nextion Editor volta a tela do Font Creator, para se quisermos gerar outra fonte, por hora vamos apenas fechar a janela no “X”.
Agora sim com a fonte gerada, vamos em Toolbox e clicamos em Button, o Nextion editor coloca para gente um botão na tela com o texto padrão: newtxt .
Em Attibute, rolamos a tela e editamos o atributo txt de newtxt para ligar .
Ainda em Attribute do botão, algumas informações são importantes, vamos anotá-las, pagina em que está o botão: page0, ID do componente(botão):ID=1, e objname=bOn
Veja se o botão está selecionado, se não tiver basta clicar nele, na janela Event, selecione aba Touch Release Event e marque a caixa Send component ID, assim quando clicarmos no botão que acabamos de criar, o Display Nextion envia um sinal via porta serial para o Arduino.
Save no projeto, Compile e clique em Debug para ver se tudo está certo. Ao clicar no botão Ligar que criamos o emulador irá enviar um sinal na janela Simulator Return.
Botão Ligar criado só repetir os passos e criar o botão Desligar, da mesma forma vamos criar um texto que irá indicar o estado do LED.
Agora só fazer Upload, existem dois métodos, um usando um cartão SD ou através de um conversor serial USB, vamos fazer pelo conversor serial USB, estou usando a “Placa FTDI FT232RL Conversor USB Serial”. Importante a Alimentação 5V do Display Nextion deverá vir de uma fonte usb que pode ser um carregador de Smartphone, o Display acompanha um adaptador para isso, o TX do display deverá ser ligado ao RX do FTDI, e o RX do Display no TX do FTDI, como no esquema abaixo:
FTDI USB Display Nextion
TX----------RX
RX----------TX Carregador de Smartphone
GND---------GND-------------GND
+5V-------------+5V
Tudo ligado? Clique em Upload e Go, o Display irá exibir na tela o progresso do upload, e terminado exibirá a tela que criamos.
5 - Criar um sketch para o Arduino
Primeiro Vamos criar um novo arquivo Sketch na IDE do Arduino: Arquivo > Novo.
//incluir a biblioteca do Nextion Display
#include "Nextion.h"
//A seguir definir o pino do led
const int led1 = 13;
// Definir o objeto(botão)do Nextion (page id = 0, component id = 1, component name = "b0")
NexButton bOn = NexButton(0, 1, "bOn");
NexButton bOff = NexButton(0, 2, "bOff");
NexText tState = NexText(0, 3, "tState");
// REgistrar o botão como um evento Touch.
NexTouch *nex_listen_list[] = {
&bOn,
&bOff,
NULL
};
/*
* Botão bOn função component pop callback.
* Quando o botão é solto (release) o Led1 é ligado.
*/
void bOnPopCallback(void *ptr) {
tState.setText("Led: on");
digitalWrite(led1, HIGH);
}
/*
* Button bOff função pop callback.
* Quando o botão é solto (release) o Led1 é Desligado.
*/
void bOffPopCallback(void *ptr) {
tState.setText("Led: off");
digitalWrite(led1, LOW);
}
void setup() {
Serial.begin(9600);
nexInit();
// Register the pop event callback function of the components
bOn.attachPop(bOnPopCallback, &bOn);
bOff.attachPop(bOffPopCallback, &bOff);
//nesta secção definir o pino do led como saída
pinMode(led1, OUTPUT);
}
void loop() {
/*
* Quando um botão for apertado,
* o evento correspondente é disparado.
*/
nexLoop(nex_listen_list);
}
Comentários
Postar um comentário