树梅派应用46:RPIO 文档翻译 – RPIO(Python 模块)

RPIO.py 相对于 RPi.GPIO 在各个方面都有所扩展,并且默认使用 BCM GPIO 编号方式。

GPIO 和 TCP 中断

RPIO 可以对两种中断进行监听:GPIO 和 TCP。某特定 GPIO 的输入状态改变时将产生 GPIO 中断。某 TCP socket 客户端发送信息时将产生 TCP 中断。

RPIO.wait_for_interrupts(threaded=False, epoll_timeout=1)

  • 这是阻隔功能的主循环,当启用后,将会对中断进行监听,并且启用您自定义的回调操作。在您脚本的某个地方,您需要使用它来接收中断回调。这种阻隔方式非常适合于“让您的脚本一直循环运行”。
  • 使用 threaded=True 参数,使它在您的脚本运行于主线程时,使其在后台操作(RPIO 在您的脚本退出时,会自动关闭该线程):
    1
    RPIO.wait_for_interrupts(threaded = True )


GPIO 中断

中断被用于接收当 GPIO 状态发生改变时来自于内核的通知。其优点是消耗 CPU 资源非常少,通知时间非常短,并且可在特定临界值转换(rising、falling、both)时被触发的能力。您还可以设置软件上拉或下拉电阻。

RPIO.add_interrupt_callback(gpio_id, callback, edge=’both’, pull_up_down=RPIO.PUD_OFF, threaded_callback=False, debounce_timeout_ms=None)

  • 添加一个回调用于接收当 GPIO 状态从 0 到 1(反之亦然)时的通知。
    • 可能用到的临界值为 rising、falling、both(默认)。
    • 可能用到的 pull_up_down 值为:RPIO.PUD_UP、RPIO.PUD_DOWN、RPIO.PUD_OFF(默认)。
    • 如果 threaded_callback 为 True,回调将开始与线程内。否则直到其结束后,回调才会从中断等待状态下阻断 RPIO(在这期间,不会有其它回调操作)。
    • 如果设置了 debounce_timeout_ms,那么从上次中断结束后,需要等到您指定的毫秒数后才会再次执行中断回调操作。可以根据您的需求进行设置(通常为 10ms 到 100ms 之间)。
  • 回调功能有两个参数,分别为:GPIO 编号和值。(值为整数,0(Low)或 1(High))。回调操作通常写法为:
    1
    2
    def gpio_callback(gpio_id, value):
    RPIO.del_interrupt_callback(gpio_id)
  • 移除特定 GPIO 上的回调操作。

TCP Socket 中断

仅使用这一种方法就可以方便的为入站 TCP 连接打开端口:

1
RPIO.add_tcp_callback(port, callback, threaded_callback = False )
  • 添加 socket 服务器回调,它会在某个已连接的 socket 客户端发送数据时开始执行。这被用于 RPIO 在特定端口创建 TCP 服务器 socket。当 RPIO.wait_for_interrupts() 运行时,将接受入站连接。回调必须指定两个参数:socket 和 message(例如:def callback(socket, msg))。
  • 回调可以使用 socket 参数将值发回到客户端(例如:socket.send(“hi there\n”))。如果要关闭某客户端的连接,可使用 RPIO.close_tcp_client(..)。客户端可以使用相同的方式关闭连接,或者发送到服务器一个空信息也会同样断开连接。
  • 您可以使用 socket.getpeername() 来获得客户端的 IP 地址。详情可参见 Socket 对象文档

您可以输入命令 $ telnet 对 TCP socket 中断进行测试(例如:$ telnet localhost 8080)。空字符串将通知服务器断开与客户端的连接(比如,您在 telnet 中按下回车键,您得连接将被断开)。

RPIO.close_tcp_client(self, fileno)

  • 关闭客户端 socket 连接并从 epoll 中移除。您可以使用回调中的 RPIO.close_tcp_client(socket.fileno()) 来实现。

示例

以下示例将示范如何监听某些 GPIO 和 TCP 中断:

1
2
3
4
5
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值