Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Освоение PSoC 6 Pioneer Board с IoT Add-On Shield: руководство разработчика

Введение

PSoC 6 — последнее дополнение к мощной серии процессоров PSoC от Cypress. PSoC 6 Pioneer IoT Add-On Shield — плата разработки для этой линейки, оснащенная встроенным отладчиком, Arduino-совместимыми заголовками, виджетами CapSense и многим другим, всё связано с процессором PSoC 6. Процессор — двухъядерный: Cortex-M0+ (низкое потребление) и Cortex-M4 (высокая производительность), объединенные через общие периферийные блоки и память.

Это руководство покажет, как начать работу с Pioneer Board, используя Pioneer Add-on Shield для расширения возможностей PSoC 6. Мы продемонстрируем обмен данными с Raspberry Pi через BLE и WiFi (с модулем XBee WiFi), а также взаимодействие между PSoC 4 BLE Pioneer Board и PSoC 6 Pioneer Board по BLE.

Необходимые материалы

Примеры рассчитаны на PSoC 6 Pioneer Kit, приобретаемый напрямую у Cypress или Digi-Key.

Также понадобится Pioneer Add-on Shield. Нужен модуль XBee WiFi. Есть несколько вариантов XBee WiFi в зависимости от конфигурации: Trace, RP-SMA с внешней антенной 2.4 ГГц или Wire. Проще всего взять XBee с проводной антенной.

Также требуется Raspberry Pi 3 Starter Kit. Он станет целью для связи от PSoC 6 Pioneer Board. Можно купить Pi 3 отдельно с макетной платой, перемычками, резисторами и светодиодами, но стартовый комплект — отличная сделка и стоит того.

Обзор железа

Рассмотрим детально особенности Pioneer Kit IoT Add-on Board.

Пример: WiFi к Raspberry Pi с использованием PSoC 6 Pioneer Kit

Пример демонстрирует отправку сигнала на Raspberry Pi через WiFi. Показывает, как обращаться к XBee WiFi модулю, межпроцессорное взаимодействие двух ядер PSoC 6, а также прием и разбор команд на Raspberry Pi.

Требуется некоторая настройка, давайте пройдемся по ней.

Настройка PSoC 6 Pioneer Kit: Железо

Сторона Pioneer Kit тривиальна: вставьте XBee WiFi модуль в Pioneer IoT Add-on Shield и установите щит в Arduino-заголовок Pioneer Kit Board.

Сторона Raspberry Pi требует больше объяснений. Нужно настроить и железо, и софт на Raspberry Pi.

Настройка PSoC 6 Pioneer Kit: Софт

Примечание: Поддержка PSoC 6 доступна только в Creator 4.2 или новее!

Программный проект для Pioneer Kit доступен на GitHub.

PSOC 6 PIONEER KIT SOFTWARE DOWNLOAD

После скачивания и распаковки откройте пример (XBee_WiFi_Example) в PSoC Creator.

Прежде всего, откройте файл «main_cm4.c» и внесите пару изменений. Найдете секцию кода:

char ssid[] = "your_ssid_here";
char rpi_ip[] = "raspi_ip_here";
char ssid_pw[] = "wifi_pw_here";
int dest_port = 5000;
char encrypt_mode = WPA2;

Очевидно, что нужно поменять эти настройки под свою сеть. encrypt_mode может быть WPA, WEP, WPA2 или (надеемся, нет!) NO_SECURITY. rpi_ip — это IPv4-адрес (например, «10.8.253.193»), который можно получить командой ifconfig в командной строке Raspberry Pi (см. ниже инструкции по открытию терминала) в разделе wlan0.

Для прошивки платы подключите её к ПК через входящий USB-A — USB-C кабель. Нажмите кнопку «Program» на панели инструментов для автоматической сборки и прошивки.

Может появиться окно с выбором целевого устройства для прошивки. Неважно, какой пункт выбрать под «KitProg2», оба прошьют флеш корректно.

Настройка Raspberry Pi: Железо

Сначала посмотрим, как подключено железо:

Как видите, мы подключили светодиод (с резистором 330 Ом) к пинам 3 (GPIO 2) и 6 (земля) Raspberry Pi. Это позволит переключать GPIO2 и видеть результат на светодиоде.

Настройка Raspberry Pi: Софт

Предполагаем, что у вас Raspberry Pi с последним Raspbian (полная установка, не lite), подключенный к клавиатуре, мыши, монитору и локальной WiFi сети. Если нет — настройте это за пару минут. Можно ознакомиться с нашим туториалом по настройке Pi.

Начнем с рабочего стола Raspberry Pi. Должен быть экран примерно такого вида:

Нужно нажать маленький логотип вверху экрана (показан ниже) для открытия командной строки. Дальше предполагаем, что терминал открыт.

Откроется окно командной строки. Это позволяет напрямую выполнять команды на Raspberry Pi.

Начнем с установки Flask. Flask — веб-фреймворк для Python, позволяющий создавать веб-фронтенд, запускающий Python-скрипты на бэкенде. Введите команду и нажмите Enter:

sudo pip install flask

Много текста пробежит, в конце Flask будет установлен.

Следующий шаг — установка нашего софта с GitHub:

git clone https://github.com/sparkfun/Flask_Tutorial
cd Flask_Tutorial
sudo python Flask_Tutorial/Python/app.py

Это запустит приложение и начнет слушать TCP/IP ввод от Pioneer board. Теперь можно включать/выключать светодиод на Raspberry Pi, нажимая кнопки D7 и D9 на IoT Shield. Классно!

Что происходит? Часть 1: Pioneer Kit

Посмотрим на PSoC 6 проект с высоты. В Workspace Explorer слева шесть записей верхнего уровня: схема («TopDesign.sch»), Design Wide Resources («XBee_WiFi_Example.cydwr»), исходники Cortex-M0+ («CM0p (Core 0)»), исходники Cortex-M4 («CM4 (Core 1)»), общие файлы («Shared Files») и сгенерированные IDE файлы («Generated_Source»).

Схема проста: пара светодиодов, пара переключателей и UART для передачи данных к/от XBee WiFi модуля. Светодиоды в текущей реализации не используются.

Пропустим содержимое .cydwr — там назначение пинов, генерация тактовых, константы конфигурации ядер.

Переходим к исходникам Cortex-M0+. Верхний уровень имеет пять записей: «Header Files», «Source Files» и три других файла. Нас интересует только «main_cm0p.c» — точка входа для кода на Cortex-M0+.

Как видно из структуры, есть два отдельных кодовых базиса для двух ядер. «main_cm0p.c» — точка входа для Cortex-M0+, который затем запускает Cortex-M4. Аналогичная структура для Cortex-M4.

В «Shared Files» большинство файлов автогенерированы, кроме «ipc_common.c» и «ipc_common.h» — хелперы для межпроцессорного взаимодействия, разработанные для проекта.

Файл main_cm0p.c

Этот файл обрабатывает всю активность Cortex-M0+: мониторинг двух кнопок и отправку сигнала Cortex-M4 при нажатии.

Однако это не так просто, так как Cortex-M4 должен очищать сигнал после обработки, что означает доступ нескольких процессов к одним данным. При множественных процессах, работающих с одними данными, нужно учитывать коллизии записи. Что если один процесс меняет данные, пока другой тоже их меняет? Для решения используем систему защищенных чтений и записей, настроенную в файлах «ipc_common».

Для понимания нужно знать концепцию IPC-канала. IPC-каналы используют семафоры для записи данных из одного процесса в другой с гарантией отсутствия коллизий между ядрами. В начале выполнения каждого ядра нужно установить конечные точки для IPC-каналов. Рассмотрим две строки:

IPC_STRUCT_Type *D9IpcHandle;
D9IpcHandle = Cy_IPC_Drv_GetIpcBaseAddress(7);

Первая создает указатель на структуру, описывающую характеристики IPC-канала. Вторая устанавливает её на конкретное местоположение в памяти — системный IPC-канал 7. Каналы 0-6 зарезервированы системой.

Далее нужно сообщить другому ядру, какой адрес памяти ассоциирован с этим IPC-каналом:

while(Cy_IPC_Drv_SendMsgPtr(D9IpcHandle, CY_IPC_NO_NOTIFICATION, &D9Button) != CY_IPC_DRV_SUCCESS);

D9Button — переменная, настроенная ранее. Вызов в цикле while, чтобы повторять до подтверждения получения информации другим процессом (кодом на Cortex-M4). Также ждем освобождения блокировки переменной, указывая, что Cortex-M4 закончил чтение указателя.

while(Cy_IPC_Drv_IsLockAcquired(D9IpcHandle));

Затем входим в бесконечный цикл приложения, где кастомные функции ReadSharedVar() и WriteSharedVar() обновляют общие переменные, коммуницирующие статус кнопок с другим ядром. Разберем их позже.

Файл main_cm4.c

В main() Cortex-M4 повторяем те же операции по настройке IPC-канала:

IPC_STRUCT_Type *D9IpcHandle;
D9IpcHandle = Cy_IPC_Drv_GetIpcBaseAddress(7);

После завершения вызываем код для «перехвата» сообщения, отправленного из Cortex-M0+, содержащего адрес общей переменной:

while (Cy_IPC_Drv_ReadMsgPtr(D9IpcHandle, (void *)&D9Button) != CY_IPC_DRV_SUCCESS);

Опять в while для ожидания отправки сообщения от Cortex-M0+. Затем освобождаем блокировку IPC-канала, чтобы Cortex-M0+ знал, что может продолжить и использовать канал в будущем. Не нужно в while, так как вызов однократный — разблокировка происходит сразу.

Cy_IPC_Drv_LockRelease(D9IpcHandle, CY_IPC_NO_NOTIFICATION);

После настраиваем XBee WiFi shield для доступа к локальной сети. Код не дублируем, он хорошо задокументирован в примере.

В бесконечном цикле приложения снова вызываем ReadSharedVar() и WriteSharedVar() для доступа к переменным статуса кнопок, общим с Cortex-M0+. Посмотрим, что делают эти функции.

Read More Info……

Using the PSoC 6 Pioneer Board with the Pioneer IoT Add-on Shield

Производственный процесс

  1. Интеграция метеостанции с CWOP: практическое руководство
  2. Интеграция импульсного радара Acconeer A111 с Raspberry Pi: практическое руководство
  3. Начало работы с IoT и MQTT: урок без кода для ESP8266
  4. Создание умного робота с Bridge Shield — интеграция Raspberry Pi и Arduino
  5. Расширение GoPiGo v2 на Windows 10 IoT Core для Raspberry Pi 3
  6. Раскрытие силы визуальных данных в IoT-экосистеме
  7. IoT революционизирует полевой сервис: предиктивное обслуживание и выше ROI
  8. Как умные города используют IoT, микросервисы и дашборды для эффективного управления активами
  9. IoT World: внутри Big-Data решения Vertica для IoT-аналитики
  10. Платформа Lumada ИоТ Hitachi: объединение промышленных инсайтов для умного производства