Nextion Дисплеи

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

alex_r61 пишет:

И встроенный язык уже полностью освоили? Вы даже со щрифтами, похоже, не разобрались. Я уже видел проекты, где даже для переключения страниц в дисплее используют Дуню, смешно.

Встроенный язык там - одно название, чего там осваивать-то? По поводу шрифтов - это вам только кажется, что не разобрался, поэтому и пишете "похоже". Разобрался - и вовсе от них отказался, в силу того, что они кодируются побитово, следовательно - о сглаживании можно забыть. Шрифты - это самое слабое место у Nextion, к слову.

Я вот не понял - вам только наехать или как? А то что-то тон вашего сообщения какбэ намекает на то, что опять я лох, а вы во всём разобрались. Я ни-че-го не хочу никому доказывать, о чём неоднократно упоминал. Не надо моего мнения - не читайте, что я пишу. Не устраивает - это ваше право. Не согласны - аргументируйте.

А то, похоже, вы даже в шрифтах Nextion не разобрались, а всё туда же. Видел я подобные проекты - смешно.

alex_r61
Offline
Зарегистрирован: 20.06.2012

Я ни на что не намекаю, а Вы сразу "с шашкой наголо". Весеннее обострение? Подскажите тогда как реализовать Radio Buttons и Checkbox, имеющимися средствами. Я что то завяз, а у них пока не реализовано.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

alex_r61 пишет:

Я ни на что не намекаю, а Вы сразу "с шашкой наголо". Весеннее обострение? Подскажите тогда как реализовать Radio Buttons и Checkbox, имеющимися средствами. Я что то завяз, а у них пока не реализовано.

Два рисунка состояний, чекнуто/нечекнуто. Для чекбокса - всё есть из коробки, компонент Dual-state button. Для радио - тоже юзаем Dual-state button, по нажатию на каждый (событие по вкусу - touch press или touch release):

ref_stop // чтобы экран не помаргивал, если радиокнопок много
bt1.val=0 // выключаем кнопку 1
bt2.val=0 // выключаем кнопку 2
// и т.д. 
ref_star

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

Правка: только с радио придётся ещё обрабатывать ситуацию, когда щёлкают по одной и той же кнопке постоянно. Можно и без dual-state button это решить, просто компонентом image, например. Короче, никаких особых "против" нету - всё делается быстро штатными средствами.

alex_r61
Offline
Зарегистрирован: 20.06.2012

Спасибо, в принципе так и начал делать, а потом меня что то не в ту степь понесло:)

AndrF
Offline
Зарегистрирован: 10.04.2016

Вопрос по отличию китайской и нормальной версии - как я понял из того что писалось там только с IDE непосредственно в дисплейчик не грузится. А если все просто скопировать на карточку и ее вставить? Будет работать?

alex_r61
Offline
Зарегистрирован: 20.06.2012
AndrF
Offline
Зарегистрирован: 10.04.2016

Увы - не дюже понятно что там прикрыли...

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

alex_r61
Offline
Зарегистрирован: 20.06.2012

Будет интересно чем всё кончится.

AndrF
Offline
Зарегистрирован: 10.04.2016

alex_r61 пишет:

Будет интересно чем всё кончится.

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

alex_r61
Offline
Зарегистрирован: 20.06.2012

Как и предпологалось дисплей не пришёл. И xDriver оказался прав - жулик, мне на комплектухе маленько сэкономил.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

alex_r61 пишет:

Как и предпологалось дисплей не пришёл. И xDriver оказался прав - жулик, мне на комплектухе маленько сэкономил.

А что, уже прошли все сроки ?

alex_r61
Offline
Зарегистрирован: 20.06.2012

Какие сроки? Комплектуха пришла без дисплея и нескольких микрух.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Други, подскажите, залил на sd карту проект, дисплей карту видит, а файл проекта - нет. В какую сторону копать? 

hunk_72
Offline
Зарегистрирован: 11.09.2015

Плюйтесь в меня, бросайтесь чем хотите, хоть какулями. Пришел ко мне нахаляву. Получил минут 30 назад. Только кабель зарядки телефона с собой есть, подключил, красота.... Завтра дома буду, буду щупать. А, так, демка-менюшки.

Модель NX3224T028_011

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

dr.lmg пишет:

Други, подскажите, залил на sd карту проект, дисплей карту видит, а файл проекта - нет. В какую сторону копать? 

Файл проекта - это HMI? Если да, то не тот файл скармливаете: на флешке должен лежать единственный файл, с расширением tft. найти его можно, выбрав в Nextion Editor пункт меню File->Open build folder после того, как скомпилируете проект. В этот папке и будет лежать tft-файл, который надо перенести на девственно чистую карточку.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Да, изначально пытался скормить HMI, не получилось :)

Потом уже покопавшись на itead studio, нашел, что нужен как раз tft. Дисплей запустил.

Теперь не могу понять, как из ардуины на него передать, к примеру, показания температуры? И как его на дисплее отобразить.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

hunk_72

Трек  UAxxxxxxxxxYP  был ?

Территориально где находишься ?

Мои повисли где-то ....

hunk_72
Offline
Зарегистрирован: 11.09.2015

Питер.

А, ты сам где?

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Москва, так трек то какой был ?

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Так, разобрался я как передавать данные с ардуинки в дисплей. Теперь дело за малым: настроить передачу параметров с ардуинки в дисплей, и с дисплея в ардуинку :)

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

dr.lmg пишет:

Так, разобрался я как передавать данные с ардуинки в дисплей. Теперь дело за малым: настроить передачу параметров с ардуинки в дисплей, и с дисплея в ардуинку :)

Есть библиотека для Arduino IDE прямо от разработчиков Nextion - это, что называется, раз. Два: там всё просто, как блин - разобраться можно за пару часов, неспешно прочитав доку на команды дисплея, и впилить в код то, что нужно.

Если вкратце - то любая команда, которая гоняется туда/сюда по UART - заканчивается тремя байтами 0xFF, по наличию трёх таких последних байт в буфере приёма - понимаешь, что команда от дисплея пришла. Далее - смотришь код команды, и интерпретируешь данные.

Посылать дисплею - ещё проще: послал что-то типа j0.val=10 - в конце дописал в UART три байта 0xFF - и всё.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Да вот заткнулся опять на проблемке: значение одной переменной типа String или Int передаются нормально. Как только я пытаюсь передать сразу несколько переменных разных типов,ардуинка зависает. Пользую библиотеку nextion.h

alex_r61
Offline
Зарегистрирован: 20.06.2012

Плюнул на эту библиотеку, под одной IDE идёт под другой нет. Для передачи использую подпрограмму.

void sendToLCD(uint8_t type, String index, String cmd)
{
     if (type == 1 ){
        Nextion.print(index);
        Nextion.print(".txt=");
        Nextion.print("\"");
        Nextion.print(cmd);
        Nextion.print("\"");
    }
    else if (type == 2){
        Nextion.print(index);
        Nextion.print(".val=");
        Nextion.print(cmd);
    }
    else if (type == 3){
        Nextion.print(index);
        Nextion.print(".picc="); 
        Nextion.print(cmd);
    }
    else if (type ==4 ){
        Nextion.print("page ");
        Nextion.print(cmd);
    }

    Nextion.write(0xff);
    Nextion.write(0xff);
    Nextion.write(0xff);
}

Для приёма сделал свой протокол.

smoki
Offline
Зарегистрирован: 24.10.2015

 А может попробуем свою прошивку написать,там контроллер помощьнее avr, на плате даже вывод под st-link есть. Камень stm32f030 дисплей подключен по 16 битной шине к PB0-15. Контроллер экрана не известен, но есть подозрение что это HX8352. Придет st-link буду ковырять, с stm раньше дел не имел. Кто подскажет с чего начать, как слить родную прошивку?

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Ну что, можно и в меня какашками кидать :)

hunk_72
Offline
Зарегистрирован: 11.09.2015

Нихрена, ты хапнул, вот китаец попал. 

AndrF
Offline
Зарегистрирован: 10.04.2016

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

alex_r61
Offline
Зарегистрирован: 20.06.2012

xDriver когда заказал?

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015
AndrF
Offline
Зарегистрирован: 10.04.2016

По той цене?

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Ну так о чем и речь !!!

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

Celestron
Offline
Зарегистрирован: 13.04.2016

Ребята, может кто сталкивался с такой фичей:

Если HMI (у меня 3.5 базовая) подключить в мегу2560 к TX0 и RX0 у меня начинаются танцы с бубнами ( и не одним):

1. программа в 2560 не грузится, говорит "stk500v2_getsync(): timeout communicating with programmer"

2. отключаешь дисплей от TX0 и RX0 все грузится нормально

Это был раз. Теперь два:

1. после повторного подключения к TX0 и RX0 (после того как скетч загрузил) дисплей команды принимает, но 2560 данные от дисплея не принимает.

2. если в этот момент включить Serial Monitor или какой-нибудь терминал (например, PuTTY), то прием данных от дисплея ардуиной начинает работать.

Если подключать к любым другим TX/RX (1, 2, 3), то все работает нормально и сразу.

Вот, блин, что это? На сайте ITEAD нифига не нашел. Может плохо искал...

alex_r61
Offline
Зарегистрирован: 20.06.2012

Celestron пишет:

... Вот, блин, что это? ...

Это извращение, сударь :) А зачен лепить дисплей на занятый порт? На другие что мешает?

Celestron
Offline
Зарегистрирован: 13.04.2016

alex_r61 пишет:

Это извращение, сударь :) А зачен лепить дисплей на занятый порт? На другие что мешает?

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

http://www.arduino.ru/forum/obshchii/problemy-raboty-po-tx0rx0-mega2560-tozhe-na-due

Так, что мой вопрос здесь уже, по все видимости, не актуален. Прошу прощения за то, что несвоевременно об этом сообщаю (серьезно). Здесь вопрос снимаю, переношу в указанную ветку.

dreamol
Offline
Зарегистрирован: 19.07.2016

Друзья подскажите как решить простую задачу: 

На nextion записан проект с одним обьектом Text. Objectname: t3.

как из ардулино записать в свойство txt - "123345"

И прочитать его обратно....

 

Все перерыл, примеры из официальной библиотеки не компилируются.

Просьба если не сложно полный листинг, а не куском.... или ссылку 

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

И официальная документация к дисплею не помогает? Что ж такое то - сволочи китайцы, не умею писать документации вовсе! Да ещё примеры не компилируются, выдают ошибку в строке номер сто тридцать пять! Гавно ваша ардулино!

Вы точно документацию читали? Там все команды описаны: http://wiki.iteadstudio.com/Nextion_Instruction_Set

Если вкратце - то все команды, посылаемые в Nextion по UART - суть текстовые, заканчивающиеся тремя байтами 0xFF. Чтобы установить текст в компоненте, надо в порт послать t3.txt="тут текст"0xFF0xFF0xFF.

Как принимать и интерпретировать принятое - тоже есть по указанной ссылке.

dreamol
Offline
Зарегистрирован: 19.07.2016

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

alex_r61
Offline
Зарегистрирован: 20.06.2012

К этим инструкциям ещё и пол литра надо :) Отправка:

void sendToLCD(uint8_t type, String index, String val, String cmd)
{
    if (type == 1 ){                // Текст (text)
        mySerial.print(index);      // К примеру: t0.txt="PayalnikTV 2015"
        mySerial.print(".txt=");
        mySerial.print("\"");
        mySerial.print(cmd);
        mySerial.print("\"");
    }
    else if (type == 2){            // Страница (page), например: page 1
        mySerial.print("page ");
        mySerial.print(cmd);
    }
    else if (type == 3){            // Разные параметры {val} val pic bco pco и т.д. 
        mySerial.print(index);      // К примеру: j0.val=50 или t1.pco=2016
        mySerial.print(".");
        mySerial.print(val);
        mySerial.print("="); 
        mySerial.print(cmd);
    }
        
     mySerial.write(0xff);          // В конце каждой команды посылаем такую последовательность
     mySerial.write(0xff);
     mySerial.write(0xff);  
}

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

dreamol пишет:

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

Вы же прекрасно понимаете, почему я иронизирую. Поверьте - в документации есть всё. Я даже не брал в руки библиотеку для Arduino IDE, которую так любезно наколбасили китайцы, ибо она - избыточна для моих целей. Брал всё именно из документации, там есть прекрасные таблички, которые описывают, что приходит в порт от Nextion и как это интерпретировать, есть также примеры команд по установке значения того или иного компонента.

Считаю, что вы просто не сделали над собой усилие и не прочитали толком, отсюда и ирония.

З.Ы. И да, будьте готовы к тому, что вся годная (да и негодная тоже) документация - на басурманском, и даташиты на микросхемы всякие - тоже на языке потенциального противника. Так что лучше привыкать сразу ;)

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

alex_r61 пишет:

К этим инструкциям ещё и пол литра надо :) Отправка:

void sendToLCD(uint8_t type, String index, String val, String cmd)
{
    if (type == 1 ){                // Текст (text)
        mySerial.print(index);      // К примеру: t0.txt="PayalnikTV 2015"
        mySerial.print(".txt=");
        mySerial.print("\"");
        mySerial.print(cmd);
        mySerial.print("\"");
    }
    else if (type == 2){            // Страница (page), например: page 1
        mySerial.print("page ");
        mySerial.print(cmd);
    }
    else if (type == 3){            // Разные параметры {val} val pic bco pco и т.д. 
        mySerial.print(index);      // К примеру: j0.val=50 или t1.pco=2016
        mySerial.print(".");
        mySerial.print(val);
        mySerial.print("="); 
        mySerial.print(cmd);
    }
        
     mySerial.write(0xff);          // В конце каждой команды посылаем такую последовательность
     mySerial.write(0xff);
     mySerial.write(0xff);  
}

 

Позволю себе позанудствовать и немного улучшить определение функции:

void sendToLCD(uint8_t type, const String& index, const String& val, const String& cmd)

По итогу - избежим ненужного дёрганья памяти при передаче значений в функцию.

dreamol
Offline
Зарегистрирован: 19.07.2016

нда, что то совсем у меня не работает:(((( :))))

Железо: UNO+Nextion 

Коммутация: Желтый провод RX - на пин 0 в ардулино, Синий провод TX - на пин 1 в ардулино

В проекте Nextion Editor 3 страницы (page0, page1, page2) 

---- скетч

#include <SoftwareSerial.h>

SoftwareSerial mySerial(0, 1);
 
void setup() 
{
 Serial.begin(9600);
 sendCommand("");
 sendCommand("page1");
}
 
 void sendCommand( const char* cmd )
{
  mySerial.print(cmd);
  mySerial.write(0xff);
  mySerial.write(0xff);
  mySerial.write(0xff);
}

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015
dreamol
Offline
Зарегистрирован: 19.07.2016

page 1 - пробовал все равно не переходит.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

dreamol пишет:

page 1 - пробовал все равно не переходит.

Вангую - что-то делаете неправильно. Вот этот код просто обязан работать:

Serial.write("page 1");
static uint8_t endOfPacket[3] = {0xFF,0xFF,0xFF};
Serial.write(endOfPacket,sizeof(endOfPacket));

 

AndrF
Offline
Зарегистрирован: 10.04.2016

Может просто страница не page 1 называется...

dreamol
Offline
Зарегистрирован: 19.07.2016
------------------------------
 
void setup() {
Serial.write("page 2");
static uint8_t endOfPacket[3] = {0xFF,0xFF,0xFF};
Serial.write(endOfPacket,sizeof(endOfPacket));
}
 
void loop() {
  // put your main code here, to run repeatedly:
 
}
---------------------------------------------------------
 
Даже так не работает, может быть с Коммутацией что то не так (земля и 5в, от другого USB источника питания)
и еще все страници стоят vscope=global
dreamol
Offline
Зарегистрирован: 19.07.2016
alex_r61
Offline
Зарегистрирован: 20.06.2012

dreamol пишет:

Даже так не работает, может быть с Коммутацией что то не так (земля и 5в, от другого USB источника питания)
и еще все страници стоят vscope=global

А может с головой?

sendToLCD(1,"t0", "Privet golova");

dreamol
Offline
Зарегистрирован: 19.07.2016

Про голову - согласен, иначе бы не спрашивал... 

даже так не работает sendToLCD(1,"t3","","Privet golova"); :))))))))))))))))))

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Надеюсь, begin для нужного serial делается? Подключено перекрёстно (RX-TX, TX-RX)? Если разные источники питания - земли объединены?

Вообще, строго говоря, сразу с места в бой - практика порочная. Для понимания того, как оно работает, достаточно подключить Nextion через USB-TTL-конвертер и в любой терминалке посылать ему команды, добиваясь, чтобы заработало. Ну и заодно бесплатно смотреть, чего он там отсылает взад.

Вот лично я не знаю дисплея проще в общении, чем Nextion. Уж если с ним не получается, тогда...