Использование PSoC 6 Pioneer Board с Pioneer IoT Add-on Shield
Введение
PSoC 6 - последнее дополнение к серии мощных процессоров Cypress PSoC. 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 и платой PSoC 6 Pioneer через BLE.
Необходимые материалы
Примеры в этом руководстве предназначены для использования с комплектом PSoC 6 Pioneer Kit, который можно приобрести непосредственно у Cypress или Digi-Key.
Очевидно, вам также понадобится Pioneer Add-on Shield. Вам также понадобится модуль Wi-Fi XBee. В зависимости от вашей настройки существует несколько вариантов XBee WiFi:Trace, разъем RP-SMA с внешней антенной 2,4 ГГц или провод. Проще всего получить XBee с проводной антенной.
Вам также понадобится стартовый комплект Raspberry Pi 3. Это станет вашей целью для общения с PSoC6 Pioneer Board. Вы, конечно, можете просто приобрести Pi 3 отдельно вместе с макетной платой, перемычками, резисторами и светодиодами, но мы считаем, что стартовый комплект - это исключительная сделка, и ее стоит приобрести.
Обзор оборудования
Давайте подробно рассмотрим особенности дополнительной платы Pioneer Kit IoT.
Слот для карты MicroSD - Контакты этого слота соответствуют периферийному устройству SPI на большинстве плат, совместимых с Arduino, включая плату PSoC 6 BLE Pioneer.
Заголовок XBee - Этот заголовок имеет интервал, позволяющий принять стандартный размер XBee. Он совместим со всеми официальными модулями XBee.
Коннектор Qwiic - Этот соединитель добавляет поддержку всех модулей Qwiic SparkFun. Он обеспечивает 3,3 В.
Разъем питания MicroB USB - Линии передачи данных на этом разъеме ни к чему не подключены. Он обеспечивает 5 В для регулятора 3,3 В для модуля XBee, перекрывая 5 В, поступающие из разъема Arduino, и позволяет модулям XBee высокой мощности (например, сотовым, Wi-Fi или моделям Pro) работать должным образом.
Кнопки D7 и D9 - Две пользовательские кнопки, привязанные к контактам D7 и D9 (P0.2 и P13.1 на PSoC 6 или P1.0 и P0.4 на PSoC 4 BLE).
Регулятор 3,3 В - Импульсный регулятор мощности 3,3 В с возможностью подачи до 1,5 А, в зависимости от мощности источника питания на входе. Питается от источника питания 5 В на выводах Arduino или разъеме питания MicroB. Подает питание только на заголовок XBee.
Буфер сдвига уровня - Преобразует с понижением частоты из сигналов 5 В в сигналы 3,3 В. Позволяет использовать плату в системах 3,3 В или 5 В.
Схема сдвига уровня I2C - При необходимости преобразует сигналы I2C с 3,3 В в 5 В.
Перемычка выбора источника питания - Выбирает уровень, на который преобразуется схема сдвига уровня I2C. По умолчанию установлено значение 3,3 В . . Установите 5 В для использования с системами 5 В. Платы PSoC 4 и PSoC 6 Pioneer BLE имеют напряжение 3,3 В . системы.
Светодиод XBee DIO5 - DIO5 по умолчанию выполняет некоторые полезные функции, особенно на модуле WiFi, где он показывает подключение к настроенной сети Wi-Fi.
Пример:Wi-Fi для Raspberry Pi с использованием комплекта PSoC 6 Pioneer
В этом примере показано, как отправить сигнал на Raspberry Pi через Wi-Fi. Он покажет вам, как получить доступ к модулю XBee WiFi, межпроцессное взаимодействие между двумя ядрами PSoC 6, а также как получать и анализировать команды с помощью Raspberry Pi.
Для следования этому примеру потребуется некоторая настройка, поэтому давайте рассмотрим это сейчас.
Настройка комплекта Pioneer для PSoC 6:оборудование
Боковая установка Pioneer Kit тривиальна:вставьте модуль XBee WiFi в Pioneer IoT Add-on Shield и вставьте экран в заголовок Arduino платы Pioneer Kit Board.
Сторона Raspberry Pi требует дополнительных пояснений. Вам потребуется установить на Raspberry Pi некоторое оборудование и программное обеспечение.
Настройка комплекта Pioneer для PSoC 6:программное обеспечение
Примечание. Поддержка PSoC 6 доступна только в Creator 4.2 или новее!Программный проект для Pioneer Kit доступен на GitHub.
ЗАГРУЗИТЬ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ PSOC 6 PIONEER KIT
После того, как вы скачали и извлекли файл куда-нибудь, вы можете открыть пример (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 - это четырехугольник с точками (например, «10.8.253.193»), который можно получить, набрав « ifconfig »В командном окне на Raspberry Pi (инструкции по открытию командного окна см. Ниже) и глядя на« wlan0 ».
Чтобы запрограммировать плату, подключите ее к компьютеру с помощью прилагаемого кабеля USB-A - USB-C. Затем нажмите кнопку «Программа» на панели инструментов (как показано ниже), чтобы автоматически построить проект и запрограммировать плату.
Вы можете получить окно, как показано ниже, с просьбой выбрать цель для программирования. Неважно, какую запись вы выберете в списке «KitProg2», любой из них правильно запрограммирует вспышку.
Настройка Raspberry Pi:оборудование
Во-первых, давайте посмотрим, как подключено оборудование:
Как видите, мы подключили светодиод (с резистором 330 Ом) к контактам 3 (GPIO 2) и 6 (земля) Raspberry Pi. Это позволит нам переключать GPIO2 и видеть результат на светодиодном индикаторе.
Настройка Raspberry Pi:программное обеспечение
Мы предполагаем, что у вас есть Raspberry Pi, на котором установлена последняя версия Raspbian (полная установка, а не облегченная версия), и что он подключен к клавиатуре, мыши, монитору и локальной сети Wi-Fi. Если это нет дело, пожалуйста, уделите несколько минут, чтобы это настроить. Вы можете ознакомиться с нашим руководством по настройке Pi здесь.
Начнем с рабочего стола Raspberry Pi. У вас должен появиться экран, который выглядит примерно так:
Вам нужно будет щелкнуть маленький логотип в верхней части экрана (как показано ниже), чтобы открыть командную строку. В оставшейся части этого руководства предполагается, что у вас открыта эта командная строка.
Это откроет окно командной строки. Это позволяет указать Raspberry Pi напрямую выполнять команды.
Начнем с выполнения команды для установки Flask. Flask - это веб-фреймворк для Python, который позволяет вам создать веб-интерфейс, который довольно просто запускает сценарии Python на сервере. Введите следующую команду и нажмите «Enter».
sudo pip install flask
В окне командной строки произойдет много всего, и в конце Flask будет установлен на вашем Raspberry Пи.
Следующим шагом будет установка программного обеспечения, которое мы написали для поддержки этого проекта с GitHub. Для этого используется команда
git clone https://github.com/sparkfun/Flask_Tutorial
Опять же, вы увидите прокрутку текста в командной строке, и когда приглашение вернется, это будет быть вашим признаком того, что процесс установки завершен. После этого введите следующую команду:
sudo python Flask_Tutorial / Python / app.py
Это запустит приложение и начнет прослушивать ввод по TCP / IP с платы Pioneer. Теперь вы должны иметь возможность включать и выключать светодиод, подключенный к Raspberry Pi, нажимая кнопки D7 и D9 на IoT Shield. Отлично!
Так что здесь происходит? Pt. 1. Комплект Pioneer
Давайте посмотрим, что именно происходит, начиная с высокоуровневого обзора программного проекта PSoC 6. Посмотрите на фрейм Workspace Explorer в левой части экрана. Мы пройдемся по этому кадру, выделив важные файлы и их отношение к проекту в целом.
Вам сложно увидеть Workspace Explorer? Щелкните изображение, чтобы рассмотреть его поближе.
На верхнем уровне проекта имеется шесть записей:схема (« TopDesign.sch »), Общие ресурсы для дизайна (« XBee_WiFi_Example.cydwr »), Исходные файлы, связанные с ядром Cortex-M0 + (« CM0p (Core 0) »), Исходные файлы, связанные с ядром Cortex-M4 (« CM4 (Core 1) »), Файлы, которые будут совместно использоваться двумя (« Общие файлы ») И файлы поддержки, созданные в среде IDE (« Generated_Source ”).
Схема для этого проекта очень проста, в ней есть пара светодиодов, пара переключателей и UART, используемый для передачи данных в модуль XBee WiFi и обратно. Светодиоды фактически не используются в текущей реализации проекта.
Мы пропустим содержимое .cydwr файл. Этот файл содержит назначения контактов для сигналов, используемых в схеме, генерацию тактовых импульсов и константы конфигурации ядра. Если вы хотите исследовать это подробнее, не стесняйтесь немного покопаться. Многие из них не требуют пояснений.
Двигаясь вниз по списку, мы достигаем исходных файлов Cortex-M0 +. Обратите внимание, что на верхнем уровне этого поддомена есть пять записей:«Заголовочные файлы», «Исходные файлы» и три других файла. Нам нужно только заботиться о содержимом поддоменов «Заголовочные файлы» и «Исходные файлы», и, по сути, только один файл в них:« main_cm0p.c " файл. Здесь находится функция main () для кода, выполняемого на процессоре Cortex-M0 +.
Как вы, возможно, догадались по структуре рабочей области, для двух разных ядер работают две совершенно разные кодовые базы. « main_cm0p.c ”Является точкой входа для кода ядра Cortex-M0 +, а затем это ядро запускает ядро Cortex-M4. Для ядра Cortex-M4 существует аналогичный субдомен с аналогичными файлами, и, опять же, нам нужно беспокоиться только о субдоменах «Заголовочные файлы» и «Исходные файлы».
Наконец, у нас есть раздел «Общие файлы». Большинство этих файлов создается автоматически, за исключением « ipc_common.c »И« ipc_common.h ”Файлы. Эти файлы являются помощниками для межпроцессного взаимодействия, разработанными для этого проекта.
Главный файл Cortex-M0 +
Теперь, когда мы выделили важное содержание, давайте посмотрим на важные части кода, по одному файлу за раз, начиная с « 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. Мы используем канал 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 () обрабатывают обновление общих переменных, которые сообщают статус кнопки с другим ядром. Мы поговорим об этих функциях позже.
Главный файл Cortex-M4
В функции main () Cortex-M4 мы повторяем некоторые из тех же операций, что и в функции Cortex-M0 + main (), относительно настройки канала 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 + знал, что он может продолжить работу и использовать канал IPC в будущем. Нет необходимости заключать это в цикл while (), потому что он имеет открытый конец:вызов нужно выполнить только один раз, чтобы снять блокировку, в отличие от проверки того, что блокировка была снята, что необходимо повторять до тех пор, пока блокировка снята.
Cy_IPC_Drv_LockRelease (D9IpcHandle, CY_IPC_NO_NOTIFICATION);
Как только все это будет завершено, мы должны настроить XBee WiFi Shield для доступа к нашей локальной сети. Мы не будем дублировать здесь весь этот код, так как он хорошо задокументирован в примере.
В бесконечном цикле, в котором выполняется код приложения, мы снова вызываем пользовательские функции ReadSharedVar () и WriteSharedVar () для доступа к переменным, содержащим статус кнопки, которые совместно используются ядром Cortex-M0 +. Давайте подробнее рассмотрим, что делают эти функции.
Узнать больше ……
Использование PSoC 6 Pioneer Board с Pioneer IoT Add-on Shield
Производственный процесс
- Присоединяйтесь к IOT со своей метеостанцией - CWOP
- Использование импульсного радиолокационного датчика A111 с Raspberry Pi
- Легкий старт в мир IoT с MQTT
- Робот, использующий Raspberry Pi и Bridge Shield
- GoPiGo v2 с Windows IoT
- Возможность интеграции визуальных данных с IoT
- В пути с IoT
- Секреты инфраструктуры Интернета вещей с умным городом
- Мир Интернета вещей:день из жизни с Vertica
- С предложениями платформы Lumada IoT Hitachi соединяет точки