Pantalla Touch NEXTION HMI «gráfica», Pic C Compiler

Programar una interfaz gráfica en una pantalla touch HMI NEXTION, para enviar datos del microcontrolador PIC por una comunicación UART. El objetivo graficar señales analógicas en la pantalla Nextión y modificar la amplitud de las señales en la gráfica.

¿Qué es Nextion?


Nextion es una solución de interfaz hombre-máquina (HMI) que combina un procesador integrado y una pantalla táctil con memoria con el software Nextion Editor para el desarrollo de proyectos de GUI HMI.

Con el software Nextion Editor, puede desarrollar rápidamente la GUI de HMI arrastrando y soltando componentes (gráficos, texto, botón, control deslizante, etc.) e instrucciones basadas en texto ASCII para codificar cómo interactúan los componentes en el lado de la pantalla.

La pantalla HMI de Nextion se conecta a la MCU periférica a través de TTL Serial (5V, TX, RX, GND) para proporcionar notificaciones de eventos en las que la MCU periférica puede actuar, la MCU periférica puede actualizar fácilmente el progreso y el estado de regreso a la pantalla Nextion utilizando un simple ASCII basado en texto. instrucciones.

Circuito completo

Procedimiento

Inicialmente se establecen los parámetros de la comunicación RS232.

  • baud = Velocidad de transmisión.
  • stop = Bit de paro.
  • parity = Bit de paridad. 
  • xmit = Pin de transmisión.
  • rcv = Pin de recepción. 
  • bits = Datos de transmisión.
  • stream = identificación de transmisión.

#use rs232(baud=9600, stop=1, parity=N, xmit=PIN_C6, rcv=PIN_C7, bits=8)

Para enviar datos a la pantalla Nextion, en este caso se envía el valor del ADC del pin «AN0» y del PIN «AN1» conectados a los sensores.

Para enviar un dato a la gráfica se utiliza la función «printf», donde se debe colocar:


printf("add idwaveform,canal,%u",variable);

Después de enviar el comando y el valor, se deben de enviar 3 números (0xFF) para que la pantalla Nextion identifique el fin del envió de datos.


   putc(0xFF); //fin de recepcion de datos en pantalla nextion
   putc(0xFF); //
   putc(0xFF); //

Para la grafica se envía el valor int8 del pin «AN0» y el pin «AN1», el valor máximo que se puede enviar es de 255, por lo que en le archivo.h del proyecto se debe definir un ADC de 8 bits.


#device ADC=8

Para visualizar la señal del canal 0 en la gráfica se envía el comando correspondiente y el valor del pin AN0


   printf("add 1,0,%u",pot1); //add idwaveform,canal,valor
   putc(0xFF); //datos para recepcion en pantalla nextion
   putc(0xFF); //
   putc(0xFF); //

Para visualizar la señal del canal 1 en la gráfica se envía el comando correspondiente y el valor del pin AN1


   printf("add 1,1,%u",pot2); //add idwaveform,canal,valor
   putc(0xFF); //datos para recepcion en pantalla nextion
   putc(0xFF); //
   putc(0xFF); //

En la función «main()» se envía el valor de cada señal con un desfase de 10 milisegundos.


      canal_0();
      delay_ms(10);
      canal_1();
      delay_ms(10); 

Código completo


#FUSES NOMCLR

#use rs232(baud=9600, stop=1, parity=N, xmit=PIN_C6, rcv=PIN_C7, bits=8)

void canal_0()
{
   int8  pot1;

   set_adc_channel (0);//Lectura Vout del potenciometro en PIN AN0
   delay_us(10);
   pot1 = read_adc();// lectura del valor

   printf("add 1,0,%u",pot1); //add idwaveform,canal,valor
   putc(0xFF); //datos para recepcion en pantalla nextion
   putc(0xFF); //
   putc(0xFF); //
}

void canal_1()
{
   int8  pot2;

   set_adc_channel (1);//Lectura Vout del potenciometro en PIN AN1
   delay_us(10);
   pot2 = read_adc();// lectura del valor

   printf("add 1,1,%u",pot2); //add idwaveform,canal,valor
   putc(0xFF); //datos para recepcion en pantalla nextion
   putc(0xFF); //
   putc(0xFF); //
}

void main()
{

   setup_adc(ADC_CLOCK_INTERNAL);

   while(TRUE)
   {
      canal_0();
      delay_ms(10);
      canal_1();
      delay_ms(10);  
   }

}

Procedimiento

Attribute:

objname: grafica

dir: right to left 

ch: 2

Attribute:

objname: h0

maxval: 1000

minval: 10

Touch Press Event:

codigo:


grafica.dis=h0.val

Touch Release Event:

codigo:


grafica.dis=h0.val
cle 1,0
cle 1,1

Touch Move:

codigo:


grafica.dis=h0.val

Funciones

La función «cle» limpia la señal de la gráfica.


cle idwaveform,canal
Scroll al inicio