所以我编写了一个网络接口与Arduino的乌诺交互,使用CherryPy的,和pyserial。这是很完整的,那我唯一缺少的东西,我一直在试图找出了一天,就是不断阅读Arduino的发送的数据,并自动显示包含HTML里面的消息一个div码。我可以在控制台中显示它,但我无法设法返回实际的HTML。事实上,我无法设法使用返回,我必须使用打印,这是不方便的,因为我想要的数据在HTML页面,而不是控制台。 我已经尝试了很多方法来做到这一点。线程与蟒蛇,CherryPy的和pyserial
这里是我的代码,很简单。常数函数不断读取从Arduino发送的数据,并将其发送到控制台。我希望它将它发送到html代码,就像实时更新一样。我该怎么做呢?
# -*- coding: Utf-8 -*-
import cherrypy, arduino, time, threading
ser=arduino.Serial('COM4', 9600)
def constant():
while True:
m=''
print('running')
while True:
print('sub_running')
byte=(ser.read().encode('Utf-8'))
if byte=='*':
break
m=m+byte
time.sleep(1)
print(m)
time.sleep(1)
class website(object):
def index(self):
return '''
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" ></script><script src="annexes/functions.js"></script>
<link rel=stylesheet type=text/css media=screen href="/annexes/design.css">
<form action="command" method="POST">
<input type="submit" name="command" value="Turn the LED on" text="hey"/>
<input type="submit" name="command" value="Turn the LED off"/>
</form>
'''
index.exposed=True
def command(self, command):
m=''
if command=='Turn the LED on':
ser.write('1')
if command=='Turn the LED off':
ser.write('0')
self.index
command.exposed=True
_thread = threading.Thread(target=constant)
_thread.setDaemon(True)
_thread.start()
cherrypy.quickstart(website(), config='config.conf')
嘿非常感谢你为你的伟大的答案,但我似乎无法弄清楚如何“安装”,我刚刚下载的jsonyield装饰。那个怎么样? – user2501169
那么你可以把你在同一个目录下载在一个叫做'jsonyield.py'文件的代码,并在你的代码的开头,你可以做'从jsonyield进口jsonyield'的代码。另一个(丑)解决方案是复制粘贴整个'jsonyield'功能在源文件的顶部(但不要忘了,它需要太多的进口!) – zmo
非常感谢,让您的解决方案应该是生活展示是什么由arduino发送的权利?当我点击一个按钮时,没有任何明显的事情发生。我的arduino正在循环着相同的东西:每隔2秒钟,它发送一条不同的消息。所以脚本应该更新网页是不是? – user2501169