Arduino Mega. Проблемы с Nextion.

Тема в разделе "Arduino & Shields", создана пользователем Texnovik, 2 окт 2018.

  1. Texnovik

    Texnovik Нуб

    Только начал разбираться с 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(); - ничего не возвращает.
     
  2. DIYMan

    DIYMan Guest

    Открою страшную тайну - работа с 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!");
    Написал за минуту.
     
  3. Texnovik

    Texnovik Нуб

    Рад за Вас ! Но я же написал - отправить не проблема. Можно и без библиотек. Получить проблема :)

    Со своей проблемой разобрался. В библиотеке nextion-master следует отключить использование SoftSerial (оно там по умолчанию). Использовать штатные UART порты на Mega.
    Соотвествено и в скетче использовать Serial1..3 вместо SoftSerial

    ....а еще я забыл инициализировать порт myNextion.init(); :)
     
    Последнее редактирование: 2 окт 2018
  4. DIYMan

    DIYMan Guest

    Получить - тоже не проблема, 5 минут написать. Впрочем, не буду настаивать.
     
  5. Mitrandir

    Mitrandir Гуру

    В библиотеке нет ничего плохого.
    Протокол элементарный, но зачем изобретать велосипед?
     
  6. ИгорьК

    ИгорьК Гуру

    С даташитом разобраться 15 минут, он простой как три рубля.
    Курить библиотеку и примеры - куда дольше. На порядок. Я изучал этот вопрос.
     
    parovoZZ и DIYMan нравится это.
  7. Mitrandir

    Mitrandir Гуру

    Для типовых задач там есть примеры.сварганить себе скетч из них несложно.
    Если задача не типовая, то да проще самому парсить протокол
     
  8. DIYMan

    DIYMan Guest

    Да там того протокола - кот наплакал. Половину его имплементации я, по сути, привёл выше. Могу другую половину накидать, код будет не сильно больше.

    Проблема, пмсм, в том, что скоро для моргания светодиодом библиотека появится. Ах да - помнится, уже...
     
    parovoZZ нравится это.
  9. ИгорьК

    ИгорьК Гуру

    Уже: http://wiki.amperka.ru/js:button
     
  10. Texnovik

    Texnovik Нуб

    Господа, я же написал "Только начал разбираться с Arduino..."... Я пару неделю назад только первый раз в жизни программируемый контроллер руки взял :))) До этого слово программирование относил только к веб и базам данных :) Взял Ардуино и экранчик чисто побаловаться, Набрал в интернет запрос Arduino Nextion... Чего там выстветилось, то и тыкаю :) В общем, огромное спасибо за советы ! Буду ковырять дальше.
     
  11. vvr

    vvr Инженерище

    гуру, вспомните, что в области знаний-умений, в которой вы стали специалистами, сами когда то были новичками и чайниками))))
     
  12. ИгорьК

    ИгорьК Гуру

    Не было такого. Сразу.
     
    Daniil и vvr нравится это.
  13. vvr

    vvr Инженерище

  14. ИгорьК

    ИгорьК Гуру

    Совет ТС. Раз интернеты программировал - код писать умеешь. Взялся за МК - читай даташит наперво.
    Прочитать всего миллион страниц и будет просветление.
     
  15. Mitrandir

    Mitrandir Гуру

    О да. Библиотеки вендора для нубов. Мы напишем свою. С блекджеком и музыкой. Недаром вы написали свой код внутри функции.


    У нас на работе в системе есть десяток модулей. Каждый модуль относительно независим дёргая другие через апи. Каждый модуль разрабатывала своя команда разработчиков. Так вот. немцы так же рассудили: зачем нам библиотека для работы с календарем. Ведь прибавить месяц к дате это всего лишь пара десятков строк кода. В результате каждый модуль породил функцию прибавления месяца к дате. Открываешь справочник и на тебя смотрит десяток фунцкций add_month_to_date
     
  16. ИгорьК

    ИгорьК Гуру

    Друже, ты, конечно, прав. Но Некстион - это не тот случай.
    ИМХО.
     
    DIYMan нравится это.
  17. DIYMan

    DIYMan Guest

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

    Ок, если тебе так понятней: можно обозвать пару функций - библиотекой. И я тебе их напишу и платформоненависимо в рамках Wiring, и потоконезависимо - сможет даже из файла читать пакеты от "Nextion", и в файл же их писать, при этом оставаясь работоспособным как с любым Serial*, так и с любым другим *Serial, да и вообще - с любым наследником Stream.

    ТС я писал в таком ключе только с одной целью: дать понять, что это не тот случай, когда можно тащить всякую кривоту в проект: раз изучаем ардуину - как раз удобный случай вникнуть в один из принципов общения двух устройств, благо принцип этот - простейший. Если бы речь шла про MQTT - не посоветовал бы подобного, ибо там - на порядок сложнее.
     
  18. Texnovik

    Texnovik Нуб

    А что там такого страшного в этой библиотеке ? Библиотечка простенькая и, практические дублирует всё, что самому писать пришлось бы. Можно самому переписать, если нужно, как угодно. Смысл в изобретении лисапета какой тогда ? :)
     
  19. Mitrandir

    Mitrandir Гуру

    У библиотеки есть ряд минусов:
    1. Она накладывает ограничения на архитектуру приложения
    2. Вопрос, покрывает ли она все потребности и возможности взаимодействия с экраном
    3. Она ест место на флеше
    4. возможны баги вендора
    5. библиотека ест место в озу
    Ничего ужасного в использовании библиотеки нет.