Nextion Дисплеи

Barmaley67
Offline
Зарегистрирован: 25.12.2015

Вставил ссылку в Хроме и теперь работает.

AlexZR
Offline
Зарегистрирован: 08.02.2016

да, теперь работает..

Barmaley67
Offline
Зарегистрирован: 25.12.2015

Похоже сдох у меня 7 дюймовый экранчик. Вставил флешку, подал питание, программа начала обновляться, дошла до 100%, Update Successed. Выключил питание, вытянул флешку, включил, надпись "Update Successed" так и осталась висеть. Выключил, опять включил - без изменений. Выключил еще раз, включил, по экрану пошли разноцветные полосы. Включил через переходник, софт экран не находит, полос весь в цветных полосах. Хотя через тот же переходник 3,5" экран находится без проблем. Кто-то сталкивался с таким? Есть смысл ковыряться с экраном дальше или можно отправлять его в мусорное ведро?

Tylax
Offline
Зарегистрирован: 10.10.2019

Всем привет!

Недавно поставил версию V0.58 но столкнулся с проблемой.
Почему-то 8 байт, которые шлет экран имеют не правильный порядок.
Вот пример ответа на считывание состояния Dual state button:

1 FF FF FF 71 1 0 0

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

bool Nextion::receiveNumber(uint32_t *number)
{
  uint8_t temp[8] = {0};

  if (!number)
  {
    Serial.println("Not ok 1");
    return false;
  }
  if (sizeof(temp) != m_serialPort.readBytes((char *)temp, sizeof(temp)))
  {
    Serial.println("Not ok 2");
    return false;
  }
      Serial.print(temp[0], HEX);
      Serial.print(" ");
      Serial.print(temp[1], HEX);
      Serial.print(" ");
      Serial.print(temp[2], HEX);
      Serial.print(" ");
      Serial.print(temp[3], HEX);
      Serial.print(" ");
      Serial.print(temp[4], HEX);
      Serial.print(" ");
      Serial.print(temp[5], HEX);
      Serial.print(" ");
      Serial.print(temp[6], HEX);
      Serial.print(" ");
      Serial.println(temp[7], HEX);
 
  if (temp[0] == NEX_RET_NUMBER_HEAD && temp[5] == 0xFF && temp[6] == 0xFF &&
      temp[7] == 0xFF)
  {
    //Serial.println(temp[0], HEX);
    Serial.println("Ok");
    *number = (temp[4] << 24) | (temp[3] << 16) | (temp[2] << 8) | (temp[1]);
    return true;
  }
  Serial.println("Not ok 3");
  return false;
}

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

Получается что в буфер все 8 байт считываются, но порядок у них не правильный.
Кто-нибудь сталкивался с такой проблемой?

sadman41
Offline
Зарегистрирован: 19.10.2016

Други, подскажите, если знаете - какие best practices для сочетания "Nextion без тача + ардуина" существуют в задачах конфигурирования (какую-нить фамилию ввести или ip-адрес, чтобы потом сохранить в EEPROM микроконтроллера)?

На чьей стороне это сделать проще - дисплея или микроконтроллера?

derby
Offline
Зарегистрирован: 26.06.2017

Парни всем привет. Столкнулся с такой проблемой, имеем MEGA 2560 + NEXTION, на этой связке собран определенный девайс выполняющий свои задачи. Все работало прекрасно, и в какой то момент перестала MEGA реагировать на дисплей а именно на прием сообщений со стороны дисплея, то есть  дисплей не правильно передаёт ID по нажатию, но передает,подключил к терминалу  сначала подумал какой то мусор лезет в таком виде  ( e  ♦ ♦ ♦),  это в терминале такое отображается, но в графе справа смотрю а HEXe все передаётся правильно, выбрал в терминале не STRING а HEX и оказалось что дисплей передаёт то что от него хотят, но почему то в HEXe  а не STRING. КАК и что могло с дисплеем стать? ни каких манипуляций не производил, он просто работал в устройстве. MEGA работает, проверил  с эмулятором дисплея, все нормально.  Кто то сможет прояснить ситуацию, что делать с дисплеем...?

derby
Offline
Зарегистрирован: 26.06.2017

....

alexlepeshkin
Offline
Зарегистрирован: 14.10.2018

Если всё исправно работало, а потом ни стого, ни с сего начал глючить экран - перепрошей экран.

Tylax
Offline
Зарегистрирован: 10.10.2019

Tylax пишет:

Всем привет!

Недавно поставил версию V0.58 но столкнулся с проблемой.
Почему-то 8 байт, которые шлет экран имеют не правильный порядок.
Вот пример ответа на считывание состояния Dual state button:

Проблема решилась разработкой проекта в V0.58 с нуля. Старый формат открылся, запустился, но работало криво, как описано выше. В общем совместимость между версиями есть, но лучше бы ее не было. Убил кучу времени на танцы с бубном. В занчке есть еще один Nextion, больше брать их не буду. По крайней мере пока не доведут до ума. Не столько денег жалко, сколько времени.

alexlepeshkin
Offline
Зарегистрирован: 14.10.2018

Оказывается я удачно перешел это "минное поле". То же переделывал проект в новой версии, на текст текстом, а не выборкой нарисованных слов - сейчас он более красивый чем раньше. К стати коды нажатых кнопок я передавал командой print.

andrwgldmn
andrwgldmn аватар
Offline
Зарегистрирован: 05.12.2018

Добрый день. Пытаюсь сделать вывод на экран то, что я ввожу в мониторе порта, но почему-то любая цифра, которую я ввожу выводится как 849.. что я сделал не так?

#include "Nextion.h"
int val = 0;

NexVariable txt_temp  = NexVariable(0, 10, "n0");
  
char buffer[100] = {0};

void setup() {
    Serial.begin(9600); 
    nexInit();
    }

void loop() {
  if (Serial.available() > 0) {
    val = Serial.read();
    txt_temp.setValue(buffer);

    int temp = val;
 
    memset(buffer, 0, sizeof(buffer));
    itoa(temp, buffer, 10);
  }
}


 

 

Alexlogin
Offline
Зарегистрирован: 25.01.2020

Здравствуйте, поделитесь руссификатором для версии 0.53 а то не одна из ссылок не работает

d_tramp
Offline
Зарегистрирован: 15.05.2017

А смысл какой? На nextion последняя версия 0.59 вроде. 

d_tramp
Offline
Зарегистрирован: 15.05.2017

А смысл какой? На nextion последняя версия 0.59 вроде. 

Alexlogin
Offline
Зарегистрирован: 25.01.2020

Можно и ее если есть на русском

d_tramp
Offline
Зарегистрирован: 15.05.2017

Nextion.cc вроде

Alexlogin
Offline
Зарегистрирован: 25.01.2020

d_tramp пишет:

Nextion.cc вроде

Не работает

sadman41
Offline
Зарегистрирован: 19.10.2016

А что там переводить - меню что ли? Там же идеология "тащи-бросай-компилируй-заливай". Даже наощупь можно это сделать.

Alexlogin
Offline
Зарегистрирован: 25.01.2020

sadman41 пишет:

А что там переводить - меню что ли? Там же идеология "тащи-бросай-компилируй-заливай". Даже наощупь можно это сделать.

Меня попросили найти русскую версию USART HMI вот и ищю

sadman41
Offline
Зарегистрирован: 19.10.2016

"USART HMI" ты и на английском-то можешь не сыскать. Потому что это для TJC, а не для Nextion.

Alexlogin
Offline
Зарегистрирован: 25.01.2020

sadman41 пишет:

"USART HMI" ты и на английском-то можешь не сыскать. Потому что это для TJC, а не для Nextion.

Понятно, печально.

sser
Offline
Зарегистрирован: 25.12.2016

Открыл "Некстион эдитор" , и попробовал загрузить проект на эмуляторе панели Некстиона.

Но внизу страницы куда-то пропали настройки COM порта!(то что пропало зачеркнул красным)

Что делать?

sadman41
Offline
Зарегистрирован: 19.10.2016

Settings -> Reset Layout ?

sser
Offline
Зарегистрирован: 25.12.2016

Не помогает-пробовал.

sadman41
Offline
Зарегистрирован: 19.10.2016

Ну, скачай еще раз portable комплект. Эдитор же не инсталлится, а просто распаковывается.

Eskorpio
Offline
Зарегистрирован: 05.02.2020

Люди добрые подскажите.
Хочу сделать на nextion, полноценную кнопку back.
С nextion только начал разбераться.
Идея такая:
Есть 10 числовых переменных, и переменная счётчика количества переходов на любые страницы, то есть при первом переходе в первую переменную записывается id страницы, при втором, записываеться во вторую переменную, и тд, при одинадцатом переходе запись идёт по кругу, то есть обратно в первую и тд, это все реализовано. То есть при любом переходе переменная счётчика увеливачаеться на 1,и в зависимости от этой переменной идёт запись в переменную соответствующую значению переменной, при 11 записи, счётчик просто сбрасывается на 1.
Вопрос как сделать так что бы при 11 переходах, то есть при перезаписи, при нажатии на кнопку "back" сначало возвращалась 1 страница( первая переменная)так как в ней лежит 11 страница, а далее при нажатии на "back" возвращалась 10 переменная, так как в ней лежит 10 страница
Или может кто подскажет другой алгоритм.

sser
Offline
Зарегистрирован: 25.12.2016

sadman41 пишет:

Ну, скачай еще раз portable комплект. Эдитор же не инсталлится, а просто распаковывается.

Ни чего не помогает.

Пробовал найти все файлы программой удаления в реестре и т.д , и удалил их.

Открываю портабл версию и всё равно нет нижней части окна!

AlexZR
Offline
Зарегистрирован: 08.02.2016

sser пишет:
Открываю портабл версию и всё равно нет нижней части окна!

а порты в системе у вас присутствуют, к которым вы собираетесь подключаться ?

sser
Offline
Зарегистрирован: 25.12.2016

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

А на пк окно не полное ...

пс: операционка Win7.

sadman41
Offline
Зарегистрирован: 19.10.2016

Eskorpio пишет:
Идея такая: Есть 10 числовых переменных, и переменная счётчика количества переходов на любые страницы, то есть при первом переходе в первую переменную записывается id страницы, при втором,

http://arduino.ru/Reference/Array

alexlepeshkin
Offline
Зарегистрирован: 14.10.2018

Вы хотите это реализовать на самом дисплее или он у вас управляется Ардуинкой, например? Если есть Ардуино, то гораздо проще это реализовать на ней, а команды перехода на нужную страницу отравлять через Serial.print

Serial.print ("page ");// команда Nextion 
Serial.print (a[i]);// a - массив где хранятся ваши 10 id страниц.
Serial.write(0xff);// коды для экрана "конец команды"
Serial.write(0xff);
Serial.write(0xff);

Не ручаюсь за синтаксис команды "page", может там и не надо пробел... При такос способе ни какая библиотека для экрана не нужна.

alexlepeshkin
Offline
Зарегистрирован: 14.10.2018

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

sser
Offline
Зарегистрирован: 25.12.2016
  • alexlepeshkin пишет:

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

  • Переменные можно менять при открытии страницы.(эти пункты появляются если ткнуть в пустоту)
  • Preinitialize Event – событие происходит перед отрисовкой страницы.
  • Postinitialize Event – событие происходит сразу после отрисовки страницы.
  • И есть  переменные sys0  sys1  sys2  которые можно изменять при открытии страниц.
  •  
Eskorpio
Offline
Зарегистрирован: 05.02.2020

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

alexlepeshkin
Offline
Зарегистрирован: 14.10.2018

Можно и в самом Некшене.

if(count.val==1) // count.val - это ваша переменная счетчик
{
cash_ID1.val=current_ID.val // cash_ID1.val - это первая переменная из 10 куда записываются ID  cтраниц. А current_ID.val - это переменная где хранится ID текущей страницы
}
if(count.val==2)
{
cash_ID2.val=current_ID.val
}
*
*
*
if(count.val==10)
{
cash_ID10.val=current_ID.val
}

 

alexlepeshkin
Offline
Зарегистрирован: 14.10.2018

sser пишет:

  • Переменные можно менять при открытии страницы.(эти пункты появляются если ткнуть в пустоту)
  • Preinitialize Event – событие происходит перед отрисовкой страницы.
  • Postinitialize Event – событие происходит сразу после отрисовки страницы.
  • И есть  переменные sys0  sys1  sys2  которые можно изменять при открытии страниц.
  •  

Это да, но речь про косвенную, а не прямую запись. Нельзя взять значение переменной обращаясь к ней через её ID, который в свою очередь записан в третью переменную. Короче нету там массивов.

Eskorpio
Offline
Зарегистрирован: 05.02.2020

alexlepeshkin пишет:

Можно и в самом Некшене.

if(count.val==1) // count.val - это ваша переменная счетчик
{
cash_ID1.val=current_ID.val // cash_ID1.val - это первая переменная из 10 куда записываются ID  cтраниц. А current_ID.val - это переменная где хранится ID текущей страницы
}
if(count.val==2)
{
cash_ID2.val=current_ID.val
}
*
*
*
if(count.val==10)
{
cash_ID10.val=current_ID.val
}

 


Именно так я и сделал, но проблема в том что такой код сохранит всего 10 переходов, а все последующие нет, тоесть если вы сделали 13 переходов по страницам кнопка back, отошлет вас не на предидущую страницу а на две назад, поэтому я добавил сброс count, при одинадцатом переходе, что б ID одинадцатом, двенадцатый страницы перезаписовались в соответственно в 1 и 2-ю переменную, тоесть что бы все переменные всегда хранили именно ID последних 10 страниц, а не первых. Но из этого вытекает другая проблема, при нажатии на back, кнопка считывает count, количество переходов по страницам, и например если их было 8,то берет ID из 8-й переменной, и уменьшает счётчик на единицу, то есть при слудующем нажатии back, вернёт на 7 страницу, но если их было допустим 11,то счётчик сбрасивыеться, как описано выше на значение "1", и считывает ID с первой переменной, где уже находиться ID не первой страницы, а одинадцатой, но при следующем клике на back, нужно что бы считывалось значение 10 переменной, где лежит 10 страница, но счётчик равен еденице, вот вопрос как реализовать в таком случае считывание именно 10 переменной, а за ней 9 и тд

Да, были бы у некшена массивы, было бы проще))

alexlepeshkin
Offline
Зарегистрирован: 14.10.2018

Закольцуйте счётчик. Переход на следующую +1, "назад" -1.

Если счётчик равен 11, то исправить на 1.

Если равен 0, исправить на 10

alexlepeshkin
Offline
Зарегистрирован: 14.10.2018

 _

Eskorpio
Offline
Зарегистрирован: 05.02.2020

Вот я болван))) спасибо большое)

d_tramp
Offline
Зарегистрирован: 15.05.2017

Всем привет! 
Вот такой вопрос, весь этот форум перелопатил - не могу понять как сделать.
В проекте есть текст, ну скажем температура. В проекте назначен цвет текста, скажем 46847.
все работает. 
теперь если температура выходит за какие-то пределы, хочу поменять цвет текста.
что нужно дописать в этой строке, чтобы заменить цвет на, скажем... 63488???
  Serial2.print ("t2.txt="); Serial2.write(0x22); Serial2.print (temper, 1); Serial2.write(0x22); Serial2.write(0xff); Serial2.write(0xff); Serial2.write(0xff);

Второй вопрос:
была русскоязычная инструкция по командам экранчика
Что-то не могу найти...

СПАСИБО!!!

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Serial2.print("t2.pco=1024\xFF\xFF\xFF");

d_tramp
Offline
Зарегистрирован: 15.05.2017

Спасибо!
Т.е. в одной строке это не написать?
сначала данные, потом изменение чего-либо...

ну пусть хоть так.

sadman41
Offline
Зарегистрирован: 19.10.2016

Можно и в одной, но разделяя команды 0xFF.

alexlepeshkin
Offline
Зарегистрирован: 14.10.2018

А как можно в одной команде записать и саму команду и значение, которое в переменной temper?
За Serial2.print("t2.pco=1024\xFF\xFF\xFF"); отдельное спасибо!

alexlepeshkin
Offline
Зарегистрирован: 14.10.2018

Serial2.print ("t2.txt=\x22\xFF\xFF\xFF\x22\xFF\xFF\xFF\temper\xFF\xFF\xFF"); 

Так?
Up. Не, переменная же в кавычках получилась)))

sadman41
Offline
Зарегистрирован: 19.10.2016

Если нужно именно переменную влепить, то через Serial не очень получится одной, конечно. Я через snprintf мотаю. Например:

char command[50];
...
snprintf_P(command, sizeof(command), PSTR("%S.bco=%u\xFF\xFF\xFF%S.pco=%u\xFF\xFF\xFF"), prevControlName, ncGray, prevControlName, ncBlack);
Serial2.print(command);

 

d_tramp
Offline
Зарегистрирован: 15.05.2017

[quote=stambylov]

Привет, чтоб погасить яркость дисплея, можно сделать таймер на 5 минут и вписать туда строки:

while(dim>1)
{
  dim=dim-1
  delay=10
}
page 0

А как сделать таймер на 5 минут? 
У меня больше минуты не получается... 
говорит ограничение в 65535...

stambylov
stambylov аватар
Offline
Зарегистрирован: 10.05.2012

d_tramp] </p> <p>[quote=stambylov пишет:

Привет, чтоб погасить яркость дисплея, можно сделать таймер на 5 минут и вписать туда строки:

while(dim>1)
{
  dim=dim-1
  delay=10
}
page 0

А как сделать таймер на 5 минут? 
У меня больше минуты не получается... 
говорит ограничение в 65535...

Надо создать таймер, например он называется tm1, в его настройках ставишь значение 60000(1000-1сек, соответственно 60000-это 1мин.
При наступлении таймера 60000, будет выполняться строки в таймере кода.
Для пяти минутного таймера, надо создать переменную, в неё будет записываться число, при каждом наступлении таймера записывается число +1, например таймер сработал 5 раз, соответственно в переменной будет число 5, как сделать: в коде таймера пишешь t1=t1+1, где t1 это переменная в которую записываем значение.
Для затухания создаём ещё один таймер tm2 со значением 100, в нём написать код затухания дисплея:
if (t1==5)
{
t1=0 //обнуляем значение
//Начинаем затемнять дисплей
while(dim>1
{
dim=dim-1
delay=10
}
}

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

d_tramp
Offline
Зарегистрирован: 15.05.2017

Всем привет! А помогите мне с GMov разобраться. Не могу найти где почитать.
Их можно менять как изображения?
Создал я gm3, есть пара заготовок.
А вот такой фокус:

   Serial2.print("gm3.gmov=2\xFF\xFF\xFF"); 
   delay(3000);
   Serial2.print("gm3.gmov=3\xFF\xFF\xFF"); 
не работает... Что неправильно пишу?
СПАСИБО!!!