Nextion + Arduino. Мысли, идеи. Часть 1

3 min read
Комментарии к записи Nextion + Arduino. Мысли, идеи. Часть 1 отключены
0
5,282

Цена: 25$ + доставка Перейти в магазин

Более месяца назад доехали до меня экраны и только на выходных дошли до них руки. Хотел ознакомиться с чужим творчеством, но… Одним словом мне нужно, чтобы все было расписано досконально, для полных чайников и я решил сделать нечто подобное. Попробовал несколько библиотек, пробежался по мануалу с набором инструкций, подцепил ардуину и сделал пару простейших действий. Сделал не все, что хотел, поэтому это будет часть 1, однако своими идеями и примерами могу поделиться уже сейчас. Nextion Editor и несколько библиотек для подключения к ардуино, включая официальную от производителя. Мне наиболее понравилась nextion-master, она наиболее простая, по крайней мере начинать я решил именно с нее.


Немного информации для тех, кто еще не устанавливал Nextion Editor и не пользовался эмулятором дисплэя, а такой присутствует, причем его достаточно, чтобы понять функционал экрана и его возможности:

Nextion Editor, первый запуск, настройка
Внешний вид


Вам нужно создать новый проект, нажав на клавишу New, ввести имя проекта и приступить к выбору и модели дисплея и настроек


После выбора модели (Device) переходим во вкладку Display и выбираем положение экрана, а самое главное кодировку текста iso 5, которая необходима для отображения русских шрифтов.


После подтверждения настроек вы попадете в рабочее поле программы, но поменять настройки вы можете в любой момент нажав Setting ID, сам я об этом достаточно долго не знал, поэтому думаю кому-то точно пригодится.


Далее необходимо создать шрифт, для вывода на экране текстовой информации


Не забудьте задать имя фона, иначе в итоге вы сами запутаетесь в шрифтах и их размерах, поменять, удалить шрифт можно в поле Fonts, и если там не будет ни одного шрифта — выводить текст на экран вы не сможете.


На этом начальная настройка среды разработки закончена и можно начинать работать с экраном


Дальше обзор будет касаться экрана Nextion Enchanted NX4024K032

Первым делом я сделал анимацию на экран, поскольку делал подобное для старой версии без выводов gpio и RTC на борту.

Прокрутка gif анимации
Для начала анимацию нужно нарисовать или скачать, т.к. рисовать я не обучен, то мне пришлось именно скачать, картинка кликабельна.


Дальше придется анимацию разбивать покадрово, для этого я пользуюсь онлайн сервисом

И после его применения я получил 6 пошаговых изображений, которые мне предстоит прокрутить на экране. Добавляем изображения в среду разработки, нажав на плюс в поле picture


Чтобы добавить анимацию в поле экрана добавляем инструмент Picture, а для прокрутки инструменты Timer и Variable


В свойствах какого-либо инструмента есть черные и зеленые поля, на примере инструмента p0 это поле «pic», его мы можем изменять при помощи внешнего устройства, к примеру ардуино, но это немного позже, в этом примере изображения будут меняться через фиксированный промежуток времени по таймеру. Для этого зададим pic=0, а в таймере напишем следующий код:


p0.pic=va0.val
va0.val=va0.val+1
if(va0.val>5)
{
  va0.val=0
}


После каждого тика таймера переменная va0 увеличивается на единицу и ее значение присваивается полю pic инструмента p0 до тех пор пока не прокрутятся все изображения анимации. Если анимация закончена все начинается по новой с нулевой картинки. Этот кусочек кода крайне капризен в плане лишних пробелов, скобок не на той строке и т.д., так что будьте внимательны, поскольку такова особенность среды разработки.

Обратите внимание, то в свойствах таймера есть два зеленых поля:

tim — время на тик

en — включение-выключение таймера (1/0)

Т.е. вы сможете запускать/останавливать анимацию командой с ардуино и менять ее скорость либо изменять скорость любых событий, завязанных на таймер.

Все, анимация готова, ее можно просмотреть в эмуляторе и поиграть со скоростью прокрутки.
Ссылка на файл проекта с анимацией

Прошивка экрана через sd карту
Переносить проект на экран удобнее с помощью sd карты, открываем директорию с проектом, записываем на пустую sd карту (FAT32, в моем случае 8Гб). Отключаем питание, вставляем sd, включаем питание, ждем окончания прошивки, выключаем питание, вынимаем sd.


Занимает в разы меньше времени, чем через USB-UART переходник


Далее я подключил экран к ардуине.

Обработка нажатия на экран
Здесь два варианта развития событий, либо вы пользуетесь двухсторонней связью экран-ардуино либо только передаете данные в ардуино. Во втором случае вы можете вообще обойтись без библиотек и обрабатывать только посылки формата

65 2 2 0 ffff ffff ffff (событие_номер страницы_id элемента_значение_конец посылки)

Вот выдержка из описания дисплэя

65: This message is a touch event

0: The page ID is 0

2: Component ID (the number of the first button in the Editor)

0: Type of event. A «0» means a Release event, A «1» is a Press event

FFFF FFFF FFFF: The end of message pattern


У каждого нажатия они свои, поэтому особых проблем возникнуть не должно и экран станет красивым пультом управления с возможностью анимации иконки при нажатии, но без обратной связи, в противном случае библиотека необходима для удобства работы.

По сути вам достаточно добавить любой кликабельный элемент, например кнопку, и поставить галочку во вкладке Event


Причем код экран может отправлять как при нажатии на кнопку (Press Event), так и при событии, когда вы убираете палец с кнопки (Release Event)

Вы можете посмотреть результат нажатия на терминале запустив соответствующий пример из библиотеки либо в эмуляторе


Собственно вот что получится на выходе, если запустить симулятор


Далее я запустил пример из библиотеки для кнопки

К сожалению описания что он должен делать нет, как всегда, собственно, поэтому приходится разбираться самому

void buttonToggle(boolean &buttonState, String objName, uint8_t picDefualtId, uint8_t picPressedId);


Этот кусочек кода из библиотеки дает понятие какие аргументы принимает функция, с большой вероятностью так придется просматривать все функции библиотеки.

Итак, разбираем кусок if

if (message == «65 0 2 0 ffff ffff ffff») { //если получаем код нажатой кнопки

myNextion.buttonToggle(button2State, «b1», 0, 2);//меняем цвет (фон) кнопки

Предпочел бы прочитать это в комментариях к нему, но не догадываться самому. Как итог пример не заработал )))

Но если заменить buttonToggle на что попроще то получится пример, который обрабатывает нажатие 2х кнопок ON и OFF для светодиода, для полноты ощущений еще и меняет надписи на кнопках со стандартных на нужные:

if (message == "65 0 1 0 ffff ffff ffff") {
   myNextion.setComponentText("b0", "ON");

Дополнительная информация
#include <SoftwareSerial.h>
#include <Nextion.h>

SoftwareSerial nextion(2, 3);// Nextion TX to pin 2 and RX to pin 3 of Arduino

Nextion myNextion(nextion, 9600); //create a Nextion object named myNextion using the nextion serial port @ 9600bps

boolean button1State;
boolean button2State;

void setup() {
  Serial.begin(9600);
  myNextion.init(); // send the initialization commands for Page 0
  pinMode(13, OUTPUT);
}

void loop() {
  String message = myNextion.listen(); //check for message
  if (message == "65 0 1 0 ffff ffff ffff") {
   myNextion.setComponentText("b0", "ON");
    digitalWrite(13, HIGH);
  }
  if (message == "65 0 2 0 ffff ffff ffff") {
   myNextion.setComponentText("b1", "OFF");
    digitalWrite(13, LOW);
  }

}


Результат работы кода: при нажатии на кнопку на ней меняется надпись на «ON» и загорается диод на 13 ноге, вторая кнопка его выключает.

Думаю как поймать момент нажатия понятно, а вот с обработкой события еще нужно будет разбираться, в любом случае библиотека не единственная, но самая простая в обращении и я хочу понять именно ее, помощь приветствуется.

Обновление текстового поля через arduino
Для начала добавим инструмент Text посмотрим в его свойствах значение txt-maxl — это максимальное количество символов в этом поле, если символов будет больше, отображаться они не будут.


Пример из библиотеки UpdateText меняет надписи текстового поля с Hello на 1234 каждую секунду. Я чисто для проформы написал цикл чтобы он считал до 100

#include <SoftwareSerial.h>
#include <Nextion.h>

SoftwareSerial nextion(2, 3);// Nextion TX to pin 2 and RX to pin 3 of Arduino

Nextion myNextion(nextion, 9600); //create a Nextion object named myNextion using the nextion serial port @ 9600bps

void setup() {
  Serial.begin(9600);
  myNextion.init();

}

void loop() {
myNextion.setComponentText("t0", "Hello");
  delay(1000);
  for(int i=0;i<100;i++)
  {int value = i;
  myNextion.setComponentText("t0", String(value));
  delay(1000);
  }
}


Как итог вроде все работает


Теперь кратко о том, для чего все затевалось. А затевалось это для того, чтобы пробудить интерес к работе с экраном у тех у кого он уже есть, поскольку мне явно может понадобиться помощь в процессе его освоения, вторая причина поделиться тем, что я уже понял и сумел сделать, причем на данном примитиве я останавливаться не хочу, по сути все это я сделал на вечер воскресенья.

Теперь о том с какой целью покупался экран: будет некое устройство, у которого должна быть панель состояния, по обстоятельствам туда же будет выводиться время, дата, температура, влажность, освещенность, а самое главное уровень заряда аккумулятора + будет возможность ввести показатели время запуска, длительность работы до отключения. А я маленький Наполеон =) По сути все можно на 2004 экране сделать, но мы не ищем легких путей.

Что будет подключаться к ардуине помимо дисплея в ближайшее время (для начала)

INA219 для измерения напряжения

Аккумулятор 3х18650 + контроллер заряда

Это все буду пробовать на следующих выходных, так что часть вторая будет не последней, так что у кого есть какие-то примеры, мысли и результаты я бы хотел об этом узнать.

Полезные ссылки:
Nextion Instruction Set
openhardware.gridshield.net/home/nextion-example-code-functions
openhardware.gridshield.net/home/nextion-lcd-getting-started-for-arduino

Источник материала.

Цена: 25$ + доставка Перейти в магазин
Load More Related Articles
Load More By admin
Load More In Uncategorized
Comments are closed.

Check Also

Складная мини-стремянка

Всем привет, Представляю обзор простого, но необычного для муськи товара, а именно …