0

你好,

我有一个在Raspberry PI 2 B+上运行的小项目。主要目标是通过 I2C 和WebIOPi 网络界面(0.7.1 包括 Pi2 补丁)控制机电开关(单个地址,4 个位置)。我已经使用我编写的一个小型 c++ 程序成功地测试了 I2C 总线,并且我还能够通过 Python 宏控制 WebIOPi 接口上的切换。但基于我想在总线上使用十多个开关的事实,我需要将参数传递给我的 python 宏(地址和位置)。问题来了。每次我尝试传递参数时,就像教程中解释的那样,它无法运行开关。

Javascript的摘录:

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(),但我得到了相同的负面结果。

我希望这是足够的信息来描述正确的问题。

最好的问候惠普

PS:我在 JS 和 Python 方面的经验非常有限,因为这是我第一个使用这些语言的项目。

4

1 回答 1

0

找到解决方案!

我通过在 Python 脚本中使用类型转换( int() )找到了解决方案:

 @webiopi.macro
 def sendI2C2(SWITCH, POS):
     i2c.write_byte(address_list1[int(SWITCH)], POSITION[int(POS)])
于 2017-02-02T08:51:15.450 回答