Как определить, какая плата HAT или GPIO подключена - если есть?


8

Я настраиваю некоторые Raspberry Pis для использования в демонстрациях перед коллегами, чтобы продемонстрировать возможности самого Pi и некоторых доступных дополнительных плат.

Я действительно хотел бы иметь возможность поддерживать один сценарий cron-job / start-up для всех возможных демонстраций, которые я настраиваю, и чтобы этот сценарий определял, какая HAT или более старая плата GPIO подключена, чтобы я мог запустить соответствующий демонстрационный скрипт / программа.

Например,

  • Если SenseHAT прикреплен, то автоматически запускайте Sense HAT Marble Maze
  • Если подключен Display-O-Tron HAT, то автоматически запустите пример меню
  • Если подключен экран PiTFT, автоматически запустите слайд-шоу с фотографиями

Есть ли способ запустить Python, sh или аналогичный, чтобы определить, какая из некоторых распространенных плат GPIO подключена к Pi?

Вещи, которые я рассмотрел:

  • Использование информации из Pinout.xyz для определения используемых контактов, но это звучит как большая работа.

Обратите внимание, что мое намерение состоит в том, чтобы автоматически определять конфигурацию, без необходимости подключать клавиатуру, ssh или что-то подобное - отсюда и желание автоматического обнаружения, и почему что-то вроде установки переменной среды не поможет.


1
Я думаю, что это возможно с шляпами, так как они содержат эпром, используемый для настройки. Вероятно, вы можете определить остальное с помощью некоторого сценария оболочки и посмотреть, что сообщают dmesg, lsusb и т. Д. Вы также можете рассмотреть возможность установки переменной окружения, которую вы изменяете при замене аппаратного обеспечения.
— Стив Робиллард

@ SteveRobillard, все ли шляпы поставляются с эпромом? Разве они не наращиваются? Если так, то как тогда несколько eprom рассматриваются отдельно?
— Ганима

@ SteveRobillard Спасибо за предложение. Я уточнил свой вопрос, чтобы попытаться сказать, почему установка переменных среды (и любое другое взаимодействие с клавиатурой) не будет работать. Я не слышал о dmesg и lsusb. Погуглив их, я указал « Знай своего малинового пи», который тоже выглядит неплохо
— Клэр Макрэй

@Ghanima Я был бы очень рад решить это для случая с одной шляпой, и не беспокоиться о том, чтобы сложить их!
— Клэр Макрэй

Хорошего чтения: github.com/raspberrypi/hats
— Ghanima

Ответы:


5

Прочитав очень полезные предыдущие комментарии и ответы от Стива Робилларда и Ганимы :

/ Proc / устройства дерево / шлем / продукт

Если /proc/device-tree/hat/productсуществует, у вас есть присоединенный и загруженный HAT - и этот файл содержит имя HAT.

Вот несколько примеров выходных данных:

Display-o-Tron HAT

cat /proc/device-tree/hat/product
Display-o-Tron HAT

Имена и содержимое всех файлов /proc/device-tree/hat/для этого устройства:

name: hat
product: Display-o-Tron HAT
product_id: 0x0007
product_ver: 0x0001
uuid: 666dfe9b-9d78-4825-bbfe-1697048fc6cd
vendor: Pimoroni Ltd.

Adafruit PiTFT Plus - 3,5 дюйма

cat /proc/device-tree/hat/product
Adafruit PiTFT Plus - 3.5 inch Resistive

Имена и содержимое всех файлов /proc/device-tree/hat/для этого устройства:

name: hat
product: Adafruit PiTFT Plus - 3.5 inch Resistive Touch
product_id: 0x0000
product_ver: 0x0000
uuid: 684cdc28-d27f-4065-9d11-bb3f3463786d
vendor: Adafruit Industries

Обновление: 2018-05-17

Некоторые устройства продаются как HAT, но не имеют EEPROM с допустимым BLOB-объектом данных, и в этом случае невозможно определить тип «HAT», поскольку он не соответствует спецификации HAT.

Обновление: 2020-01-07

Я создал репозиторий github со сценарием для получения данных о тех HAT, к которым у меня был доступ, и для записи тех, которые на самом деле не являются HAT:

https://github.com/claremacrae/raspi_hat_data

Запросы на извлечение приветствуются - просто запустите copy_hat_data.shскрипт в этом репо.


1
Рад, что это хорошо работает для вас! Спасибо за реальное содержимое дерева устройств. Это, безусловно, помогает лучше понять проблему.
— Ганима

Это все еще работает! Проблема, которую вы указали на github, была просто ошибка пользователя.
— Пол Слокум

Спасибо @PaulSlocum - я обновил это и сделал репо об этом более очевидным .... Если вы попробуете это на любых HAT, для которых у меня нет данных, я был бы очень признателен за добавление этого ... Позвольте я знаю, если вам нужно больше информации ....
— Клэр Макрей

Я получаю точно /sys/firmware/devicetree/base/hatтакую же информацию, если на RPi есть шляпа. Какой из них рекомендуется?
— тестировщик

4

Срывая SteveRobillards отличный комментарий:

Используйте I2C EEPROM от HAT

В Raspberry Pi Блог точки для спецификации HAT на GitHub , где и документацию и программные средства ( eepromutils) для манипуляции доступны.

README.md :

Идентификатор EEPROM содержит данные, которые идентифицируют плату, сообщают B +, как нужно устанавливать GPIO и какое оборудование находится на плате. Это позволяет дополнительной плате автоматически идентифицировать и настроить программное обеспечение Pi во время загрузки, включая загрузку всех необходимых драйверов.

Информация о HAT отражается в дереве устройств, /proc/device-tree/hatкоторое может быть прочитано из пространства пользователя любым из упомянутых способов (python, sh, ...).

Обратите внимание, что в стеке нет шляп * (на блог Raspberry Pi ):

Стекируемые HAT-компоненты, представленные в обсуждении спецификации, но в конечном итоге были выброшены из-за значительного увеличения сложности автоконфигурации и возможной ошибки пользователя.

Таким образом, в любой момент времени будет подключен только один HAT, будет считана его EEPROM и предоставлена ​​информация в дереве устройств.


* Можно создавать составные шляпы, если они относятся к одному и тому же типу и, таким образом, не требуют многократной и разной идентификации, например, 16-канальный ШИМ / Серво HAT Adafruit для Raspberry Pi .


@steverobillard, извините, не удержался.
— Ганима

3
Нет проблем, пока пользователь получает ответ - это все, что имеет значение.
— Стив Робиллард

Большое спасибо @SteveRobillard и Ghanima - это дало мне несколько хороших советов.
— Клэр Макрей
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.