我试图通过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
这似乎是虚假的(我已经确保输入了必需的width
,height
和external_vcc
。我很确定问题出在{ {1}}调用-但是它是uPython,因此在初始化程序中进行打印调试似乎无效。
我在几个地方读到,uPython在调用闭包时往往会发出有关缺少参数的错误消息,但这只是模糊地类似。我尝试为super()
调用添加一个显式的self,以防万一,但这也不起作用。因此,我有些受阻,欢迎在下一步正确的调试中提供建议。
答案 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代码即可。