Наследование Micropython терпит неудачу

Я пытаюсь подключить PyBoard (я не уверен в аппаратной версии, но на ней работает uPython 1.9.3) к светодиодному дисплею на основе SSD1306 через I2C.

Физическое соединение работает, и я могу установить соединение I2C, увидеть устройство и убедиться, что оно доступно для чтения в соединении I2C.

Однако я не могу использовать модуль ssd1306 из uPython. Гитхаб. Я могу нормально импортировать модуль, но класс SSD1306 не инициализируется. Код, который терпит неудачу, таков:

class SSD1306(framebuf.FrameBuffer):
    def __init__(self, width, height, external_vcc):
        self.width = width
        self.height = height
        self.external_vcc = external_vcc
        self.pages = self.height // 8
        self.buffer = bytearray(self.pages * self.width)
        super().__init__(self.buffer, self.width, self.height, framebuf.MONO_VLSB)
        self.init_display()

Сообщение об ошибке всегда

TypeError: function missing 1 required positional arguments

который кажется ложным (я определенно убедился, что передал требуемые width, height и external_vcc. Я почти уверен, что проблема в вызове super() - но это uPython, поэтому отладка печати внутри инициализатора не работает не похоже на работу.

Я читал в нескольких местах, что uPython имеет тенденцию выдавать плохие сообщения об ошибках об отсутствующих параметрах при вызове закрытия, но это лишь отдаленно похоже на это. На всякий случай я попытался добавить явное self в вызов super().__init__(), но это тоже не сработало. Так что я немного застрял и буду рад совету о правильном следующем шаге для отладки.


person theodox    schedule 13.04.2019    source источник


Ответы (1)


Похоже, проблема в несоответствии версии. По крайней мере, в предыдущей версии этого файла на гитхабе uPython класс не наследуется от FrameBuffer, а вместо этого поддерживает внутренний. В коде есть комментарий по этому поводу:

    # Provide methods for accessing FrameBuffer graphics primitives. This is a
    # workround because inheritance from a native class is currently unsupported.
    # http://docs.micropython.org/en/latest/pyboard/library/framebuf.html

Итак, я думаю, что проблема заключалась в несоответствии версий платы 1.9.3 и копии драйвера 1.9.4. Возврат к коду 1.9.3 работает.

person theodox    schedule 13.04.2019