作为我的第一个RPi项目,我一直在开发一个树莓派供电的照相亭,它是通过用户智能手机上的web界面控制的。
展位本身有一个内置的显示屏,它有一个pygame视图,可以在拍照时提供动画向导和倒计时。它使用flask-socketio (http://flask-socketio.readthedocs.org/en/latest/)来处理客户端连接和用户通过智能手机输入的事件。
Pygame需要在应用程序的主线程上,所以我的问题是如果显示pygame视图,我不能让socketio工作。
我最初的逻辑是让socketio事件创建一个事件,如下所示:
@socketio.on('connect', namespace'/photo')
def client_connect():
evnt = pygame.event.Event(gui.INFOEVENT, msg="client_connect")
pygame.event.post(evnt)然后在pygame线程中捕获此事件:
running = True
while running:
for event in pygame.event.get():
if (event.type is gui.INFOEVENT and event.msg == "client_connect"):
# welcome client on photobooth screen and start guide注意:我还没有检查它的语法,它可能是错误的。
有谁知道我是怎么做到这一点的吗?如果是这样,我的逻辑是不是已经走到一半了?
我正在努力让我的头围绕线程和队列,虽然我已经学到了一吨,但这个“有趣的”项目正在慢慢地消耗我!非常感谢您的帮助。
-Andrew
发布于 2014-07-10 05:07:33
最后,我找不到这个问题的答案,但我决定这样做。
我决定在我的socketio应用程序中创建一条单独的路由,我将在运行时在Raspberry Pi本身的kiosk模式浏览器中加载该路由,而不是使用单独的库在照相亭本身上创建GUI。
从那时起,我的意图是,当用户使用他们的智能手机(通过索引路由)与展位交互时,事件被激发回服务器(RPi),服务器将处理这些交互,并通过不同的名称空间将事件发送到本地图形用户界面。
这些事件可以在“本地GUI”上触发动画、过渡或倒计时等。
唯一的问题可能是性能和流畅的动画,因为界面需要运行浏览器,以及当有超过一个用户连接到展位时需要解决的问题(尽管如果两个客户端同时尝试访问摄像头,可能会出现硬件问题,但这是另一回事!)
最好的
安德鲁
https://stackoverflow.com/questions/24493069
复制相似问题