Мой код создан с использованием raspberry pi pico и oled (ssd1306) и выглядит следующим образом:
from machine import Pin, I2C
from ssd1306 import SSD1306_I2C
import framebuf
width = 128
height = 64
i2c = I2C(1, scl=Pin(15), sda=Pin(14), freq=400000)
oled = SSD1306_I2C(width, height, i2c)
oled.fill(0)
oled.text("Hola perro", 5, 8)
oled.text("2022", 5, 18)
oled.show()
и ошибка:
Traceback (most recent call last):
File "<stdin>", line 12, in <module>
File "ssd1306.py", line 118, in __init__
File "ssd1306.py", line 37, in __init__
File "ssd1306.py", line 74, in init_display
File "ssd1306.py", line 123, in write_cmd
OSError: [Errno 110] ETIMEDOUT
И если я добавлю print(i2c.scan())
в свою программу, она покажет мне следующее:
>>> print(i2c.scan())
[]
У меня ваш код работает. Проблема была в номерах контактов. Числа, указанные в коде, должны быть номерами GPIO, а не физическими номерами контактов.
Итак, это сработало:
i2c = I2C(0, scl=Pin(21), sda=Pin(20), freq=400000)
с SCL на GP21 (физический контакт 27) и SDA на GP20 (физический контакт 26). Обратите внимание, что первый параметр моего кода равен 0, потому что я использую ноль I2C.
Пожалуйста, уточните вашу конкретную проблему или предоставьте дополнительную информацию, чтобы выделить именно то, что вам нужно. Поскольку сейчас написано, трудно точно сказать, о чем вы спрашиваете.