RSS блога
Подписка
Nextion + Arduino. Мысли, идеи. Часть 1
- Цена: 25$ + доставка
- Перейти в магазин
Более месяца назад доехали до меня экраны и только на выходных дошли до них руки. Хотел ознакомиться с чужим творчеством, но… Одним словом мне нужно, чтобы все было расписано досконально, для полных чайников и я решил сделать нечто подобное. Попробовал несколько библиотек, пробежался по мануалу с набором инструкций, подцепил ардуину и сделал пару простейших действий. Сделал не все, что хотел, поэтому это будет часть 1, однако своими идеями и примерами могу поделиться уже сейчас.
По традиции немного общей информации, с которой многие не равнодушные давно знакомы, поэтому она под спойлером.
Теперь практическая сторона вопроса. У дисплея есть своя среда разработки Nextion Editor и несколько библиотек для подключения к ардуино, включая официальную от производителя. Мне наиболее понравилась nextion-master, она наиболее простая, по крайней мере начинать я решил именно с нее.
Немного информации для тех, кто еще не устанавливал Nextion Editor и не пользовался эмулятором дисплэя, а такой присутствует, причем его достаточно, чтобы понять функционал экрана и его возможности:
Дальше обзор будет касаться экрана Nextion Enchanted NX4024K032
Первым делом я сделал анимацию на экран, поскольку делал подобное для старой версии без выводов gpio и RTC на борту.
Далее я подключил экран к ардуине.
Теперь кратко о том, для чего все затевалось. А затевалось это для того, чтобы пробудить интерес к работе с экраном у тех у кого он уже есть, поскольку мне явно может понадобиться помощь в процессе его освоения, вторая причина поделиться тем, что я уже понял и сумел сделать, причем на данном примитиве я останавливаться не хочу, по сути все это я сделал на вечер воскресенья.
Теперь о том с какой целью покупался экран: будет некое устройство, у которого должна быть панель состояния, по обстоятельствам туда же будет выводиться время, дата, температура, влажность, освещенность, а самое главное уровень заряда аккумулятора + будет возможность ввести показатели время запуска, длительность работы до отключения. А я маленький Наполеон =) По сути все можно на 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
По традиции немного общей информации, с которой многие не равнодушные давно знакомы, поэтому она под спойлером.
Внешний вид и цена вопроса
Вот стоимость покупки на официальном сайте за два экрана, покупал не только их, но и еще кучку всего для знакомого, но и себя не обидел, так что посылка была большая.
В итоге здесь 2 или 3 заказа. За упаковку можете не переживать, доставку посылка переживает отлично, а поскольку пришла она уже давно, дополнительные фото сделать нет возможности
Характеристики с официального сайта
Support built-in RTC
Support GPIO
SD Card interface: support max max 32G Micro TF/SD card (FAT32 file format)
Flash data storage space: 16MB
EEPROM: 1024 byte
RAM: 3584 byte
Instruction buffer: 1024 byte
Color:65K (65536) colors
Resolution:400×240 pixel
В итоге здесь 2 или 3 заказа. За упаковку можете не переживать, доставку посылка переживает отлично, а поскольку пришла она уже давно, дополнительные фото сделать нет возможности
Характеристики с официального сайта
Support built-in RTC
Support GPIO
SD Card interface: support max max 32G Micro TF/SD card (FAT32 file format)
Flash data storage space: 16MB
EEPROM: 1024 byte
RAM: 3584 byte
Instruction buffer: 1024 byte
Color:65K (65536) colors
Resolution:400×240 pixel
Теперь практическая сторона вопроса. У дисплея есть своя среда разработки Nextion Editor и несколько библиотек для подключения к ардуино, включая официальную от производителя. Мне наиболее понравилась nextion-master, она наиболее простая, по крайней мере начинать я решил именно с нее.
Немного информации для тех, кто еще не устанавливал Nextion Editor и не пользовался эмулятором дисплэя, а такой присутствует, причем его достаточно, чтобы понять функционал экрана и его возможности:
Nextion Editor, первый запуск, настройка
Внешний вид
Вам нужно создать новый проект, нажав на клавишу New, ввести имя проекта и приступить к выбору и модели дисплея и настроек
После выбора модели (Device) переходим во вкладку Display и выбираем положение экрана, а самое главное кодировку текста iso 5, которая необходима для отображения русских шрифтов.
После подтверждения настроек вы попадете в рабочее поле программы, но поменять настройки вы можете в любой момент нажав Setting ID, сам я об этом достаточно долго не знал, поэтому думаю кому-то точно пригодится.
Далее необходимо создать шрифт, для вывода на экране текстовой информации
Не забудьте задать имя фона, иначе в итоге вы сами запутаетесь в шрифтах и их размерах, поменять, удалить шрифт можно в поле Fonts, и если там не будет ни одного шрифта — выводить текст на экран вы не сможете.
На этом начальная настройка среды разработки закончена и можно начинать работать с экраном
Вам нужно создать новый проект, нажав на клавишу New, ввести имя проекта и приступить к выбору и модели дисплея и настроек
После выбора модели (Device) переходим во вкладку Display и выбираем положение экрана, а самое главное кодировку текста iso 5, которая необходима для отображения русских шрифтов.
После подтверждения настроек вы попадете в рабочее поле программы, но поменять настройки вы можете в любой момент нажав Setting ID, сам я об этом достаточно долго не знал, поэтому думаю кому-то точно пригодится.
Далее необходимо создать шрифт, для вывода на экране текстовой информации
Не забудьте задать имя фона, иначе в итоге вы сами запутаетесь в шрифтах и их размерах, поменять, удалить шрифт можно в поле Fonts, и если там не будет ни одного шрифта — выводить текст на экран вы не сможете.
На этом начальная настройка среды разработки закончена и можно начинать работать с экраном
Дальше обзор будет касаться экрана Nextion Enchanted NX4024K032
Первым делом я сделал анимацию на экран, поскольку делал подобное для старой версии без выводов gpio и RTC на борту.
Прокрутка gif анимации
Для начала анимацию нужно нарисовать или скачать, т.к. рисовать я не обучен, то мне пришлось именно скачать, картинка кликабельна.
Дальше придется анимацию разбивать покадрово, для этого я пользуюсь онлайн сервисом
И после его применения я получил 6 пошаговых изображений, которые мне предстоит прокрутить на экране. Добавляем изображения в среду разработки, нажав на плюс в поле picture
Чтобы добавить анимацию в поле экрана добавляем инструмент Picture, а для прокрутки инструменты Timer и Variable
В свойствах какого-либо инструмента есть черные и зеленые поля, на примере инструмента p0 это поле «pic», его мы можем изменять при помощи внешнего устройства, к примеру ардуино, но это немного позже, в этом примере изображения будут меняться через фиксированный промежуток времени по таймеру. Для этого зададим pic=0, а в таймере напишем следующий код:
После каждого тика таймера переменная va0 увеличивается на единицу и ее значение присваивается полю pic инструмента p0 до тех пор пока не прокрутятся все изображения анимации. Если анимация закончена все начинается по новой с нулевой картинки. Этот кусочек кода крайне капризен в плане лишних пробелов, скобок не на той строке и т.д., так что будьте внимательны, поскольку такова особенность среды разработки.
Обратите внимание, то в свойствах таймера есть два зеленых поля:
tim — время на тик
en — включение-выключение таймера (1/0)
Т.е. вы сможете запускать/останавливать анимацию командой с ардуино и менять ее скорость либо изменять скорость любых событий, завязанных на таймер.
Все, анимация готова, ее можно просмотреть в эмуляторе и поиграть со скоростью прокрутки.
Ссылка на файл проекта с анимацией
Дальше придется анимацию разбивать покадрово, для этого я пользуюсь онлайн сервисом
И после его применения я получил 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 переходник
Занимает в разы меньше времени, чем через 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)
Вы можете посмотреть результат нажатия на терминале запустив соответствующий пример из библиотеки либо в эмуляторе
Собственно вот что получится на выходе, если запустить симулятор
Далее я запустил пример из библиотеки для кнопки
К сожалению описания что он должен делать нет, как всегда, собственно, поэтому приходится разбираться самому
Этот кусочек кода из библиотеки дает понятие какие аргументы принимает функция, с большой вероятностью так придется просматривать все функции библиотеки.
Итак, разбираем кусок if
if (message == «65 0 2 0 ffff ffff ffff») { //если получаем код нажатой кнопки
myNextion.buttonToggle(button2State, «b1», 0, 2);//меняем цвет (фон) кнопки
Предпочел бы прочитать это в комментариях к нему, но не догадываться самому. Как итог пример не заработал )))
Но если заменить buttonToggle на что попроще то получится пример, который обрабатывает нажатие 2х кнопок ON и OFF для светодиода, для полноты ощущений еще и меняет надписи на кнопках со стандартных на нужные:
Результат работы кода: при нажатии на кнопку на ней меняется надпись на «ON» и загорается диод на 13 ноге, вторая кнопка его выключает.
Думаю как поймать момент нажатия понятно, а вот с обработкой события еще нужно будет разбираться, в любом случае библиотека не единственная, но самая простая в обращении и я хочу понять именно ее, помощь приветствуется.
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
Как итог вроде все работает
Пример из библиотеки 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
Самые обсуждаемые обзоры
+79 |
4193
149
|
+60 |
4384
74
|
особенно про сценарии применения и их реализацию.
За обзор плюс.
Но если упс неуправляемый — то смысл? они дольше 20 минут всеравно не держат…
В обслуживании Smart-UPS RT 8000 XL с доп батарейными модулями все с картами AP9618. Условия эксплуатации — не самые лучшие. Сети нет (можно сделать сеть только между локально стоящими ИБП… от 3-х… до 6 штук), но есть круглосуточный обслуживающий персонал. Так вот чтоб он видел «что с ними происходит и решили поставить монитор чтоб можно было отслеживать состояние ИБП, а что там уж будет отображаться родная ВЭБморда или через программу Power Shute — это уже без разницs. Тут поиск самого маленького и дешевого компьютера с выходом VGA с LAN и хотябы одним USB…
Опустим нюансы, скажу лишь про то, что об использовании их родного конвертера СОМ-ЮСБ лучше забыть сразу, у меня их поделка вылетала раз в 4-6 дней, без перезагрузки компа не лечилось.
Подключил напрямую к СОМ, работает больше года непрерывно.
Но как по мне, то если необходимо надежное соединение, то только СОМ.
Бесспорно… вот только он не «дальнобойный»… а так да, лежит пару заказанных и не опробованных конвертеров COM <-> LAN, все никак руки не дойдут…
Тогда RS485, но плата для него денег прилично стоит.
Случайно не MOXA? Имею такие в хозяйстве, 2хRS232-TCP.
Про RS485 уже думал, но провода тянуть… по эстакадам кабельным… жуть, хочу все таки монитор с одноплатником в стойку а дальше попробовать вытянуть по силовым проводам через «PowerLine»… сейчас пытаюсь выбрать чего нить не сильно быстродействующее но дальнобойное и дуракоустойчивое.
А платы нет, не моха (моха есть только преобразователь USB <-> во всё...) такие вот 1 и 2 ждут своей
очередиучасти.(rasbery PI)
Для «сделать индикатор уровня заряда АКБ в качестве разминки» — выше крыши, плюс они — OLED со всеми вытекающими плюшками.
А если уж охота большой экран тач и все такое — то про Arduino лучше забыть и перейти на STM.
Там и память норм и DMA есть — вобщем — взрослое все.
Ибо если этот экран в связке с Arduino юзать это ну примерно как приделать к велосипеду двигатель от болида — да, работать будет и ехать даже, и даже хорошо ехать, но потенциал раскрыт даже на 10% не будет.
Вот что я делал с подобным экраном пол года назад
Но с ардуиной я его тогда не дружил, не было необходимости.
Т.е. — да, просто, но у Вас мозги в экране в десятки раз превосходят мозги управления.
Базовую менюшку сделать — можно заюзать кучу готовых библиотек, а на самом деле и самому написать — 5 минут. 3D графики — да — не будет, а зачем она на 1.3" экране? Ну или для задачи «уровень заряда АКБ»?
Пример:
Или:
Этого более чем достаточно.
для людей, которым необходимо просто сделать разовое устройство для своих нужд и нет желания учить лишние языки программирования, абсолютно без разницы чьи там в платах мозги круче — главное, чтобы всё работало, как планировалось =)
я как-то тоже делал небольшое видео, связав с гироскопом
Тогда и экрана вообще не надо, а если надо — смарт дешевый подключил и все — управляй с него всегда — еще и дешевле выйдет чем данный экран.
По сути — это не экран, а полноценный комп, мощнее в десятки раз того, что им пытается управлять :D
А что касается отладки — полно библиотек, которые уже реализуют меню и стандартные конфигурируемые значения там (цифры, логические значения, строки) — все давно уже сделано — бери и пользуйся.
Я все прототипы пишу на JS, сэмулировав там через canvas буфер OLED-а. Почему на JS — очень быстро ваять прототипы + только один поток (если воркеры не юзать) — почти также как в однокристаллке.
Написать, подправить и отладить, а затем просто перекодить на Си. JS — Си-подобный язык — достаточно быстро переносится.
Ну и пять минут — утрированно естественно. Пару часов примерно. Не нагнетайте.
Там вроде бы какой-то СТМ стоит, так что больше. А уж памяти…
Кстати, если очень хочется, то можно, управление и на экран перенести. Только это не экран. Это можно считать компьютером с вводом выводом через UART и сенсорный экран.
А к чему Вы это?
Про что я и говорил.
Будем считать, я неудачно пошутил, а у вас всё очень выверено и точно.
А к чему вы это говорили? Ситуации, когда система отображения данных
мощнее системы сбора данных встречается.
Во первых — мне (надеюсь как и многим другим) было интересно.
Во вторых — ваши труды, как мне кажется, выводят данный ресурс на более достойный уровень.
P.S. уж больно надоели эти рейтузы, тем более на одном и том же. )
Да и вообще в ФЛПроге можно собирать прошивки для ардуины без необходимости писать код.
Не рыба, не мясо — ИМХО. ©
А тут Учебный курс по AVR