Nextion программирование ардуино

Введение Дисплеи Nextion включают в себя либо резистивную сенсорную панель (RTP). Либо емкостную сенсорную панель (CTP) и обеспечивают простой способ создания интерфейса сенсорного экрана или человеко-машинного интерфейса (HMI) для вашего проекта. Для связи с дисплеями требуется запасной последовательный порт. Чтобы получить от них все самое лучшее, требуется понимание того. Как ими управлять, что работает, а что нет. Совет здесь основан на моей работе с несколькими проектами. Использующими дисплеи Nextion как с хостами PIC. Так и с Arduino. Я не утверждаю. Что идеи здесь являются лучшим или единственным способом управления одним из них с помощью Arduino, просто то. Что я нашел. Хорошо работает в моих проектах. Пример кода был написан мной и протестирован на Elegoo Mega2560, и вы можете использовать его. Изменять или улучшать столько. Сколько захотите. Мои методы и примеры. Показанные здесь. Не используют никаких библиотек. Так как я никогда не считал их необходимыми. Дисплеи достаточно просты в управлении без библиотеки.
Если вы предпочитаете использовать библиотеку. Взгляните на Easy Nextion Library от Seithan. Его методы отличаются от моих, выберите. Что лучше всего работает для вас (я не могу помочь вам с методами Seithan).
Если вы предпочитаете использовать официальные библиотеки Nextion, пожалуйста. Ознакомьтесь с улучшенными библиотеками Nextion Рэя Ливингстона.

Я не представляю Arduino или Nextion.

Все, что следует в этом уроке. Касается моих методов.

Поддержка Nextion

Дисплеи имеют свой собственный набор инструкций. Который можно найти здесь. Инструкции предоставляют средства управления дисплеями либо с помощью сообщений. Отправляемых в последовательный порт. Либо с помощью сенсорного экрана. Этот учебник и пример кода используют некоторые инструкции Nextion и предполагают. Что вы ознакомились с ними с веб-сайта Nextion.

Дисплеи настраиваются с помощью редактора WYSIWYG. Который вы можете скачать здесь.Пример конфигурации. Прилагаемый к этому учебнику. Можно открыть с помощью этого редактора. Который вам нужно будет использовать в приведенном здесь примере. (Последняя версия-V1.61.2 добавлена осенью 2020 года)

Совместимость с Arduino

Я использовал базовую 4,3-дюймовую версию RTP (NX4827T043) и расширенную 7-дюймовую версию CPT (NX8048K070) с WeMos M0, MKR WiFi 1010, Nano Every и Elegoo Mega2560 без проблем. Есть проблемы с использованием одного из них с ESP8266, см. раздел

Если у вас есть Uno. То вы можете попробовать сериал Джона Харрисона, который позволяет совместно использовать один последовательный порт на Uno с дисплеем и предоставляет отдельный последовательный порт для настройки дисплея. Я не пробовал другие версии или другие Arduinos. Поскольку единственное требование-это запасной последовательный порт на Arduino для подключения дисплея. Я ожидал бы. Что любой Arduino с запасным последовательным портом будет работать с любым дисплеем Nextion. Но я не пробовал комбинаций. Отличных от упомянутых здесь.

Демонстрация
Вам понадобится:

• Прилагаемый
• Прилагаемый файл ‘Nextion_demonstration43.ino’. Который можно открыть с помощью Arduino IDE.

• Arduino с по крайней мере 1 запасным последовательным портом.
• Дисплей Nextion.
• Карта micro SD.

Подключение дисплея Nextion к вашему Arduino

Дисплеи поставляются с кабелем с 4 проводами. Я когда-либо видел их только в следующих цветах, но если вы получите один из них с другими цветами, пожалуйста. Дайте мне знать. Чтобы я мог обновить эту часть учебника.
• Красный — для подключения к +5 В
• Черный — для подключения к 0В
• Синий — Передача данных с дисплея на Arduino. Подключение к RX на Arduino

• Желтый — Прием данных от Arduino на дисплей. Подключение к TX на Arduino

Обратите внимание. Что Arduinios использует один последовательный порт для связи с вашим ПК. Не используйте этот последовательный порт для подключения к вашему дисплею Nextion. Используйте запасной.

Дисплеи работают от 5в. Все те, что у меня есть. Выводят 3,3 В на их последовательную передачу (синий провод). У меня не было никаких проблем с их использованием с WeMos M0 на 3,3 В, Elegoo Mega2560 на 5 В или PIC, работающим на 5 В. Однако, пожалуйста. Проверьте напряжение на дисплее передающего (синего) провода не выше максимального напряжения. Которое может выдержать ваш Arduino.

Чтобы подключить Nextion к Arduino. Вам нужен один свободный последовательный порт на Arduino. Подключите TX от Arduino к желтому проводу. А RX к Arduino-к синему проводу. Вам также понадобится 0 В к черному проводу и +5 В к красному проводу. Ток, который рисует дисплей. Зависит от модели и от того. Насколько ярка задняя подсветка. 7-дюймовый CPT-дисплей NX8048K070 требует до 550 мА. А меньшие-меньше. 4.3По моему опыту. Они генерируют довольно много шума на источнике питания. И это и не обязательно. Я рекомендую использовать конденсатор 470 мкФ поперек источника питания. Припаянный к разъему на задней панели (см. Ответ

#68 подробнее об этом).
Пожалуйста, смотрите фото ниже:
Соединение конденсатора 470 мкФ CR.jpg

Это показывает заднюю часть дисплея с конденсатором 470 мкФ. Припаянным к внешним 2 соединениям разъема. Обратите внимание. Что очень важно. Чтобы отрицательное соединение конденсатора шло к GND. А положительное-к +5 В. Иначе вы наполните свою комнату неприятно пахнущим дымом и напугаете свою кошку.

Power_connection CR.jpg

Serial_connection CR.jpg

Демонстрационное программное обеспечение

Эта демонстрация была создана для базовой версии 4.3Вы можете адаптировать мою конфигурацию для другого дисплея с помощью редактора Nextion.

Откройте прикрепленный файл Если вы используете меньший дисплей. Переместите положение любых объектов. Находящихся за пределами области отображения меньшего дисплея. Изменив X и Y для каждого объекта на значение. Которое помещает объект внутри границ вашего дисплея. Как только вы сделаете это. Выберите ИДЕНТИФИКАТОР устройства в меню и выберите свой дисплей из списка. Если у вас большой дисплей. Вам не нужно ничего перемещать. Просто выберите правильный идентификатор устройства.

Скомпилируйте конфигурацию дисплея. Нажав кнопку

Скопируйте этот файл. И только этот файл. На карту micro SD (на карте SD не должно быть ничего другого)

Поместите карту micro SD в слот для считывания карт на боковой стороне дисплея и подключите черный провод к 0V. А красный провод-к 5V. Вы должны увидеть обновление дисплея. Которое занимает около 5 секунд.

2020-01-18 Arduino Nextion демо 43.zip (14,7 КБ)

Использование дисплеев Nextion с Arduino часть 2

Как только он закончит. Отключите питание. А затем извлеките SD-карту. Снова подключите питание и дисплей должен включиться и выглядеть примерно так:

Демонстрация_он_дисплей CR.jpg

Какую бы версию дисплея и Arduino вы ни использовали, убедитесь. Что вы знаете. Как ссылаться на используемый вами последовательный порт.

Поскольку существует много Arduinos и клонов с различным количеством последовательных портов. И поскольку выбор последовательного порта зависит от вас. Я не могу охватить все возможности в этом учебнике. Для разработки этого учебника я использовал последовательный порт 1 на Elegoo Mega2560. Вам нужно будет отредактировать код в соответствии с используемым последовательным портом.

По умолчанию последовательный порт Nextion настроен на 9600 бод. И если вы новичок в Arduino или Nextion или обоих. Я рекомендую вам оставить его на 9600 бод. Чтобы было меньше беспокоиться. Если что-то не работает.

Все, что вам нужно. Чтобы настроить Arduino для дисплея Nextion-это:

void setup() { //This is for the serial monitor. Remove the // if you need to use it. //Serial.begin(9600); //This is for serial port 1, which is the one used for the Nextion in this demonstration. //You might need to change this depending on which serial port you are using for your display. Serial1.begin(9600); //For demonstration HMI_startup_message(); } void HMI_startup_message() { Serial1.print(F("t0.txt=\"")); Serial1.print(F("Nextion demonstration by Perry Bebbington. For support go to https://forum.arduino.cc/index.php?board=7.0")); Serial1.print(F("\"")); Serial1.write(0xff); Serial1.write(0xff); Serial1.write(0xff); } 

Демонстрационный эскиз и конфигурация Nextion.

Демонстрационный эскиз создает часы реального времени. Используя millis()в качестве источника синхронизации. Если вы читали различные учебники по Arduino или имеете опыт работы с Arduino, вы знаете. Что millis() недостаточно точен для точных часов реального времени. Цель этого урока-продемонстрировать Arduino. Управляющее Nextion. И часы казались простым способом сделать это.

Я оставляю вам создать более точные часы.

Отправка данных на дисплей.

Отправка на дисплей требует понимания набора инструкций Nextion и того. Что дисплей ожидает получить. В демонстрационной конфигурации внизу есть текстовое поле с objname t0. Для отправки текста на этот дисплей необходимо получить.

t0.txt=

Это типично для любой инструкции. Текста или данных. Отправленных на дисплей. Дисплей ожидает. Что 0xff 0xff 0xff указывает на конец инструкции.

Например:

void HMI_display_page(uint8_t page) { Serial.print(F("t0.txt="")); Serial.print(F("This is page ")); Serial.print(page); Serial.print("""); Serial.write(0xff); Serial.write(0xff); Serial.write(0xff); } 

Ставит номер страницы на t0.

Отправка данных с дисплея Nextion на Arduino

Я разработал свой собственный способ отправки данных с дисплея на Arduino. Который оказался достаточно гибким. Чтобы адаптироваться ко всем приложениям. Которые я до сих пор пробовал. Основная идея состоит в том. Чтобы идентифицировать каждый объект на странице по странице. К которой он принадлежит. Его типу и индексу этого типа.

‘Тип Ваш проект будет иметь любое количество кнопок. Ползунков и чего-либо еще на каждой странице. Вы можете сгруппировать похожие и дать им один и тот же тип. Который является числом от 0 до сколько вам нужно.

Я оставляю тип 0 для самой страницы.

‘Индекс типа

В отличие от дисплеев. Я решил не использовать 0xff 0xff 0xff в качестве терминатора для данных. Отправляемых на Arduino. Вместо этого я использую 0xa5 0xa5 0xa5 в качестве начального индикатора. За которым следует 5 байт. Иногда последний байт или 2-это просто дополнение. Чтобы довести общее число до 5. Вы можете изменить код. Чтобы ожидать больше или меньше байтов. Или использовать другую стартовую последовательность.

5 байт — это номер страницы, тип. Индекс типа и 2 байта данных.

Функция receive ищет 0xa5, повторенный 3 раза. Затем сохраняет следующие 5 байт в массиве. А затем использует 3 уровня вложенных операторов switch. Чтобы определить. Какой объект на какой странице отправил данные. Каждый случай оператора switch самого низкого уровня представляет отдельный объект на дисплее и может быть использован для вызова любого кода. Необходимого для вашего проекта. Функция приема должна вызываться один раз каждый раз в основном цикле и будет опустошать буфер приема каждый раз. Когда она вызывается.

Использование дисплеев Nextion с Arduino часть 3

Полный демонстрационный код

Полный код для демонстрации находится здесь и прилагается как

Настройка и основной цикл

void setup() {  //This is for the serial monitor. Remove the // if you need to use it.  //Serial.begin(9600);    //This is for serial port 1, which is the one used for the Nextion in this demonstration. You might need to change this depending on which serial port you are using for your display.  Serial1.begin(9600);  //For  demonstration  HMI_startup_message(); } void loop() {  HMI_read();  clock_run(); } struct CLOCK {  int8_t hour;  int8_t minute;  int8_t second; }; struct CLOCK clock; //This displays the clock void HMI_display_clock() {  char timestring[9];  sprintf(timestring, "%02d:%02d:%02d ", clock.hour. Clock.minute. Clock.second);  Serial.println(timestring);  Serial1.print(F("t1.txt=\""));  Serial1.print(timestring);  Serial1.print("\"");  Serial1.write(0xff);  Serial1.write(0xff);  Serial1.write(0xff); } //This displays the page number void HMI_display_page(uint8_t page) {  Serial1.print(F("t0.txt=\""));  Serial1.print(F("This is page "));  Serial1.print(page);  Serial1.print(F("\""));  Serial1.write(0xff);  Serial1.write(0xff);  Serial1.write(0xff); } void HMI_P1_display_slider(uint8_t slider_d1, uint8_t slider_d0) {  uint16_t slider_val = (slider_d1 0) {         //Read every byte in the receive buffer    readtemp = Serial1.read();    if (readtemp == 0xa5) {                 //Count the number of times 0xa5 has been received      ++a5count;      if (a5count > 2) {        a5count = 0;        HMI_read_data_i = 0;      }    }    else {      a5count = 0;    }    HMI_read_data[HMI_read_data_i] = readtemp;    if (HMI_read_data_i == 5) {      switch (HMI_read_data[1]) {             //HMI_read_data[1] contains the page the data has come from        case 0:                               //Case 0 means the data has come from page 0          switch (HMI_read_data[2]) {         //HMI_read_data[2] contains the type of object on the page that the data has come from            case 0:                           //In this demonstraton case 0 selects a page              HMI_display_page(HMI_read_data[3]);              break;            case 1:                            //In this demonstration case 1 is a button for setting the clock              switch (HMI_read_data[3]) {      //HMI_read_data[3] is the index of the type of button. So 0 to 5 as there are 6 buttons for setting the clock. Each case is a different button.                case 0:                  ++clock.hour;                  if (clock.hour > 23) {                    clock.hour = 0;                  }                  break;                case 1:                  --clock.hour;                  if (clock.hour 59) {                    clock.minute = 0;                  }                  break;                case 3:                  --clock.minute;                  if (clock.minute 59) {                    clock.second = 0;                  }                  break;                case 5:                  --clock.second;                  if (clock.second 9) {      HMI_read_data_i = 9;    }  } } void clock_run() {  static unsigned long previousMillis;  unsigned long currentMillis = millis();  const unsigned long interval = 1000;  if (currentMillis - previousMillis >= interval) {    previousMillis = currentMillis;    ++clock.second;    if (clock.second > 59) {      clock.second = 0;      ++clock.minute;      if (clock.minute > 59) {        clock.minute = 0;        ++clock.hour;        if (clock.hour > 23) {          clock.hour = 0;        }      }    }    HMI_display_clock();  } } 

Nextion_demonstration43.ino (6.81 KB)

Обновлено 30/7/2020

Как использовать многострочные текстовые поля. Добавленные в дополнительные функции Nextion

Использование дисплеев Nextion с Arduino часть 4


Некоторые вещи которые могут вам помочь

ESP8266
ESP8266 имеет один последовательный порт с доступными как Tx, так и Rx. А также один с доступными только Tx.

Тот, что имеет как Tx, так и Rx. Уже используется для последовательного монитора. Что делает подключение Nextion небольшой проблемой.

Чтобы обойти это. Сначала напишите код для отправки информации в Nextion. Но пусть он идет на последовательный монитор.

Когда вы убедитесь. Что это правильно. То используйте Serial.swap (). Который поменяет последовательный порт на GPIO15 (Tx желтый) и GPIO13 (Rx синий).

Обратите внимание. Что GPIO15 (Tx) также используется при загрузке ESP8266, и если high делает его загрузкой с SD-карты. Что создает проблему. Если у вас подключено последовательное устройство и нажмите reset. Так как последовательное устройство будет держать GPIO15 высоким.

Чтобы обойти это. Поместите резистор 10k (или, возможно. Ниже) между GPIO15 и землей. Это удержит GPIO15 низким во время загрузки.

Цифры
Возможно. Вы заметили. Что в этой демонстрации я использовал одно текстовое поле t1 для отображения времени. Но не использовал ни один из заранее определенных числовых объектов. Доступных в редакторе Nextion. Я обнаружил. Что числа довольно бесполезны. Они могут быть только целыми числами и не могут иметь никаких символов. Прикрепленных к ним. Поэтому вы не можете легко сделать £123,65 или 23,85%, например. Использование текстового поля и печати намного проще.

Ползунки
Страница 1 демонстрации имеет ползунок с 3 текстовыми полями, первый показывает 2 байта в шестнадцатеричном формате, полученные от Nextion, 3-й показывает десятичное значение ползунка. Я сделал диапазон от 0 до 1023, то есть от 0x00 до 0x3ff.

Скорость передачи данных в бодах
Вы можете изменить скорость передачи данных с 9600. В редакторе Nextion выберите страницу 0 и найдите событие post initialization в разделе событие. Поставьте baud= в качестве первой записи. Например baud=19200. Это заставит дисплей инициализироваться со скоростью передачи 19200 бод. В вашем эскизе инициализируйте последовательный порт с помощью:

Код: [Select]
[/color]

void setup() {   //This is for serial port 1, which is the one used in this demonstration.   //You might need to change this depending on which serial port you are using for your display.   Serial1.begin(19200); } 

Если вы хотите изменить скорость передачи данных во время выполнения программы. Вы должны быть осторожны. Чтобы не оказаться с Arduino на одной скорости передачи данных и дисплей на другой. По этой причине вам нужно отправить изменение скорости передачи данных на дисплей. Дождаться отправки команды. Затем изменить скорость на Arduino. А затем отправить данные и инструкции на новой скорости. Это подскажет дисплею изменить скорость передачи данных:

Код: [Выбрать]

void HMI_baud_change(uint32_t baud) {   Serial.print(F("baud="));   Serial.print(baud);   Serial.write(0xff);   Serial.write(0xff);   Serial.write(0xff); } 

Однако вы должны помнить. Что последовательная передача происходит медленно. Поэтому после завершения последней Serial.write(0xff); буква Кроме того. Как только дисплей получил полную инструкцию. Требуется время. Чтобы внести изменения. По этой причине вам нужно подождать. Прежде чем менять скорость передачи данных Arduino с помощью:

Код: [Выбрать]

Serial.begin(new baud rate); 

Изменение страниц
Если вы посмотрите на мою демонстрационную конфигурацию. На каждой странице есть 2 кнопки P0 и P1. P1 на странице 0 и P0 на странице 1 измените отображаемую страницу. Но не сообщайте Arduino. Что страница изменилась. На каждой странице под событием инициализации post находится код. Который сообщает Arduino. Что страница изменилась. Это необходимо для того. Чтобы убедиться. Что страница правильно инициализирована. Прежде чем Arduino отправит на нее какие-либо данные.

Использование фоновых изображений
Демонстрационная конфигурация Nextion. Которую я поставил в ‘Arduino Nextion demo 43V1 HMI.zip-это самое простое. Что я мог сделать. Можно использовать 2 (или более) фоновых изображения. Чтобы обеспечить кнопки или все. Что вам нравится в любом дизайне. Который вы хотите. Для этого необходимо использовать функцию обрезанного изображения Nextion. К этому посту прилагается , который является точно таким же конфигурационным файлом Nextion. Но использует обрезанные изображения для кнопок. Чтобы продемонстрировать. Как это сделать.

Nextion дополнительные функции включают в себя:
Прокручиваемый список
, имеющий триггерный код Arduino для запуска на Nextion
С помощью ползунка
, отображающего числа без использования числовых полей
С использованием флагов
, Простую государственную машину
, измеряющую продолжительность нажатия кнопки
, Простой калькулятор (добавлен 3 ноября 2019 года)
, Средство отправки кодов возврата Nextion на последовательный монитор.
Как использовать многострочные текстовые поля (добавлено 30/7/2020)

Кредиты
Спасибо Robin 2 и
BallscrewBob за вашу помощь в этом уроке

2019-06-08 Arduino Nextion demo обрезанные изображения 43V1.zip (78,6 КБ)

2020-07-30 Nextion_additional_features.zip (28,9 КБ)

Отличный Учебник!

Кто-нибудь знает. Можно ли создавать объекты с последовательными командами так же. Как это делается через редактор?

Т. е. можно ли создать кнопку из серийного и nhange со всеми ее атрибутами?

Наблюдатель: Отличный Учебник!

Кто-нибудь знает. Можно ли создавать объекты с последовательными командами так же. Как это делается через редактор?

То есть можно ли создать кнопку из серийника и изменить все ее атрибуты?

Отличный Учебник!

🙂 СПАСИБО!!! 🙂

Кто-нибудь знает. Можно ли создавать объекты с последовательными командами так же. Как это делается через редактор? То есть можно ли создать кнопку из серийника и изменить все ее атрибуты?

Думаю. Что нет. Есть атрибуты. Которые нельзя изменить. Отправив инструкции через последовательный порт. Если вы посмотрите в редакторе Nextion на объект. То некоторые атрибуты будут выделены зеленым текстом. А некоторые — черным. Я не пробовал все возможности. Но я пытался изменить некоторые атрибуты. Которые находятся в черном тексте. Отправив инструкции по последовательному порту. И пришел к выводу. Что они не могут быть изменены таким образом. Я предполагаю из этого. Что если объект имеет атрибуты. Которые не могут быть изменены через последовательный порт. То должно быть невозможно создать объект через последовательный порт.

Чего вы пытаетесь достичь? Возможно, есть способ обойти это ограничение.

Чего вы пытаетесь достичь? Возможно, есть способ обойти это ограничение.

Я планирую разработать сенсорный дисплей для существующей системы домашней автоматизации на базе RS485.

Поэтому в основном мне нужно запрограммировать серию мягких кнопок на дисплее. Описание которых. А также статус (вкл/выкл) будут поступать от Arduino.

Нажатие кнопки должно отправить Arduino уникальный код. Который затем выполнит соответствующую команду домашней автоматизации.

Если бы можно было создавать кнопки с последовательными командами. То фактическая компоновка экрана могла бы управляться arduino. Я сделал что-то похожее на веб-экран домашней автоматизации. Используя html dom.

Код возврата нажатия кнопки. Который также может быть удаленно установлен (с помощью последовательной команды).

Мне нужно запрограммировать серию мягких кнопок на дисплее. Описание которых. А также статус (вкл/выкл) будут исходить от Arduino.

Текст на кнопке можно изменить так же. Как и текст в текстовом поле. Вы также можете изменить цвет фона и цвет текста с помощью соответствующих последовательных команд. Например:

void HMI_button_on_message() {   Serial1.print(F("b0.txt=\""));   Serial1.print(F("On"));   Serial1.print(F("\""));   Serial1.write(0xff);   Serial1.write(0xff);   Serial1.write(0xff); } 

Изменит текст на кнопке b0 на Вкл.

Поиграйте в редакторе Nextion с параметрами отладки и посмотрите. Что вам нужно отправить объекту для изменения определенных атрибутов. Например, в debug. Если вы наберете

b0.bco=63488 

тогда b0 станет красным.

Нажатие кнопки должно отправить Arduino уникальный код. Который затем выполнит соответствующую команду домашней автоматизации.

Вот что делает мой метод! Каждая кнопка в этом примере посылает уникальный код. Который декодируется 3 уровнями операторов switch() в уникальную точку. Из которой вы можете вызывать любые функции. Которые вам нравятся.

Если бы можно было создавать кнопки с последовательными командами. То фактическим расположением экрана можно было бы управлять с помощью arduino.

Я не верю, что вы можете изменить макет. Только текст и цвета кнопок.

Код возврата нажатия кнопки также должен быть установлен дистанционно (с помощью последовательной команды).

В этом нет необходимости. Вы изменяете. Как ваша программа реагирует на каждый уникальный код. Отправленный с кнопок.

Что вы могли бы сделать. Так это иметь несколько страниц на Nextion и попросить Arduino отправить инструкции по изменению страницы. Каждая страница будет иметь разные макеты. И каждая кнопка будет иметь уникальную идентичность на странице. Если вы посмотрите на мою демонстрацию. Я включил 2 страницы. Чтобы проиллюстрировать. Как это работает.

полежите в редакторе Nextion с параметрами отладки и посмотрите. Что вам нужно отправить объекту. Чтобы изменить определенные атрибуты. Например, в debug. Если вы наберете

Код: [Выбрать]

b0.bco=63488

Ага! Все это я уже перепробовал!

например Эта функция изменяет текст в текстовом поле:

void HMI_displayText(byte boxNo. Char* text){     nextion.print(F("t"));   nextion.print(boxNo);   nextion.print(F(".txt=\""));   nextion.print(text);   nextion.print(F("\""));     HMICommandEnd();   } 

и это меняет цвет кнопки :

void showButtonActivated(byte buttonNo) { char comd[20]; char temp[20]; strcpy(comd,"b"); sprintf(temp. "%01d.bco=63488". ButtonNo); strcat(comd,temp); Serial.println (comd); nextion.print(comd);   HMICommandEnd();   } 

Тем не менее. У меня потенциально есть более 100 кнопок для настройки каждого из них. Контролирующих вещи от освещения, отопления. Механических приборов до аудио и т. Д. Кнопки сгруппированы вместе в соответствии с их логической операцией. Например, все светильники в спальне сгруппированы вместе и должны отображаться на одной странице. Я использую 3.5 in nextion (на данный момент). Который, кажется. Может вместить около 8 12 или около того кнопок на странице.

Я пытаюсь найти какой-то метод. Который позволит мне вносить изменения в доступные кнопки на экране nextion. А также их группировку без необходимости каждый раз перепрограммировать nextion. Так как для этого потребуется физический доступ к USB-порту дисплея. Который будет нелегко получить после установки на стену.

Сам arduino управляется дистанционно по каналу RS485. Та же ссылка будет каррировать команду. Которая будет выполнена после нажатия кнопки.

Привет Наблюдатель,

У меня такое впечатление. Что вы уже освоились и не нуждаетесь в большем от меня. Мой контроллер отопления имеет 5 страниц и кнопки в одном углу для переключения между ними. Мой вам совет-посмотрите. Как я переключаю страницы в примере из этого урока; кнопка на странице переключается непосредственно на нужную страницу. Она не говорит Arduino менять страницы. На каждой странице под Postinitializationevent находится код. Который сообщает Arduino. Что страница изменилась. Как только Arduino получает код об изменении страницы. Он отвечает данными. Соответствующими этой странице. Причина этого заключается в том. Чтобы убедиться. Что новые данные. Необходимые на странице. Не будут отправлены до тех пор. Пока страница не будет инициализирована. У меня было много проблем с ошибками в данных всякий раз. Когда я менял страницы. Пока я не понял. Что для инициализации страницы требуется целая вечность. И что данные. Отправленные до этого. Могут быть потеряны.

Я решил создать одну страницу с 12 кнопками описания каждого изменения. Как пользователь изменяет страницу. Другими словами. Изменение страницы это изменит только описание кнопки и фактический код. Который каждая кнопка отправляет при нажатии.

Кто-нибудь знает. Где найти красивые

Такие вещи,как стрелки влево. Вправо, лампочки. Термометры и т. Д. ?

привет.

мои проблемы связаны со шрифтами…..

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

кто-нибудь знает такую проблему?

спасибо пэт

Кто-нибудь знает. Где найти красивые Такие вещи,как стрелки влево. Вправо, лампочки. Термометры и т. Д. ?

Когда они мне были нужны. Я искал их в Интернете. Там есть множество бесплатных загрузок. Если вы идете искать. Имейте в виду. Что Nextion не поддерживает прозрачные изображения. Хотя они могут вам понадобиться для создания фона в соответствии с вашими потребностями.

Наблюдатель:
Я решил создать одну страницу с 12 кнопками. Описание каждой из которых меняется по мере того. Как пользователь меняет страницу.
Другими словами. Изменение страницы приведет только к изменению описания кнопки и фактического кода. Который каждая кнопка отправляет при нажатии.

Кто-нибудь знает. Где найти красивые “прозрачные” изображения/иконки для отображения на этих экранах?

Такие вещи,как стрелки влево. Вправо, лампочки. Термометры и т. Д. ?

https://www.flaticon.com/ — это хорошая отправная точка. Вы должны нарисовать все в другой программе (inkscape, photoshop. Что угодно) и просто построить функциональность с помощью nextion. Тогда все будет выглядеть очень мило.

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

Я пытался положить \n в свой t0.txt команда. Но она просто вызывает странный встроенный символ. А не ставит разрыв строки…есть идеи?

джей Би Беннетт: Я пытался вложить \n в свою жизнь. t0.txt команда. Но она просто вызывает странный встроенный символ. А не ставит разрыв строки…есть идеи?

Если вы имеете в виду, что хотите отправить новую строку в текстовое поле Nextion, то я думаю. Что вы напрасно тратите свое время, я не думаю. Что они это поддерживают. (Если я ошибаюсь и вы точно знаете. Что они действительно поддерживают его. То я хотел бы знать). Насколько я знаю. Текстовые поля обрабатывают весь текст как одну строку. Там, где мне требовалось несколько строк текста. Я использовал несколько текстовых полей.

PerryBebbington: Если вы имеете в виду, что хотите отправить новую строку в текстовое поле Nextion, то я думаю. Что вы тратите свое время, я не думаю. Что они это поддерживают. (Если я ошибаюсь. И вы знаете наверняка. Что они поддерживают это. Тогда я хотел бы знать). Насколько я знаю. Текстовые поля рассматривают весь текст как одну строку. Там, где мне нужно было несколько строк текста. Я использовал несколько текстовых полей.

Да, я потратил некоторое время на поиски и попытки. Но там ничего нельзя было сделать. Но хорошая новость заключается в том. Что ваш метод отлично работает сейчас. Помимо графического интерфейса. Большая часть моего кода и переменных теперь находится на Arduino. И он получает все введенные пользователем данные через клавиатуру в байтах. Прежде чем быть добавленным в полную строку. В любом случае — спасибо. Что разобрался во всем этом. Я просто сходил с ума.

Да, я потратил некоторое время на поиски и попытки. Но там ничего нельзя было сделать.

Как жаль, я надеялся. Что вы обнаружили что-то. Что я упустил!

Кроме графического интерфейса.

Что ты пытаешься сделать? В моем первом черновике этого учебника у меня была графика. Но я отказался от нее. Потому что наличие какой-либо графики значительно затруднило бы кому-то адаптацию учебника к дисплеям разного размера. Поэтому инструкции. Которые я дал для использования другого дисплея, чем тот. Для которого я написал учебник. Стали бы более сложными. И я не думал. Что это хорошая идея для учебника. Предназначенного для кого-то нового в Nextion displays. Поэтому я оставил его.

Спасибо. Что разобрался во всем этом. Я просто сходил с ума.

С удовольствием 🙂

ПерриБеббингтон: Что ты пытаешься сделать? В моем первом черновике этого учебника у меня была графика. Но я отказался от нее. Потому что наличие какой-либо графики значительно затруднило бы кому-то адаптацию учебника к дисплеям разного размера. Поэтому инструкции. Которые я дал для использования другого дисплея, чем тот. Для которого я написал учебник. Стали бы более сложными. И я не думал. Что это хорошая идея для учебника. Предназначенного для кого-то нового в Nextion displays. Поэтому я оставил его.

Я должен быть скрытным о том. Что я строю. Но я сделаю нить на этом форуме. Чтобы я мог похвастаться. Когда она будет закончена. Я думаю. Что если бы я сказал это, кто-то. Кто гораздо лучше программирует. Сделал бы это быстрее меня и разрушил бы мой шанс стать первым :D. Это машина для изготовления деталей музыкальных инструментов.

Графика, которую я использую. — это просто растровые изображения (на самом деле nextion editor тоже хорошо импортирует PNGS). Чтобы создать все кнопки и значки для пользовательского интерфейса. Но я рисую фон вручную. Используя команды заливки. Такие вещи могут быть отправлены по последовательному каналу из arduino тоже с помощью вашего метода (я использую его для выполнения команд vis на элементах и изменениях страниц и т. Д.). Теоретически вы могли бы нарисовать все свои фоновые элементы пользовательского интерфейса через serial. Но я не знаю о создании кнопок и страниц из ничего.

Мне никогда не приходило в голову управлять изображениями из последовательной линии — редактор Nextion достаточно хорош для создания и навигации по страницам и элементам. И вы можете много программировать на нем. Но поскольку библиотеки последовательной связи в значительной степени бесполезны и абсолютно не учитывают глобальные переменные. Сложные проекты. Требующие правильной платы MCU. Определенно должны использовать ваш метод и хранить весь свой код на плате.

Я опубликую код клавиатуры a QWERTY. Если он будет полезен здесь — это, вероятно. Не самый привлекательный код. Но вы получаете все введенные пользователем данные байт за байтом. И он собирается в полные переменные / строки / целые числа / поплавки на конце arduino.

Что я действительно хотел бы сделать с этими Nextions. Так это решить проблемы с шрифтами…они выглядят такими коренными. А размер/расстояние повсюду. Непоследовательны и не сглаживаются. Генератор шрифтов Nextion-это абсолютный мусор. И они взимают около 250 долларов США за готовый шрифт. В Интернете нет репозитория для загрузки бесплатных шрифтов. И единственный проект по созданию правильных шрифтов все еще работает…кто знает. Сколько времени это займет.

Генератор шрифтов Nextion это абсолютный мусор

Действительно. Найдите редактор шрифтов zi. И вы должны найти инструмент для редактирования их по своему вкусу.