你好,
我有一个小项目运行在一个覆盆子PI 2 B+上。主要目标是在I2C和WebIOPi网络接口(0.7.1Inl)上控制机电开关(个人地址,4个位置)。(用于Pi2的补丁)。我已经用我编写的一个小型c++程序成功地测试了c++总线,我还可以通过Python控制WebIOPi接口上的开关。但是,基于我想在总线上使用超过10个开关的事实,我需要将参数传递给python宏(地址和位置)。问题来了。每次我试图传递参数,就像在教程中解释的那样,它都无法运行开关。
抄本节录:
var posButton1 = webiopi().createButton("posB11", "Pos 1", function(){
webiopi().callMacro("sendI2C");
});
$("#posB11").append(posButton1);
var posButton2 = webiopi().createButton("posB21", "Pos 2", function(){
var args = [0,1];
webiopi().callMacro("sendI2C2",args,[]);
});Python摘录:
import webiopi
import smbus
...
@webiopi.macro
def sendI2C():
i2c.write_byte(address_list1[0], POSITION[0])
@webiopi.macro
def sendI2C2(SWITCH, POS):
i2c.write_byte(address_list1[SWITCH], POSITION[POS])在这种情况下,posButton1工作正常并驱动开关。但是第二个选项在点击开关时不会做任何事情。我尝试了不同的语法,比如不用"[]“分隔callMacro()的回调,或者将参数作为字符串或不使用"[]”,甚至不使用单个参数(比如位置)。此外,我试着使用createMacroButton(),但是我得到了同样的负面结果。
我希望这是足够的信息来描述问题的正确。
向惠普问好
P.S.:基于以下事实,我在JS和Python方面的经验是有限的,这是我使用这些语言的第一个项目。
发布于 2017-02-02 08:51:15
找到解决办法了!
我通过在Python中使用类型广播(int())找到了一个解决方案:
@webiopi.macro
def sendI2C2(SWITCH, POS):
i2c.write_byte(address_list1[int(SWITCH)], POSITION[int(POS)])https://stackoverflow.com/questions/41955034
复制相似问题