MicroPython继承失败

时间:2019-04-13 16:31:07

标签: micropython

我试图通过I2C将PyBoard(我不确定硬件版本,但运行的是uPython 1.9.3)连接到基于SSD1306的LED显示屏。

物理连接有效,我可以建立I2C连接,查看设备,并验证该连接在I2C连接上可读。

但是,我无法使用uPython Github中的ssd1306模块。我可以很好地导入模块,但是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

这似乎是虚假的(我已经确保输入了必需的widthheightexternal_vcc。我很确定问题出在{ {1}}调用-但是它是uPython,因此在初始化程序中进行打印调试似乎无效。

我在几个地方读到,uPython在调用闭包时往往会发出有关缺少参数的错误消息,但这只是模糊地类似。我尝试为super()调用添加一个显式的self,以防万一,但这也不起作用。因此,我有些受阻,欢迎在下一步正确的调试中提供建议。

1 个答案:

答案 0 :(得分:0)

问题似乎出在版本不匹配。至少,在uPython github上此文件的先前版本中,该类不继承自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代码即可。