Только начал разбираться с Arduino... Такая ситуация... Подключил к Arduino мониторчик Nextion. Использую простенькую библиотеку nextion-master Сделал простенький проект в NextionEditor. Собственно кнопка и текстовое поле. Для кнопки в событии Toutch Press Event поставил галку Send Component ID (хотя, пробовал и в User Code написать print "1"). Далее, в скетче пробую myNextion.setComponentText("t0", "Read messages..."); Всё Ок - текстовое поле на мониторе высвечивает Read messages..., а вот функция String message = myNextion.listen(); в теле loop скетча не получает ничего, т.е. тыкание по кнопке ничего не дает. message всегда пустое. (пробую его вывести в монитор Serial.print(message). Так однозначно работает (кнопка конопается). Что не так делаю ? Три часа уже бьюсь как рыба об лёд и никакого толку. Все примеры, что нашел в Интернет перечитал и перепробовал - пофиг. myNextion.listen(); - ничего не возвращает.
Открою страшную тайну - работа с Nextion не требует никаких таких специальных "библиотек" - там до тривиальности простейший формат пакета. При желании разобраться - на полчаса, сэкономите два с половиной часа времени Любой пакет Nextion - это набор байт, оканчивающийся тремя байтами 0xFF. Читаем во внутренний буфер, и как только в его хвосте появятся три байта 0xFF - перед ними лежит содержимое пакета. Что и как в пакете "закодировано" - есть тут: https://www.itead.cc/wiki/Nextion_Instruction_Set#Format_of_Device_Return_Data Отправлять же пакет - тоже проще простого. На вашем примере и условии, что Nextion подключён к Serial1: Код (C++): void sendComponentText(const char* name, const char* text) { Serial1.print(name); Serial1.print(F(".txt=\"")); Serial1.print(text); Serial1.print('"'); for(uint8_t i=0;i<3;i++) Serial1.write(0xFF); } ....... sendComponentText("t0","Hello!"); Написал за минуту.
Рад за Вас ! Но я же написал - отправить не проблема. Можно и без библиотек. Получить проблема Со своей проблемой разобрался. В библиотеке nextion-master следует отключить использование SoftSerial (оно там по умолчанию). Использовать штатные UART порты на Mega. Соотвествено и в скетче использовать Serial1..3 вместо SoftSerial ....а еще я забыл инициализировать порт myNextion.init();
С даташитом разобраться 15 минут, он простой как три рубля. Курить библиотеку и примеры - куда дольше. На порядок. Я изучал этот вопрос.
Для типовых задач там есть примеры.сварганить себе скетч из них несложно. Если задача не типовая, то да проще самому парсить протокол
Да там того протокола - кот наплакал. Половину его имплементации я, по сути, привёл выше. Могу другую половину накидать, код будет не сильно больше. Проблема, пмсм, в том, что скоро для моргания светодиодом библиотека появится. Ах да - помнится, уже...
Господа, я же написал "Только начал разбираться с Arduino..."... Я пару неделю назад только первый раз в жизни программируемый контроллер руки взял )) До этого слово программирование относил только к веб и базам данных Взял Ардуино и экранчик чисто побаловаться, Набрал в интернет запрос Arduino Nextion... Чего там выстветилось, то и тыкаю В общем, огромное спасибо за советы ! Буду ковырять дальше.
гуру, вспомните, что в области знаний-умений, в которой вы стали специалистами, сами когда то были новичками и чайниками))))
Совет ТС. Раз интернеты программировал - код писать умеешь. Взялся за МК - читай даташит наперво. Прочитать всего миллион страниц и будет просветление.
О да. Библиотеки вендора для нубов. Мы напишем свою. С блекджеком и музыкой. Недаром вы написали свой код внутри функции. У нас на работе в системе есть десяток модулей. Каждый модуль относительно независим дёргая другие через апи. Каждый модуль разрабатывала своя команда разработчиков. Так вот. немцы так же рассудили: зачем нам библиотека для работы с календарем. Ведь прибавить месяц к дате это всего лишь пара десятков строк кода. В результате каждый модуль породил функцию прибавления месяца к дате. Открываешь справочник и на тебя смотрит десяток фунцкций add_month_to_date
Ну вот только не надо путать тёплое с мягким, плз. В обсуждаемом случае, если посмотреть спецификацию, то станет предельно ясно, что никаких таких библиотек - не надо. Если тебе надо унификации и внешнее использование - пару функций в отдельный файл - и всё. Протокол там как два пальца, понимаешь? А "библиотеки", которые под Nextion выложены официалами - унылое г, унылей некуда, чесслово. Считать, что официалы - боги в области программирования - такое себе, знаешь ли. Ок, если тебе так понятней: можно обозвать пару функций - библиотекой. И я тебе их напишу и платформоненависимо в рамках Wiring, и потоконезависимо - сможет даже из файла читать пакеты от "Nextion", и в файл же их писать, при этом оставаясь работоспособным как с любым Serial*, так и с любым другим *Serial, да и вообще - с любым наследником Stream. ТС я писал в таком ключе только с одной целью: дать понять, что это не тот случай, когда можно тащить всякую кривоту в проект: раз изучаем ардуину - как раз удобный случай вникнуть в один из принципов общения двух устройств, благо принцип этот - простейший. Если бы речь шла про MQTT - не посоветовал бы подобного, ибо там - на порядок сложнее.
А что там такого страшного в этой библиотеке ? Библиотечка простенькая и, практические дублирует всё, что самому писать пришлось бы. Можно самому переписать, если нужно, как угодно. Смысл в изобретении лисапета какой тогда ?
У библиотеки есть ряд минусов: Она накладывает ограничения на архитектуру приложения Вопрос, покрывает ли она все потребности и возможности взаимодействия с экраном Она ест место на флеше возможны баги вендора библиотека ест место в озу Ничего ужасного в использовании библиотеки нет.