Nextion

Использование дисплеев Nextion с IoTmanager.

08.12.2022 

Использование дисплеев Nextion с IoTmanager.

 

1.     Дисплеи Nextion.

В отличие от традиционных, графические дисплеи Nextion HMI (Human Machine Interface) обладают собственным микроконтроллером, который используется для обработки графики, команд от сенсорного экрана, работы с памятью, SD-картой, UART. Дисплеи улучшенной версии оснащены также часами реального времени и контактами GPIO.

Подключение к MCU производится по последовательному порту. Двусторонний обмен происходит с помощью унифицированных инструкций, позволяющих определять события прикосновения к элементам экрана и устанавливать атрибуты созданных компонентов GUI. Это позволяет создать функциональный и эргономичный HMI работающий без увеличения нагрузки на основной MCU.

Модельный ряд представлен дисплеями с диагональю 2.4" - 7.0" с разрешением экрана от 320x240 до 800x480.

 

2.     Концепция создания HMI Nextion.

Для создания HMI используется программа Nextion Editor, которая позволяет создавать интерфейс пользователя и прописать обработку событий Press/Release для элементов экрана. Вид  интерфейса Nextion Editor представлен ниже:

 

 

Для создания HMI на странице (4) располагают компоненты GUI, которые доступны на панели компонентов (2). Страниц можно создать несколько, и реализовать навигацию по кнопкам или в виде меню.

Базовых компонентов 18 шт. (кнопки, слайдеры, окна ввода и т.д.). Каждый компонент имеет имя (objname) и список атрибутов (3). Часть атрибутов, выделенных зелёным цветом, можно изменять динамически. Кроме этого, есть доступ к системным параметрам дисплея. Например, яркость подсветки, параметры UART, и т.д.

Подавляющее большинство компонентов в редакторе Nextion Editor оснащены функциями обработки для нескольких возможных событий, таких как: момент касания экрана (Touch Press Event), момент отпускания экрана (Touch Release Event). Некоторые компоненты наделены событием перемещения - движением пальца без отрыва от экрана (Touch Move). Обработчик событий может быть описан в окне (6) с помощью скрипта. Результат выполнения скрипта может распространяться на любой компонент в пределах текущей страницы.

Доступ к атрибутам возможен как внутри Nextion с помощью скрипта так извне, по UART от MCU.

 

Доступ к атрибутам компонентов внутри Nextion :

·        Компонент.атрибут=значение

·        Компонент1.атрибут=Компонент2.атрибут

 

Доступ к атрибутам компонентов извне по UART:

·        Компонент.атрибут=значение0xFF0xFF0xFF

·        Системный параметр=значение0xFF0xFF0xFF

Для атрибута .txt значение берётся в кавычки.

Все инструкции от MCU в Nextion завершаются тремя байтами 0xFF0xFF0xFF.

 

Отправка инструкций от Nextion в MCU по UART формируется с помощью скрипта в обработчике событий (6) с использованием операторов print.

·        Компонент.атрибут=значение\x0D\x0A

·        “Текстовая команда” \x0D\x0A

Все инструкции от Nextion в MCU завершаются \x0D\x0A (Line Feed, Return)

 

На панели ресурсов HMI проекта (5) располагаются дизайнерские элементы: картинки, шрифты, медиа, которые используются для оформления страницы, кнопок, и т.д..

Концепция Nextion позволяет организовать HMI в стиле IoTmanager, где каждая страница будет эквивалентом вкладки, а дизайн виджетов оформлен с помощью скопированных дизайнерских элементов (5).

Более подробно по ссылке:  интерфейс Nextion Editor

 

После создания HMI, есть возможность отладить его с помощью встроенного отладчика (1):

 

 

Можно не только эмулировать обмен инструкциями по UART(2)(3), но и подключиться к реальному MCU (4) и использовать отладчик в качестве дисплея Nextion.

 

Готовый проект HMI нужно скомпилировать и загрузить в дисплей Nextion с помощью microSD карты или переходника USB.

 

Более подробно по ссылкам:

·        Подключение дисплеев Nextion, установка ПО, загрузка HMI в Nextion

·        Руководство по дисплейным модулям Nextion (рус.)

·        Среда разработки Nextion Editor

·        Список операторов и инструкций по Nextion Editor (англ.)

·        Видео инструкции

 

 

3.     Подключение дисплея Nextion к IoTmanager.

 

1)     Подключите Nextion к UART порту ESP8266 или ESP32 по перекрёстной схеме: rxàtx, txàrx. Для ESP32 предпочтительнее использовать аппаратный UART2 (GPIO16, GPIO17)

 

2)     В конфигураторе IoTmanager первым добавьте элемент UART.

 

3)     Задайте номера GPIO (1) и id (4). Для ESP32 желательно использовать GPIO16, GPIO17.

4)     Параметр line (2) назначьте по номеру выбранного UART. Для ESP32 UART2 line=2.

5)     Задайте режим работы UART с помощью параметра eventFormat:

·        eventFormat=0: можно отправлять/принимать текст через UART только из сценария.

·        eventFormat=1: обмен событиями происходит автоматически, как при сетевом взаимодействии, т.е. можно связать проводом два MCU и они будет работать как через MQTT, т.е. видеть события друг друга.

·        eventFormat=2: обмен так же автоматический, но в формате работы с Nextion. Сообщения от Nextion воспринимаются как ордеры в формате ID=Value.

В этом режиме так же можно отправлять/принимать текст через UART из сценария.

 

Если предполагается совместно с дисплеем Nextion использовать монитор электросети PZEM, то его следует подключить на другой UART: к GPIO1, GPIO3.

Элемент UART добавьте в конце списка конфигуратора, но перед элементами PZEM, line=1.

 

 

 

 

4.     Обмен данными MCU c дисплеем Nextion.

 

Тестовый пример HMI: (здесь будет ссылка на исходники)

 

 

4.1. Обмен данными MCU c дисплеем Nextion из сценария.

 

1)     Для передачи инструкций от MCU к дисплею Nextion из сценария используется функция: printFFF("строка", param);

где: "строка" – текст с инструкцией или значением атрибута; param – 0=исключить кавычки, 1=в кавычках.

Допустима составная конструкция: id.print("t5.txt="); id.printFFF(“C”,1);

Работает при eventFormat=0,1,2

 

Примеры:

# Отправка команды на кнопку bt1 Nextion

 

if bt1==1 then u2.printFFF("bt1.val=1",0);

if bt1==0 then u2.printFFF("bt1.val=0",0);

 

#Изменение цвета бара в зависимости от температуры

if tmp2_txt>27 then u2.printFFF("j0.pco=63488",0)

else u2.printFFF("j0.pco=2024",0);

 

#Изменение фона страницы

if page0==1 then u2.printFFF("page0.bco=0",0);

if page0==0 then u2.printFFF("page0.bco=33808",0);

 

2)     Для получения инструкций от Nextion используется прием строки в значение элемента UART и реакция на событие: if id == "сообщение" then {};

Работает при eventFormat=0,1,2

Само сообщение формируется в дисплее Nextion по событию с помощью скрипта и отсылается в MCU оператором print.

 

Примеры:

 

# Проверка состояние кнопки bt1 на дисплее Nextion

if u2=="bt1-on" then bt1=1;

if u2=="bt1-off" then bt1=0;

 

Для формирования текстовой инструкции от Nextion для кнопки с двумя состояниями делаем в редакторе следующие:

 

 

1)     Перетащите компонент кнопки с двумя состояниями (1) на страницу.

2)     В атрибутах задайте выделенные параметры.

3)     ID картинок для двух состояний кнопки возьмите из панели ресурсов HMI проекта (3). Запишите их в атрибуты pic, pic2 (выкл/вкл).

4)     Создайте скрипт по событию «Нажатие кнопки» (Touch Press Event):

if(bt1.val==1)

{

print "bt1-on"

printh 0d 0a

}else

{

print "bt1-off"

printh 0d 0a

}

Теперь, при первом нажатии кнопки bt1 в UART будет отправлена текстовая инструкция “bt1-on\x0D\x0A; при втором нажатии “bt1-on\x0D\x0A

 

Для синхронизации HMI Nextion и IoTmanager необходимо организовать двухстороннюю обратную связь для управляющих элементов:

 

# Синхронизированное управление кнопкой bt1

if u2=="bt1-on" then bt1=1;

if u2=="bt1-off" then bt1=0;

if bt1==1 then u2.printFFF("bt1.val=1",0);

if bt1==0 then u2.printFFF("bt1.val=0",0);

 

Нажатие кнопки на дисплее Nextion приведёт к изменению положения переключателя в IoTmanager. И наоборот.

 

4.2. Автоматический обмен событиями MCU c дисплеем Nextion.

 

Данный режим не требует использования сценариев.

Для организации автоматического обмена событиями необходимо:

 

1)     Задайте для UART: eventFormat=2.

2)     При конфигурировании элемента в IoTmanager в качестве id укажите имя (objname) и атрибут разделяя их «_» (не точкой). Например: bt0_val (состояние кнопки bt0), tmp2_txt (сообщение в текстовое окно tmp2). Для системных параметров необходимо в конце добавить «_». Например: dim_ (яркость подсветки).

 

Примеры:

 

# Вывод показаний датчика температуры в текстовое окно:

 

# Вывод показаний датчика температуры в цифровое окно Xfloat.

Атрибут ws1 должен быть равен параметру элемента round:

 

# Задание яркости подсветки Nextion:

 

Для синхронизации HMI Nextion и IoTmanager необходимо организовать двухстороннюю обратную связь для управляющих элементов.

 

# Синхронизированное управление кнопкой bt0

 

Скрипт по событию «Нажатие кнопки» (Touch Press Event):

 

if(bt0.val==1)

{

print "bt0.val=1"

printh 0d 0a

}else

{

print "bt0.val=0"

printh 0d 0a

}

 

# Синхронизированное окно ввода text1 с кнопкой b2

 

 

В атрибуте key задаём тип клавиатуры для ввода:

 

Скрипт по событию «Нажатие кнопки» b2 (Touch Press Event) для:

print "text1.txt="

print text1.txt

printh 0d 0a