4

我尝试使用WiringPi 在树莓派上的2004 液晶显示器上定义一个新字符(大写的德语变音符号“Ä”)lcdCharDef()

这是我的代码

import wiringpi2 as wiringpi

# Ä
cap_umlaut_a = [
    int('0b01010', 2),
    int('0b00100', 2),
    int('0b01010', 2),
    int('0b10001', 2),
    int('0b11111', 2),
    int('0b10001', 2),
    int('0b10001', 2),
    int('0b00000', 2)
]

print(cap_umlaut_a) # [10, 4, 10, 17, 31, 17, 17, 0]

wiringpi.lcdCharDef(lcd_handle, 0, cap_umlaut_a)

当我运行此代码时,我收到以下错误:

TypeError:在方法“lcdCharDef”中,类型为“unsigned char [8]”的参数 3

我希望这些intsunsigned chars

[编辑]
在代码的不同部分中,我ord(char)仅将一个字符转换为无符号整数。这可以导致正确的分析器吗?

如何将数组转换/转换为可以接受的类型?

PS(请注意(据我所知)pythonwiringPi库只是简单地包装了wiringPi的C函数)

[编辑]
我在 github 上打开了一个问题:https ://github.com/WiringPi/WiringPi2-Python/issues/20

4

1 回答 1

1

我做了一些研究,并在这个 github repo找到了相关 python 绑定的来源。

有问题的行是

res3 = SWIG_ConvertPtr(obj2, &argp3,SWIGTYPE_p_unsigned_char, 0 | 0 );

如您所见,您必须传入与指向 unsigned char 的指针等效的 python。根据这个线程,等价物是一个字节串。这意味着正确的调用将是

import struct
wiringpi.lcdCharDef(lcd_handle, 0, struct.pack('8B', *cap_umlaut_a))

这应该相当于

wiringpi.lcdCharDef(lcd_handle, 0, b'\x0A\x04\x0A\x11\x1F\x11\x11\x00')
于 2015-07-29T23:17:12.333 回答