【问题标题】:How to use WebIOPi in existing website如何在现有网站中使用 WebIOPi
【发布时间】:2015-05-01 20:16:10
【问题描述】:

我正在尝试使用 WebIOPi,但在让它与我的项目一起工作时我很迷茫。

背景: 我正在使用运行 Wheezy 的 Raspberry Pi B+。我正在开发一个只能在本地访问的基于 Web 的应用程序。我在 /var/www 中有一堆在 Apache 上运行的 php 文件。现在我需要让我的硬币接受器参与这个项目。硬币接收器http://www.adafruit.com/products/787 发送单个脉冲(我只需要一枚硬币)。我首先使用中断的 python 脚本尝试了硬币接收器,它工作正常。

GPIO.setup(PIN_COIN_INTERRUPT,GPIO.IN)
GPIO.add_event_detect(PIN_COIN_INTERRUPT,GPIO.FALLING,callback=coinEventHandler)

但现在我需要能够捕获这些脉冲并将它们显示在 php 页面上,更新每个硬币插入的数量。我已经研究 WebIOPi 几个小时了,但我只能找到关于读取 pin 状态的信息,而不是监听中断。谁能指出我正确的方向?

任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: php python raspberry-pi gpio webiopi


    【解决方案1】:

    所以,你似乎有两个问题: 1. 我如何在服务器上检测新币事件 2.然后如何将其推送到客户端浏览器。

    我根本不知道 webiopi,所以我不能说没有办法使用它来解决这两个问题,但作为替代方案:

    对于第 1 部分:您有一个您说可以工作的 Python 程序;我建议作为后台服务运行,并让它做一些简单的事情,比如将最新的 coinage 值写入文件:

    GPIO.setup(PIN_COIN_INTERRUPT,GPIO.IN)
    GPIO.add_event_detect(PIN_COIN_INTERRUPT,GPIO.FALLING,callback=coinEventHandler)
    def coinEvenHandler(*arguments):
     try:
       f = open("coin.txt","rt")
       cnt = int(f.read())
       f.close()
     except: # handle file doesn't exist and file doesn't contain an int
       cnt = 0
     f = open("coin.txt","wt")
     f.write(str(cnt))
     f.close()
    

    对于第 2 部分: 1. 创建一个返回“coin.txt”值的页面 2. 使用 Ajax(例如 jquery)从您的客户端页面轮询该值。

    【讨论】:

    • 可以用Ajax读取coin.txt的最新值吗?抱歉,我对 Ajax 的经验很少。我必须确保每次有人插入硬币时,客户端页面都会立即显示更新后的值。我一回家就试试这个。谢谢!
    • 有可能;但是,默认情况下,您将需要从客户端进行轮询(因此会有大约等于轮询间隔的延迟;这是 web/http 的本质,无需使用 websockets 或其他一些解决方法。(使用 websockets ,可以避免轮询,但这需要更多的学习曲线)。请注意,如果您将 coin.txt 放在 html 目录中,您可以直接访问它(假设权限设置正确)跨度>
    • 嗨 Foon,我能够将每一个插入硬币的硬币计数写入文本文件。谢谢!现在我尝试从我的 php 页面读取文本: 它可以工作,但只能读一次。我尝试循环它并停止工作。我意识到 php 不会停止循环,我的页面也不会完成加载。您是否碰巧有任何使用 Ajax 循环读取文件的示例?非常感谢您的帮助!
    • techoctave.com/c7/posts/…(我建议从他们的第一个示例开始,假设您的浏览器在 RPi 上运行,或者至少在与 RPi 在同一 LAN 上的系统上运行)
    猜你喜欢
    • 2017-05-17
    • 2020-07-10
    • 2018-10-28
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    相关资源
    最近更新 更多