Микропифон наследуется неудачно - PullRequest
1 голос
/ 13 апреля 2019

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

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

Однако я не могу использовать модуль ssd1306 из uPython Github . Я могу нормально импортировать модуль, но класс 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 имеет тенденцию выдавать плохие сообщения об ошибках о пропущенных параметрах при вызове замыкания, но это только смутно похоже на это. Я попытался добавить явное «я» к вызову super().__init__() на всякий случай, но это тоже не сработало. Так что я немного застрял и хотел бы получить совет относительно правильного следующего шага отладки.

1 Ответ

0 голосов
/ 13 апреля 2019

Похоже, проблема в несовпадении версий.По крайней мере, в предыдущей версии этого файла на github 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 работает.

...