kizniche / Mycodo

An environmental monitoring and regulation system
http://kylegabriel.com/projects/
GNU General Public License v3.0
2.89k stars 486 forks source link

Error with I2C OLED: NameError 'DigitalInOut' is not defined in spi_device.py #1384

Closed milw closed 1 month ago

milw commented 1 month ago

Mycodo 8.15.13, Adafruit 1.3" OLED SSD1306 128 x 64 (stemma/kwiik) I2c address 0x3d Pi 5 running Linux mymycodo 6.6.28+rpt-rpi-2712 #1 SMP PREEMPT Debian 1:6.6.28-1+rpt1 (2024-04-22) aarch64 Proximate error in the log is that 'LCD is not set up'. Further up in the log, it appears that initialization fails due to the 'DigitalInOut' name not defined, in an SPI related file. The device does show up in the I2C bus 1 map at 0x3d as expected, but I haven't tested the (new) OLED on another system yet. I'm not sure why it is trying to load an SPI related file when it's running on I2C?

(clip from further down in this portion of error log: File "/opt/Mycodo/env/lib/python3.11/site-packages/adafruit_bus_device/spi_device.py", line 76, in SPIDevice chip_select: Optional[DigitalInOut] = None, ^^^^^^^^^^^^ NameError: name 'DigitalInOut' is not defined"

2024-06-02 10:18:44,903 - ERROR - mycodo.function.display_ssd1306_oled_128x64_i2c_cdf9d6ad - Error initializing, trying again in 5 seconds: name 'DigitalInOut' is not defined Traceback (most recent call last): File "/opt/Mycodo/mycodo/abstract_base_controller.py", line 57, in try_initialize self.initialize() File "/opt/Mycodo/mycodo/functions/display_ssd1306_oled_128x64_i2c.py", line 378, in initialize from mycodo.devices.lcd_pioled_circuitpython import PiOLEDCircuitpython File "/opt/Mycodo/mycodo/devices/lcd_pioled_circuitpython.py", line 5, in <module> import adafruit_ssd1306 File "/opt/Mycodo/env/lib/python3.11/site-packages/adafruit_ssd1306.py", line 17, in <module> from adafruit_bus_device import i2c_device, spi_device File "/opt/Mycodo/env/lib/python3.11/site-packages/adafruit_bus_device/spi_device.py", line 29, in <module> class SPIDevice: File "/opt/Mycodo/env/lib/python3.11/site-packages/adafruit_bus_device/spi_device.py", line 76, in SPIDevice chip_select: Optional[DigitalInOut] = None, ^^^^^^^^^^^^ NameError: name 'DigitalInOut' is not defined 2024-06-02 10:18:49,906 - ERROR - mycodo.function.display_ssd1306_oled_128x64_i2c_cdf9d6ad - Error initializing, trying again in 5 seconds: name 'DigitalInOut' is not defined Traceback (most recent call last): File "/opt/Mycodo/mycodo/abstract_base_controller.py", line 57, in try_initialize self.initialize() File "/opt/Mycodo/mycodo/functions/display_ssd1306_oled_128x64_i2c.py", line 378, in initialize from mycodo.devices.lcd_pioled_circuitpython import PiOLEDCircuitpython File "/opt/Mycodo/mycodo/devices/lcd_pioled_circuitpython.py", line 5, in <module> import adafruit_ssd1306 File "/opt/Mycodo/env/lib/python3.11/site-packages/adafruit_ssd1306.py", line 17, in <module> from adafruit_bus_device import i2c_device, spi_device File "/opt/Mycodo/env/lib/python3.11/site-packages/adafruit_bus_device/spi_device.py", line 29, in <module> class SPIDevice: File "/opt/Mycodo/env/lib/python3.11/site-packages/adafruit_bus_device/spi_device.py", line 76, in SPIDevice chip_select: Optional[DigitalInOut] = None, ^^^^^^^^^^^^ NameError: name 'DigitalInOut' is not defined 2024-06-02 10:18:54,909 - ERROR - mycodo.function.display_ssd1306_oled_128x64_i2c_cdf9d6ad - Initialization errored 3 times; giving up. Maybe the following traceback can help diagnose the issue. Traceback (most recent call last): File "/opt/Mycodo/mycodo/abstract_base_controller.py", line 57, in try_initialize self.initialize() File "/opt/Mycodo/mycodo/functions/display_ssd1306_oled_128x64_i2c.py", line 378, in initialize from mycodo.devices.lcd_pioled_circuitpython import PiOLEDCircuitpython File "/opt/Mycodo/mycodo/devices/lcd_pioled_circuitpython.py", line 5, in <module> import adafruit_ssd1306 File "/opt/Mycodo/env/lib/python3.11/site-packages/adafruit_ssd1306.py", line 17, in <module> from adafruit_bus_device import i2c_device, spi_device File "/opt/Mycodo/env/lib/python3.11/site-packages/adafruit_bus_device/spi_device.py", line 29, in <module> class SPIDevice: File "/opt/Mycodo/env/lib/python3.11/site-packages/adafruit_bus_device/spi_device.py", line 76, in SPIDevice chip_select: Optional[DigitalInOut] = None, ^^^^^^^^^^^^ NameError: name 'DigitalInOut' is not defined 2024-06-02 10:18:54,909 - INFO - mycodo.controllers.controller_function_cdf9d6ad - Activated in 10069.4 ms 2024-06-02 10:18:54,910 - ERROR - mycodo.function.display_ssd1306_oled_128x64_i2c_cdf9d6ad - LCD not set up

milw commented 1 month ago

apologies, 'code' formatting didn't work s expected. Here's plain text log file: 2024-06-02 10:18:44,903 - ERROR - mycodo.function.display_ssd1306_oled_128x64_i2c_cdf9d6ad - Error initializing, trying again in 5 seconds: name 'DigitalInOut' is not defined Traceback (most recent call last): File "/opt/Mycodo/mycodo/abstract_base_controller.py", line 57, in try_initialize self.initialize() File "/opt/Mycodo/mycodo/functions/display_ssd1306_oled_128x64_i2c.py", line 378, in initialize from mycodo.devices.lcd_pioled_circuitpython import PiOLEDCircuitpython File "/opt/Mycodo/mycodo/devices/lcd_pioled_circuitpython.py", line 5, in import adafruit_ssd1306 File "/opt/Mycodo/env/lib/python3.11/site-packages/adafruit_ssd1306.py", line 17, in from adafruit_bus_device import i2c_device, spi_device File "/opt/Mycodo/env/lib/python3.11/site-packages/adafruit_bus_device/spi_device.py", line 29, in class SPIDevice: File "/opt/Mycodo/env/lib/python3.11/site-packages/adafruit_bus_device/spi_device.py", line 76, in SPIDevice chip_select: Optional[DigitalInOut] = None, ^^^^^^^^^^^^ NameError: name 'DigitalInOut' is not defined 2024-06-02 10:18:49,906 - ERROR - mycodo.function.display_ssd1306_oled_128x64_i2c_cdf9d6ad - Error initializing, trying again in 5 seconds: name 'DigitalInOut' is not defined Traceback (most recent call last): File "/opt/Mycodo/mycodo/abstract_base_controller.py", line 57, in try_initialize self.initialize() File "/opt/Mycodo/mycodo/functions/display_ssd1306_oled_128x64_i2c.py", line 378, in initialize from mycodo.devices.lcd_pioled_circuitpython import PiOLEDCircuitpython File "/opt/Mycodo/mycodo/devices/lcd_pioled_circuitpython.py", line 5, in import adafruit_ssd1306 File "/opt/Mycodo/env/lib/python3.11/site-packages/adafruit_ssd1306.py", line 17, in from adafruit_bus_device import i2c_device, spi_device File "/opt/Mycodo/env/lib/python3.11/site-packages/adafruit_bus_device/spi_device.py", line 29, in class SPIDevice: File "/opt/Mycodo/env/lib/python3.11/site-packages/adafruit_bus_device/spi_device.py", line 76, in SPIDevice chip_select: Optional[DigitalInOut] = None, ^^^^^^^^^^^^ NameError: name 'DigitalInOut' is not defined 2024-06-02 10:18:54,909 - ERROR - mycodo.function.display_ssd1306_oled_128x64_i2c_cdf9d6ad - Initialization errored 3 times; giving up. Maybe the following traceback can help diagnose the issue. Traceback (most recent call last): File "/opt/Mycodo/mycodo/abstract_base_controller.py", line 57, in try_initialize self.initialize() File "/opt/Mycodo/mycodo/functions/display_ssd1306_oled_128x64_i2c.py", line 378, in initialize from mycodo.devices.lcd_pioled_circuitpython import PiOLEDCircuitpython File "/opt/Mycodo/mycodo/devices/lcd_pioled_circuitpython.py", line 5, in import adafruit_ssd1306 File "/opt/Mycodo/env/lib/python3.11/site-packages/adafruit_ssd1306.py", line 17, in from adafruit_bus_device import i2c_device, spi_device File "/opt/Mycodo/env/lib/python3.11/site-packages/adafruit_bus_device/spi_device.py", line 29, in class SPIDevice: File "/opt/Mycodo/env/lib/python3.11/site-packages/adafruit_bus_device/spi_device.py", line 76, in SPIDevice chip_select: Optional[DigitalInOut] = None, ^^^^^^^^^^^^ NameError: name 'DigitalInOut' is not defined 2024-06-02 10:18:54,909 - INFO - mycodo.controllers.controller_function_cdf9d6ad - Activated in 10069.4 ms 2024-06-02 10:18:54,910 - ERROR - mycodo.function.display_ssd1306_oled_128x64_i2c_cdf9d6ad - LCD not set up

milw commented 1 month ago

Also just found this post in the forums and will try this, since its very recent: https://forum.radicaldiy.com/t/lcd-initialization-issue/1845

milw commented 1 month ago

This may be resolved by edits I made in adafruit_ssd1306.py as described here. https://forum.radicaldiy.com/t/lcd-initialization-issue/1845/5 Will try to attach my edited file here; I do have it working now with the 8 line function on i2c. Nope, can't attach a py file here apparently.