Nextion Дисплеи

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

Похоже это Mega 328PB или плата под неё. https://aliexpress.ru/item/32817729229.html

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

делать то что )))

Listian
Offline
Зарегистрирован: 11.07.2019

AlexZR пишет:

делать то что )))

пайку проверьте и провода, потом напругу на выходе RX. 

если все ок, то соедините rx и tx и погоняйте байты на старых и на новых платах.

п.с.

PE0/1 - то ли второй uart , то ли второй i2c для чипа 328PB.

но на фото 328P, п.э. хз работают ли они, вообще.

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

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

ATMega328PB

PE0 => SDA1/ICP4/ACO/PTCXY
PE1 => SCL1/T4/PTCXY

Но никаких явных проблем со связкой 328PB<->Nextion я не заметил. Ни при соединении через второй UART, ни через SoftSerial.

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

 Надо прозвонить РЕ0 на землю, РЕ1 на Vcc. Тогда уже будет ясно.

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

Парни привет, кто нибудь юзал новую версию дисплеев в линейке "intelligent" , как там дела с контрастом и цветами, или стекло вообще не меняли все на том же уровне, как емкостной сенсор себя ведет, что нибудь поправлено в лучшую сторону ?...

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

по ATMega328PB вопрос закрыт, оказалась она очень щепетильна к питанию!

Vic47
Offline
Зарегистрирован: 27.05.2020

Здравствуйте.

Вопрос: получил от Nextion на запрос "get rtc4" ответ: 71 1d 00 00 00 ff ff ff

Понимаю, что после байта 0х71 идет информация о минутах 0x1d (29 минут).

Забрать информацию о минутах не получается, совсем не силен в Си. Кто-то может помочь?

c = Serial1.getc();  // запись ответа Nextion
 pc.putc(c); // контроль принятого сообщения переменная с 71 1d 00 00 00 ff ff ff

ProstoAlex
Offline
Зарегистрирован: 21.01.2015

https://nextion.tech/instruction-set/#s7

0x71 0x01 0x02 0x03 0x04 0xFF 0xFF 0xFF
Returned when get command to return a number

4 byte 32-bit value in little endian order.
(0x01+0x02*256+0x03*65536+0x04*16777216)

 

Vic47
Offline
Зарегистрирован: 27.05.2020

ProstoAlex пишет:

https://nextion.tech/instruction-set/#s7

0x71 0x01 0x02 0x03 0x04 0xFF 0xFF 0xFF
Returned when get command to return a number
4 byte 32-bit value in little endian order.
(0x01+0x02*256+0x03*65536+0x04*16777216)

 

Что такое биты, байты, регистры, флаги и HEX  - я знаю. Знаю, что в 16 разрядном числе старший байт надо умножить на 256. Программировал на ассемблере для 8080, 8049, St62, ST65, MSP430. Сейчас я не знаю, как объяснить микроконтроллеру, что он уже получил ответ на запрос (на языке Си). Не знаю, как получить для обработки второй байт сообщения Nextion/

Vic47
Offline
Зарегистрирован: 27.05.2020

Сделал. Позаимствовал идею у западного товарища. Суть идеи - преобразовать принятый поток в массив. Тогда любой байт из потока  выбирается по номеру байта в массиве. Позиции байтов и длина массива мне известны.

 

Каримов
Каримов аватар
Offline
Зарегистрирован: 24.05.2017

Подскажите, пожалуйста! Как в программе NEXTION EDITOR отслеживать порт GPIO?

Listian
Offline
Зарегистрирован: 11.07.2019

Каримов пишет:

Подскажите, пожалуйста! Как в программе NEXTION EDITOR отслеживать порт GPIO?

как я понимаю нужно в скриптах NE прописывать команды.

например, текстовое поле или кнопку связать с gpio:

pio3=1, pio3=0, n0.val=pio3

 
pio0 - pio7
cfgpio
 
pwm4 - pwm7
pwmf
 
п.с.
 
мне в итоге rtc и gpio оказались не нужными, т.к. решил питание отключать мосфетом(
особо нет нужды, чтобы экран постоянно работал.
 
Igor424
Offline
Зарегистрирован: 20.08.2020

Прошу прощения.Я чайник.А можно подробнее расписать.Сделал все как написано.Но программу ругается на переменную t1.А так работает ровно одну минуту и тухнет

Igor424
Offline
Зарегистрирован: 20.08.2020

Надо создать таймер, например он называется 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

Всем привет!

Создал Gauge, передаю ему значение z0.val

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

что правильно, для текстовых полей я писал так:

cov t8.txt,hdat.val,0
соответственно надо было создать hdat.val

а вот для z0.val, создав va2.val и написав
cov z0.val,va2.val,4

не прокатывает... Как правильно сделать?
СПАСИБО!!!

 

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

Правильно - объявить компоненту глобальной.

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

ой! А слона то я и не заметил...
Памяти совсем нет :)

СПАСИБО! заработало!!!

Tango
Offline
Зарегистрирован: 05.03.2017

d_tramp пишет:

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

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

Тогда по наступлению таймера яркость дисплея будет плавно угасать, а после перейдет на начальную страницу(если надо)

Привет! Тоже заморочился с этой задачей, но при создании таймера, на основной странице перестают работать все кнопки в Dbug

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

давайте еще раз.
Создаем на странице таймер, в него пишем

while(dim>5)
{
  dim=dim-1
  delay=10
}
все работает. 
stambylov
stambylov аватар
Offline
Зарегистрирован: 10.05.2012
 
1. на странице в Preinitialize Event написать:
 Dimmer.en=1 //активируем таймер, по истечению времени он выполнит свой код
В таймере Dimmer, находим параметр en, в нем ставим 0
 
2. Создаем таймер Dimmer (в нем пишем код, пока яркость не будет равна 15(например) убавляем яркость на -1 с задержкой 10мс
while(dim>15)
{
  dim=dim-1
  delay=10
}
Dimmer.en=0

 

3. На странице во всех элементах, например в кнопке или рисунке написать (при нажатии на элемент, будет выполняться код, пока яркость не 100%, прибавляем +1 с задержкой в 10мс):

while(dim<100)
{
  dim=dim+1
  delay=10
}
Dimmer.en=1
alfik777
alfik777 аватар
Offline
Зарегистрирован: 29.06.2015

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

Kostochkin
Offline
Зарегистрирован: 17.12.2020

Здравствуйте, уважаемые.

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

Код для Nextionа подобный этому:

while(va0.val==0)

{

doevents

}

в Preinitialize Event страницы вешает все напрочь.
Listian
Offline
Зарегистрирован: 11.07.2019

установить нужные значения, а потом переключать страницу? не?

Kostochkin
Offline
Зарегистрирован: 17.12.2020

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

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

Создаёшь глобальные переменные для датчиков. С ардуины отправляются данные по каждому датчику в ранее созданные переменные. Далее в preinitilize event присваиваем переменные, которые хранят самые последние значения с ардуины, к переменной, которая находится уже на самой странице.

Kostochkin
Offline
Зарегистрирован: 17.12.2020

Датчиков, условно говоря, много. Стартует дисплей, стартует, пусть ардуина. Ардуина гонит информацию в дисплей в глобальные переменные, много. К моменту окончания preinitilize event еще не все глобальные переменные получили значения, по этому может выскочить ерундакакаято. :)

Проблема в том, что (как прочитал) есть определенные ограничения на работу с переменными в момент инициализации. По этому дальше биться об инициализацию не стал, для себя решил следующим образом:

Стартует экран, в preinitilize event прячу все "нужные" элементы, вывожу прогресс бар, запускаю таймер. В событии таймера произвожу проверку все ли принято, или нет. Если еще нет - прорисовываю прогресс бар, если да - обработал принятые данные, рассовал их по элементам, прогресс бар убрал, "нужные" элементы показал, таймер остановил. Так можно обойтись без глобальных переменных.

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

Kostochkin пишет:

Датчиков, условно говоря, много. Стартует дисплей, стартует, пусть ардуина. Ардуина гонит информацию в дисплей в глобальные переменные, много. К моменту окончания preinitilize event еще не все глобальные переменные получили значения, по этому может выскочить ерундакакаято. :)

Проблема в том, что (как прочитал) есть определенные ограничения на работу с переменными в момент инициализации. По этому дальше биться об инициализацию не стал, для себя решил следующим образом:

Стартует экран, в preinitilize event прячу все "нужные" элементы, вывожу прогресс бар, запускаю таймер. В событии таймера произвожу проверку все ли принято, или нет. Если еще нет - прорисовываю прогресс бар, если да - обработал принятые данные, рассовал их по элементам, прогресс бар убрал, "нужные" элементы показал, таймер остановил. Так можно обойтись без глобальных переменных.

В Preinitilize Event пишешь следующее:

//Запрос на получение данных
print "ZaprosData"
printh 0d 0a

Т.е. при нажатии на экран, посылается на ардуину запрос, чтоб она отправила данные с датчиков.

Обработка в ардуине выглядит так:

//Переменные 

char inc;// переменная для хранения сообщения полученного с nextion
String incStr;// переменная для хранения сообщения полученного с nextion
int Dlina = 0; //переменная для хранения длины сообщения


if (Serial1.available()) {// Читаем полученные данные с Nextion
    inc = Serial1.read();
    incStr += inc;
    if (inc == 0x23) {
      incStr = "";
    }
    if (inc == 0x0A) {
      Dlina = incStr.length();
      AnalyseString(incStr);
      incStr = "";
      inc = "";
      Dlina = 0;
    }
  }

Далее ардуина прочитала запрос и переходит в функцию обработки полученного запроса:

void AnalyseString(String incStr) {
  if (incStr.indexOf("ZaprosData") >= 0) {
    // Отправка температуры и влажности с датчика Assong
    SendData("page0.Dat1.txt", "\"" + Temperature1 + "\"");
    SendData("page0.Dat2.txt", "\"" + Humidity1 + "\"");
    //.......и так далее
  }
// запросов может быть сколько угодно
}

Далее ардуина отправляет сообщение каждый раз когда надо:

// отправка на Nextion данных + данные
void SendData(String dev, String data)
{
  Serial1.print(dev);
  Serial1.print("=");
  Serial1.print(data);
  Serial1.write(0xff);
  Serial1.write(0xff);
  Serial1.write(0xff);
  dev = "";
  data = "";
}

Создаешь переменные (выбираешь тип String) для каждого датчика типа dat1.txt dat2.txt ...

Создаешь на дисплее текста t1 t2....

В параметрах каждого текста находишь параметр txt и туда пишешь например "Запрос" или на свое усмотрение, Этот текст будет появляться в случае, когда данные еще не получены, а не кракрязябра)

Далее создаешь таймер timer1, в его параметрах находишь tim и пишешь туда 100, т.е. каждую 0.1 секунду будет выполняться код в этом таймере.

В таймере пишешь:

t1.txt=dat1.txt
t2.txt=dat2.txt

Итак, мы получили данные по запросу с дисплея и вывели их на дисплей, чтоб получать обновленные данные дальше, можно создать еще один таймер timer2 и в его параметрах задать время для запроса с ардуины данных ИЛИ же в самой ардуине отправлять по заданной программе или если же данные с какого-либо датчика изменились например на 0.5.

В таймере timer2 можно тоже самое написать что и в Preinitilize Event.

как то так....

Kostochkin
Offline
Зарегистрирован: 17.12.2020

Спасибо за ответ. Для себя я реализовал, как описал выше. Без глобальных переменных и с одним таймером. 

Но кому-нибудь может пригодится! :)

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

подскажите пожалуйста, в Nextion есть таймеры, а как они работают, по очереди, или одновременно, т.е. если один таймер установлен на 50 мс, а второй на 1500 мс, как они будут работать совместно ?

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

Там процессор быстрый, но одноядерный. Так что, можно сказать, что по-очереди. А совместно нормально должны работать, если в обработчике по полдня не висеть.

The Timer component is not expected to be a high precision interrupt driven component. It is however useful for queueing reoccurring event code after elapsed .tim has expired. As code is sequentially processed, it is very easy for the time to process the requested user event code to exceed the .tim intervals and therefore not interrupt driven (to avoid such stack overflows) and not high precision.

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

понятно, спасибо за столь подробное описание!
 

feo
Offline
Зарегистрирован: 21.01.2021

Здравствуйте!

Прошу подсказать как правильно организовать в дисплее страницу логов.

Есп32 по событию шлет в дисплей строку "время - событие", нужно отображать его в области дисплея построчно и как только область заполнена сдвигать список вверх. Хотя бы и с потерей верхней строки, а в идеале со сдвигом вверх и со слайдером. Чтобы можно было пролистывать все события.

Аналог окна лога компиляции в ардуино иде например.

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

Скорее всего только программно. Заносить данные в массив, а на экран выводить часть строк. Слайдером/кнопками указывать с какой строки начать показывать лог на экране.

Igor424
Offline
Зарегистрирован: 20.08.2020

Народ нужна помощь.

Есть 5 дюймовый экран Nextion, ползунок h0, что надо добавить чтобы при движении ползунка изменялась яркость и показывала значение в цифрах с %. Ни как не получается и в инете ни чего не нашел. Какой код писать и куда прописывать

Kostochkin
Offline
Зарегистрирован: 17.12.2020

Я над слайдером (ползунком) добавлял текстовое поле, допустим t0.

В событиях слайдера Touch Release Event и Touch Move прописал:

if(h0.val==0)
{
  t0.txt="0%"
}else
{
  covx h0.val,t0.txt,0,0
  t0.txt=t0.txt+"%"
}

Это работает, если значение слайдера maxval=100 а minval=0. При других значениях требуется предварительное вычисление процентов в блоке else.

За яркость экрана отвечает системная переменная Nextion'а dim (задается в процентах от 0 до 100). https://nextion.tech/instruction-set/#s6

P.S. Можно без блока if - else (просто дернул из проекта, в блоке были вычисления).

covx h0.val,t0.txt,0,0
t0.txt=t0.txt+"%"

 

Igor424
Offline
Зарегистрирован: 20.08.2020

Есть вопрос

 

 

Igor424
Offline
Зарегистрирован: 20.08.2020
Народ нужна помощь.Срочно
 
Все сделал кроме одного "зумер".
Есть кнопка с точкой С0 (Radio) в Nextion Editor, а как сделать чтобы при нажатии любой клавиши
шел короткий звуковой сигнал звуковое подтверждение.
Как это прописать и где???
sadman41
Offline
Зарегистрирован: 19.10.2016

Кому прописать?

Igor424
Offline
Зарегистрирован: 20.08.2020

Народ помогите

Есть 5 дюймовый nextion NX8048T050_011 сенсорный,DS3231, Arduino nano.Все работает.Заливаю прошивку на нано.На порт мониторе часы и дата есть.На экран не выходит.Пробывал прописывать через FLProg результат 0.Ни чего не понимаю.В программировании ноль пытаюсь найти примеры.Нет ни чего.Помогите написать программу для Nextion HMI и FLP.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Как можно помочь написать программу тому, кто в программировании ничего не понимает?

Вы уж определитесь, чего именно Вы хотите:

- чтобы Вам помогли чему-то научиться,

- рабочую программу.

Igor424
Offline
Зарегистрирован: 20.08.2020

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

b707
Offline
Зарегистрирован: 26.05.2017

Igor424 пишет:

Кто действительно соображает в программировании ему труда не составит помочь написать программу.

а нафига "тому, кто соображает" - помогать писать программу неграмотному лентяю. который к тому же хамит на форуме?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Igor424 пишет:

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

Помочь копать яму можно только тому, кто сам копает яму.

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

Igor424
Offline
Зарегистрирован: 20.08.2020

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

Igor424
Offline
Зарегистрирован: 20.08.2020

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

Igor424
Offline
Зарегистрирован: 20.08.2020

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

b707
Offline
Зарегистрирован: 26.05.2017

Igor424 пишет:
Показывать видимость и я умею.

не умеешь. "В программировании - ноль"

Igor424
Offline
Зарегистрирован: 20.08.2020

Да в программировании я не умею. Зато то мне не мешат конструировать собирать и паять аппаратуру.Обидно когда просишь помощь тебя просто посылаю далеко копать яму..А для того чтобы учится нужно с чего то начинать. А выход на сайте одна болтавня.Реальной помощи нет

b707
Offline
Зарегистрирован: 26.05.2017

Igor424 пишет:
для того чтобы учится нужно с чего то начинать.

И с чего ты предлагаешь начинать, с тупых вопросов на форуме? - начинать надо с чтения учебников

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

Цитата:
Реальной помощи нет

ты какой "реальной помощи" ждешь? - готовый код? - ты выбрал для этого неудачный форум. тут так "помогать" не принято.