Как определить, какая плата 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 - это дало мне несколько хороших советов.
Клэр Макрей