WebIOPi:我无法将参数从JS传递给Python

时间:2017-01-31 10:22:12

标签: javascript python raspberry-pi parameter-passing webiopi

您好

我在 Raspberry PI 2 B + 上运行了一个小项目。主要目标是通过I2C控制机电开关(单个地址,4个位置)和 WebIOPi Web界面(0.7.1包括Pi2的补丁)。 我已经用我编写的小型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()的回调与“[]”间隔开,或者将参数作为字符串或不使用“[]”或甚至像Position这样的单个参数。 另外我试图使用createMacroButton(),但我得到了相同的负面结果。

我希望这足以说明问题的正确性。

祝你好运 HP

P.S。:我在JS和Python方面的经验非常有限,基于这个事实,这是我第一个使用这些语言的项目。

1 个答案:

答案 0 :(得分:0)

找到解决方案!

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

 @webiopi.macro
 def sendI2C2(SWITCH, POS):
     i2c.write_byte(address_list1[int(SWITCH)], POSITION[int(POS)])