NBVV, я так понимаю, это что-то с установкой или версией питона связано. Чего-то не хватает. Я с данной версией библиотеки не работаю, но ради интереса сейчас повторил Ваш эксперимент. У меня тоже так не работает, но ошибки другие:
>>> from lite import * Traceback (most recent call last): File "<stdin>", line 1, in <module> File "d:\projects\distiller\trunk\soft\untested\oldbean_0.4.1.3\lite_0413\lite.py", line 32, in <module> import os, select, tty, termios File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.2544.0_x64__qbz5n2kfra8p0\lib\tty.py", line 5, in <module> from termios import * ModuleNotFoundError: No module named 'termios'
Версия питона установлена 3.9.9, пробовал на компьютере под Windows
NBVV
Специалист
Новосибирск
135 2
Отв.2301 30 Дек. 21, 07:30 (через 12 мин)
Дело в том, что smbus уже встречался несколько раз в строках более ранних чем 1212, и там не было ругани.
ekochnev
Магистр
Екатеринбург
214 55
Отв.2302 30 Дек. 21, 07:32 (через 3 мин)
Сейчас на малинке попробовал, правда с подключенным крейтом, там нет ругани
Если крейт отключить и запускать на чистой малинке, то выдает вот это:
Python 3.7.3 (default, Dec 20 2019, 18:57:59) [GCC 8.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from lite import * Не обнаружено ни одно i2c устройство. Возможно, проблемы с шиной i2c (проверьте ее: i2cdetect -y 1)
Добавлено через 40мин.:
Дело в том, что smbus уже встречался несколько раз в строках более ранних чем 1212, и там не было ругани.NBVV, 30 Дек. 21, 07:30
Это совершенно ничего не значит. Питон - это интерпретирующий язык. И если строки синтаксически верны, но еще фактически не выполнялись, то на них и не будет ругаться. Ругнулось когда фактически дошло до попытки выполнения строки с отсутствующим модулем, и не важно при этом где она физически находится в тексте.
NBVV
Специалист
Новосибирск
135 2
Отв.2303 30 Дек. 21, 14:07
На малинке у Вас 3.7.3 python,а у меня 3.9.2 - может тута))? Проблема в том, что я в питоне "0". Я его спешно изучаю, но не поспеваю...
sig
Кандидат наук
Ростов-на-Дону
307 141
Отв.2304 30 Дек. 21, 17:36
На малинке у Вас 3.7.3 python,а у меня 3.9.2 - может тута))?NBVV, 30 Дек. 21, 14:07
Вряд-ли. У меня на стационарном компе (Fedora-34) под python-3.9.9 тоже >>> from lite import * Не обнаружено ни одно i2c устройство. Возможно, проблемы с шиной i2c (проверьте ее: i2cdetect -y 1)
Правда, сначала ругнулась на отсутствие модуля smbus. Пришлось сделать pip install smbus
NBVV
Специалист
Новосибирск
135 2
Отв.2305 31 Дек. 21, 03:23
И я сделал pip install smbus, но ничего не изменилось:
i@raspberrypi:~ $ pip install smbus Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple Collecting smbus Downloading https://www.piwheels.org/...inux_armv7l.whl (39 kB) Installing collected packages: smbus Successfully installed smbus-1.1.post2 pi@raspberrypi:~ $ cd /home/pi/Desktop/Amrita/lite_0413 pi@raspberrypi:~/Desktop/Amrita/lite_0413 $ python3 Python 3.9.2 (default, Mar 12 2021, 04:06:34) [GCC 10.2.1 20210110] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from lite import * Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/pi/Desktop/Amrita/lite_0413/lite.py", line 1212, in <module> bus = smbus.SMBus(1) FileNotFoundError: [Errno 2] No such file or directory >>>
OldBean
Доцент
Красноярск
1K 1.4K
Отв.2306 31 Дек. 21, 04:51
И я сделал pip install smbus, но ничего не изменилось:NBVV, 31 Дек. 21, 03:23
Попробуйте
pip3 install smbus
Просто pip это для 2-го питона. С наступающим Новым годом, уважаемые коллеги!!! Ненавязчивая автоматизация ректификационной установки. Автоматика.
sig
Кандидат наук
Ростов-на-Дону
307 141
Отв.2307 01 Янв. 22, 13:52
Попробуйте pip3 install smbus Просто pip это для 2-го питона.OldBean, 31 Дек. 21, 04:51
Это верное замечание (просто у меня нет в системе 2-го Питона). Но проблема явно не в отсутствии модуля smbus. Ругается не на его отсутствие - ModuleNotFoundError: No module named 'smbus' а на попытку использования - bus = smbus.SMBus(1) FileNotFoundError: [Errno 2] No such file or directory
Поэтому, скорее всего нет служебного файла /dev/i2c-1 Т.е. подсистема i2c не включена в конфиге ядра. Делаем sudo raspi-config выбираем пункт меню Interface Options затем выбираем I2C Enable. Перегружаемся. Это же можно сделать и из графики - почитай https://www.abelectronics.co.uk/...-raspbian-linux Там еще и скорость по I2C надо настраивать в /boot/config.txt
Всех с новым 2022 годом! Ненавязчивая автоматизация ректификационной установки. Автоматика. А тем временем теме исполнилось 5 лет!!!
OldBean
Доцент
Красноярск
1K 1.4K
Отв.2308 01 Янв. 22, 16:12
Но проблема явно не в отсутствии модуля smbus.sig, 01 Янв. 22, 13:52
Возможно.
Но, конечно, в любом случае начать нужно с низкоуровневых вещей: 1) включения шины i2c (в Raspberry Pi OS - это меню Параметры->Raspberry Pi Configuration, панель Interfaces, включить опцию I2C "Enable"), 2) установки i2c-tools (если, конечно, не установлен: sudo apt install i2c-tools), 3) списка активных i2c-шин (i2cdetect -l) и 4) получения списка устройств на конкретной i2c-шине (например, на 1-й: i2cdetect -y 1). И уже только после этих действий, имеет смысл разбираться что не так с библиотекой smbus.
А тем временем теме исполнилось 5 лет!!!sig, 01 Янв. 22, 13:52
И вправду... Можно сказать - маленький юбилей! Ох, как быстро время-то летит!!! Ненавязчивая автоматизация ректификационной установки. Автоматика.
NBVV
Специалист
Новосибирск
135 2
Отв.2309 03 Янв. 22, 02:15
Выполнил 4 пункта от OldBean (после второго малинка сказала, что I2C уже установлен), затем: pip3 install smbus и все получилось:
Не обнаружено ни одно i2c устройство. Возможно, проблемы с шиной i2c (проверьте ее: i2cdetect -y 1)
Спасибо)!
Добавлено через 4ч. 55мин.:
Подключаю датчики 18B20. OldBean писал: "Ну и конечно, для длинной шины 1-Wire желательно использовать витые пары (категории 5), как это отмечается в этом же документе. Подключение витых пар, как советует коллега makh, можно выполнить следующим образом: одна пара - "питание-земля", вторая - "сигнальная линия - земля". Вопрос: земля рядом с датчиком висит в воздухе или как-то пытаться коннектить ее на колонну?
Добавлено через 31мин.:
Да, и что значит длинная шина? У меня максимальная длина между датчиком и хабом будет 4 метра. Но датчиков планирую 10-15 шт. Нужна витая пара на такой длине?
OldBean
Доцент
Красноярск
1K 1.4K
Отв.2310 03 Янв. 22, 10:26
Вопрос: земля рядом с датчиком висит в воздухе или как-то пытаться коннектить ее на колонну?NBVV, 03 Янв. 22, 02:15
Для большей помехоустойчивости сетей 1-Wire, рекомендуется использовать витые пары. Их можно сделать самому, но удобнее купить сетевые 4-проводные кабели (две витые пары) 5 категории для Ethernet. Лучше многожильные и экранированные (пример). Но если уровень электромагнитных помех невелик (как, например, в обычной квартире где нет постоянной сварки или фазовых регуляторов ну шибко мощных нагрузок :), то можно и обычные неэкранированные кабели. Ну и если не гнуть провода сильно часто, то пойдут и одножильные пары. По одной витой паре пускаем +5V (питание датчиков) и землю. По второй витой паре пускаем - сигнальную линию (1-Wire) и землю. Это нужно для компенсации наводок как по питанию, так и по сигнальной линии. Обе земли с одной стороны цепляются к земляной линии хаба (или крейта), а с другой стороны обе земляные линии цепляем к земляному выводу датчика. Подсоединять эти (сигнальные) земли к колонне не нужно.
У меня максимальная длина между датчиком и хабом будет 4 метра. Но датчиков планирую 10-15 шт. Нужна витая пара на такой длине?NBVV, 03 Янв. 22, 02:15
Уже желательна.
NBVV
Специалист
Новосибирск
135 2
Отв.2311 09 Янв. 22, 14:41
И вновь у меня затык. Подключил малинку к крейту, в котором только одна плата с BMP 180. Вроде I2C ее видит. 2022-01-09-111126_1024x768_scrot. Ненавязчивая автоматизация ректификационной установки. Автоматика.
При импорте lite выдает:
pi@raspberrypi:~ $ cd /home/pi/Desktop/Amrita/49123.349793/lite_0413 pi@raspberrypi:~/Desktop/Amrita/49123.349793/lite_0413 $ python3 Python 3.9.2 (default, Mar 12 2021, 04:06:34) [GCC 10.2.1 20210110] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from lite import * Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/pi/Desktop/Amrita/49123.349793/lite_0413/lite.py", line 1314, in <module> exec(cinit) # Выполним код cinit, чтобы сформировать функцию finit() File "<string>", line 1 def finit(): ^ IndentationError: expected an indented block >>>
Что предпринять?
Добавлено через 22мин.:
Добавил плату хаба, его тоже I2C видит, но далее также ругается на строку 1314.
ekochnev
Магистр
Екатеринбург
214 55
Отв.2312 09 Янв. 22, 17:23
Версия питона установлена 3.9.9, пробовал на компьютере под Windowsekochnev, 30 Дек. 21, 07:18
Информация просто на заметку: Сейчас немного покопался с софтом, оказывается процитированное выше я делал совершенно напрасно. Библиотека lite.py абсолютно несовместима с версией питона для Windows из-за использования модуля termios, которого в принципе не существует для платформы Windows ни для какой версии питона. Так что только юникс-подобные системы. Хотя логи, генерируемые малинкой, я просматриваю всегда только на Windows-компьютере, тоже питоновским скриптом. Хотел и разработку-отладку рабочих скриптов туда же перенести...
OldBean
Доцент
Красноярск
1K 1.4K
Отв.2313 09 Янв. 22, 18:40
Что предпринять?NBVV, 09 Янв. 22, 14:41
В генерируемой "на лету" функции cinit производится инициализация всех исполнительных устройств. А у Вас оказались подключенными к шине только датчики. Поэтому функция получилась "пустая". Т.е. - только объявление функции. Без тела. Это приводит к ошибке интерпретатора питона, когда он пытается выполнить такую "недоделанную" функцию. В следующей версии библиотеки я вставлю туда затычку (пустой оператор pass) для таких ситуаций, но сейчас Вы это можете сделать сами следующим образом. Замените строку 1307 в файле библиотеки lite.py v.0413
cinit = 'def finit():\n' # Начало строки кода инициализации режима мониторинга
на такую:
cinit = 'def finit():\n pass\n' # Начало строки кода инициализации режима мониторинга
Два пробела внутри обязательны (!) Теперь даже если к крейту не будет подключено ни одного исполнительного устройства, то все равно в теле функции будет хотя бы один оператор (в данном случае пустой: pass) и интерпретатор перестанет ругаться.
Совсем без исполнительных устройств мне как-то не приходило в голову тестировать библиотеку lite. Поэтому спасибо за обнаруженную ошибку!
NBVV
Специалист
Новосибирск
135 2
Отв.2314 13 Янв. 22, 13:13
Следующая остановка)). Все платы на шине I2C малинка определяет корректно. Затык в том, что у меня воткнуто в крейт три модуля PDM, а малинка находит только один:
0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- 13 -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- pi@raspberrypi:~ $ cd /home/pi/Desktop/Amrita/lite_0413 pi@raspberrypi:~/Desktop/Amrita/lite_0413 $ python3 Python 3.9.2 (default, Mar 12 2021, 04:06:34) [GCC 10.2.1 20210110] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from lite import * >>> print(hinfo()) Список устройств, обнаруженных на шине i2c и хабах: w0 13_8_A3 PDM-контроллер [65541.5535, 255, 255]
Сначала, подумал, что два модуля неисправны, но тосуя их пришел к выводу, что исправны все.
ekochnev
Магистр
Екатеринбург
214 55
Отв.2315 13 Янв. 22, 13:15 (через 3 мин)
А вы прошивки для каждого индивидуальные сделали или у всех одинаковые адреса?
NBVV
Специалист
Новосибирск
135 2
Отв.2316 13 Янв. 22, 14:22
Одинаковые.
Добавлено через 5мин.:
Только эту строку изменить: #define ADDR 0x13 // Адрес устройства на шине I2C ?
ekochnev
Магистр
Екатеринбург
214 55
Отв.2317 13 Янв. 22, 14:28 (через 6 мин)
Да, каждой плате нужно дать свой адрес
NBVV
Специалист
Новосибирск
135 2
Отв.2318 13 Янв. 22, 15:32
Адрес любой из свободных (к примеру 0x16 и 0x17 ) или тоже есть тонкости?
ekochnev
Магистр
Екатеринбург
214 55
Отв.2319 13 Янв. 22, 15:51 (через 20 мин)
NBVV, главное чтобы не перекрывалось с другими платами, иначе будут конфликты. Вы посмотрите по текстам прошивок, где что используется по-умолчанию, на вскидку по памяти это: 0х11 - RMS (Детектор нуля) 0х12 - Relay (Контактор) 0х13 - PDM (Контроллер ТЭН) 0х14 - PWM (Контроллер клапана отбора) 0х15 - Hub (Хаб температурных и прочих датчиков) 0х19 - Servo (Сервопривод) 0x76 - BMP280 (Датчик давления) 0x77 - BMP180 (Датчик давления) В принципе повторным устройствам можно давать любые не занятые номера. Лично я для однотипных устройств увеличиваю старший разряд оставляя младший таким же, например, у меня работают два контактора с адресами 0х12 и 0х22, планируется третий контактор 0х32, а также два клапана 0х14 и 0х24. Тогда старший разряд как бы всегда показывает порядковый номер устройства, а младший - его тип, мне так самому удобнее.