Я думаю, что @ 0andriy прав. Вам нужен драйвер, библиотека для его сопряжения (подробнее в «официальной» пользовательской документации для libiio ), с привязками python в вашем случае и некоторой конфигурацией. В пользовательском пространстве вы можете использовать mraa / upm, но его нет в вашей Ubuntu, поэтому вам нужно его собрать.
Предложенный ответ - использовать драйвер в ядре, создать небольшую таблицу acpi, которая сообщает ядро, какое устройство найти по адресу 0x23 на шине 5. А затем вы используете привязки python-libiio
или libiio
C ++ для доступа к устройству. Примеры таблиц ACPI, которые можно загрузить в ядро (подсказка: через ConfigFS), приведены здесь https://github.com/westeri/meta-acpi/tree/master/recipes-bsp/acpi-tables/samples.
В вашем случае это будет что-то вроде:
DefinitionBlock ("bh1750.aml", "SSDT", 5, "", "BH1750", 1)
{
External (_SB_.PCI0.I2C5, DeviceObj) // Define Correct I2C controller
Scope (\_SB.PCI0.I2C5)
{
Device (ALS0)
{
Name (_HID, "PRP0001")
Name (_DDN, "ROHM BH1750FVI ambient light sensor")
Name (_CRS, ResourceTemplate () {
I2cSerialBus (
0x23, // I2C Address
ControllerInitiated,
400000, // Bus Speed
AddressingMode7Bit,
"\\_SB.PCI0.I2C5",
0x00,
ResourceConsumer,,)
}
Name (_DSD, Package () {
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
Package () {
Package () {"compatible", "rohm,bh1750"},
}
})
}
}
}
... при условии, что путь к контроллеру равен \\_SB_.PCI0.I2C5
(вы можете найти его в DSDT).
Ссылки @ 0andriy приведены в комментариях, т.е. добавление Клиентские устройства i2 c на x86_64 , Сборка контроллера устройств i2 c и spidev Linux на плате Intel Atom содержит дополнительную информацию о том, как скомпилировать и подключить приведенная выше таблица для вашей системы.