Как отправить команду для переключения страницы на Smart Display через пользовательский CAN протокол
Вступление
Для продвижения продуктов SmartDisplay мы понимаем, что связь по CAN может быть реализована с использованием различных протоколов, включая CANopen и пользовательские протоколы с собственными CAN ID. CANopen - это стандартизированный протокол, который определяет профили обмена данными, профили устройств и модели объектов для разных типов устройств. Он предоставляет стандартизированный способ настройки, мониторинга и управления устройствами на шине CAN.
С другой стороны, пользовательский протокол CAN ID часто используется, когда устройства на шине CAN имеют уникальные характеристики или требования, которые не покрываются существующими стандартными протоколами. Пользовательские протоколы могут предоставлять большую гибкость и эффективность по сравнению со стандартными протоколами.
Введение
Эта статья служит руководством для начинающих и энтузиастов, которые интересуются использованием платы Arduino, щита CAN шины и датчиков для управления устройствами с использованием пользовательского CAN ID. В ней представлен обзор аппаратных компонентов, использованных в проекте, подробно рассмотрены функциональные возможности программы и обсуждается, как переключать страницы Smart Display 7" с помощью пользовательского CAN ID.
Независимо от того, являетесь ли вы начинающим или опытным разработчиком, эта статья является ценным ресурсом, который поможет вам понять основы использования этих компонентов для управления устройствами и процесса смены страниц с помощью пользовательского CAN ID. К концу статьи у вас будет прочное основание для изучения более сложных проектов с использованием платы Arduino, щита CAN шины и пользовательского протокола CAN ID.
Рис. 1 "Схема блока системы"
Основными компонентами, используемыми в этом проекте, являются плата Arduino с Arduino IDE v2.0.4 и щит CAN шины. Щит CAN шины - это расширительная плата, которая предоставляет интерфейс шины CAN для платы Arduino. Щит использует CAN-контроллер MCP2515 и CAN-трансивер MCP2551 для обмена данными с другими устройствами, подключенными к шине CAN.
Для демо нам потребуются следующие компоненты :- 7”- дюймовый Smart Display.
- ARDUINO Mega 2560.
- Щит CAN шины для ARDUINO Mega 2560.
- Донгл CAN шины.
- Сенсорная физическая кнопка.
- Светодиод (LED).
- Программное обеспечение GUI-Builder версии 0.4.2 или выше.
Демонстрация будет поделена на три этапа :
- Проектровка дизайна в GUI Builder.
- Сборка и загрузка проекта.
- Программирование хоста Arduino.
Проектировка дизайна в GUI Builder
Для начала нужно запустить программу для создания графического интерфейса (GUI builder), создать новый проект и ввести имя проекта. Далее выберите модель подключаемого дисплея и выберите протокол "пользовательский CAN ID". По умолчанию ориентация экрана будет в альбомном режиме. Выберите пустой шаблон пользовательского интерфейса (UI template) и нажмите кнопку "Create" для создания нового проекта, как показано на рис. 2.
Рис. 2
После нажатия на «create» должен открыться интерфейс GUI Builder
Рис. 3
Согласно демо-сценарию, требуется добавить еще одну страницу.
Для этого нажмите на «Page», а затем на «+» для создания 2 страницы.
Рис. 4
Стиль фона можно изменить нажав на «Resource» в верхней части панели, и выбрав подраздел «Background», который находится слевой стороны.
Рис. 5
Стиль фона также можно изменить в разделе «Page info».
Рис. 6
Создание и загрузка проекта
Когда все предыдущие шаги выполнены, и создан дизайн макета, пришло время создать проект. Перейдите в раздел “Device” и выберите “Device Property”. Затем выберите настройки по умолчанию для скорости передачи данных (baud rate) или выберите их в соответствии с вашими требованиями. Рекомендуется установить одинаковое значение скорости передачи данных (baud rate) как в вашем коде Arduino, так и в средстве для создания графического интерфейса (GUI builder). Далее нажмите кнопку “Upload” для загрузки проекта, как показано на рисунке ниже:
Рис. 7
По окончании процесса загрузки, нажмите кнопку «ОК»:
Рис. 8
По завершении процесса загрузки должен появиться стартовый экран:
Рис. 9
После стартового экрана произойдет переход на страницу с загруженным дизайном. Теперь процесс создания и загрузки завершен через средство для создания графического интерфейса (GUI builder), как показано на рис. 10:
Рис. 10
Программирование хоста Arduino
Библиотека "mcp2515_can.h" используется только для реализации пользовательских протоколов CAN ID. Библиотека "SPI.h" используется исключительно для взаимодействия по последовательному периферийному интерфейсу (SPI). Библиотека mcp2515_can.h облегчает взаимодействие с контроллером MCP2515 CAN (Controller Area Network), который является широко используемым контроллером CAN для встроенных систем. Эта библиотека предоставляет функции для инициализации MCP2515, настройки параметров CAN-коммуникации (например, скорости передачи данных, настройки фильтра и маски), передачи и приема сообщений CAN и проверки ошибок. В программе Arduino IDE все необходимые адреса регистров определены, как показано на рисунке 11. Этот сегмент кода инициализирует различные глобальные переменные, константы и массивы с соответствующими типами данных, которые затем используются в коде.
Рис. 11
Этот сегмент кода представляет собой функцию setup(), которая вызывается один раз при запуске программы. Для последовательной связи с монитором используется инициализация с битовой скоростью 115200 с помощью Serial.begin(). Встроенный светодиод на пине 13 устанавливается как выход с использованием pinMode(). Физический пин кнопки устанавливается как вход с помощью pinMode(). Для инициализации контроллера CAN MCP2515 используется цикл while. Функция CAN.begin() вызывается с аргументом скорости передачи данных CAN_250KBPS.
Рис. 12
Здесь функция changePageFunction() отправляет команды в MCP2515 для переключения режимов отображения. Для этого она отправляет сообщения с определенными байтами данных в MCP2515. Сначала функция отправляет команду "режим устройства" для перевода MCP2515 в режим конфигурации, затем отправляет команду "изменить страницу" с номером желаемой страницы и, наконец, отправляет еще одну команду "режим устройства" для переключения MCP2515 обратно в режим отображения.
Рис. 13
Этот сегмент кода представляет собой функцию loop(), которая выполняется повторно после вызова функции setup(). Функция считывает напряжение с физической кнопки с помощью analogRead() и сохраняет его в переменной buttonValue. Если buttonValue больше значения THRESHOLD, это означает, что физическая кнопка нажата. В этом случае функция увеличивает переменную nowPage на 1 и выводит текущее значение nowPage в монитор последовательного порта с использованием sprintf() и Serial.println(). Затем функция вызывает changePageFunction() с текущим значением nowPage для переключения на желаемую страницу отображения. Если значение nowPage не равно 0, встроенный светодиод на пине 13 включается с использованием digitalWrite(). В противном случае светодиод выключается. Переменная lastDebounce обновляется текущим временем с использованием millis(), чтобы отслеживать время последнего нажатия кнопки. Функция ожидает, пока физическая кнопка не будет отпущена, непрерывно считывая buttonValue с использованием analogRead() внутри цикла while. И, наконец, инструкция delay(100) в конце функции вводит задержку в 100 мс перед повторным выполнением функции. Эта задержка обеспечивает разумный интервал между отправкой сообщений по шине CAN.
Рис. 14
Дополнительные сведения можно найти в коде Arduino. Важно учесть адрес для подключения хоста к смарт-дисплею. Если вы хотите узнать больше о способе взаимодействия между хостом и смарт-дисплеем через CAN-шину, пожалуйста, обратитесь к журналу взаимодействия GUI builder.
Appendix:Set Up the Project
После успешной проверки и загрузки программы через Arduino IDE, можно начать демонстрацию. Нажимая на физические кнопки или сенсорные кнопки, можно включить светодиод и изменить цвет индикатора на зеленый. Когда индикатор отображает красный цвет и светодиод выключен, это означает, что ни физическая кнопка, ни сенсорная кнопка не нажаты. Как показано на рис. 15:
Рис. 15
Чтобы скачать вышеуказанную программу и получить больше подробностей о данном демо-проекте, пожалуйста перейдите по ссылке на GitHub (https://bit.ly/3oT0o5M)
Рис. 16
Заключение
В кратком изложении, с использованием платы Arduino и контроллера CAN MCP2515, мы легко можем управлять SmartDisplay с помощью физической кнопки. Этот фрагмент кода демонстрирует, как отправлять команды в MCP2515 для переключения режимов отображения и как считывать напряжение с физической кнопки для активации этих команд. Эту систему можно расширить, добавив другие функции, такие как дополнительные кнопки, датчики или другие периферийные устройства. MCP2515 и плата Arduino предоставляют гибкую и простую в использовании платформу для различных приложений, от автомобильной промышленности до промышленной автоматизации и умного дома.