我正在使用Raspberry Pi使用Python脚本读取超声波传感器。
当我独立运行Python脚本时,它会不断阅读,因为我在while循环中调用get_ultra
函数。
但是当我使用线程在Python Tornado WebSocket服务器上调用while循环中的get_ultra
函数时,它会在几次读数后停止读取。
这是我的ultrasonic.py
文件代码:
#!/usr/bin/python
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
def get_ultra():
global componentconfig
GPIO_TRIGGER = 26
GPIO_ECHO = 26
GPIO.setwarnings(False)
GPIO.setup(GPIO_TRIGGER,GPIO.OUT)
GPIO.output(GPIO_TRIGGER, False)
time.sleep(0.01)
GPIO.output(GPIO_TRIGGER, True)
time.sleep(0.00001)
GPIO.output(GPIO_TRIGGER, False)
start = time.time()
GPIO.setup(GPIO_ECHO,GPIO.IN)
while GPIO.input(GPIO_ECHO)==0:
start = time.time()
while GPIO.input(GPIO_ECHO)==1:
stop = time.time()
elapsed = stop - start
distance = elapsed * 34300
distance = distance / 2
distance1 = "%.2f" % distance
print "ultra sonic distance" , distance1
if __name__ == '__main__':
while 1:
get_ultra()
time.sleep(1)
这是我的Tornado WebSocket服务器:
import time
import thread
import traceback
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
import tornado.websocket
import ultrasonic
def Ultrasonic(T_name,a):
while 1:
ultrasonic.get_ultra()
time.sleep(0.0038)
class ServerHandler(tornado.websocket.WebSocketHandler):
def check_origin(self, origin):
return True
def open(self):
print"Connection open"
def on_close(self):
print"Connection close"
def on_message(self,message):
print message
if message=="start":
t12=threading.Thread(target=Ultrasonic,args('ultrasonic', 0 ))
t12.setDaemon(True)
t12.start()
if __name__=="__main__":
tornado.options.parse_command_line()
app=tornado.web.Application(handlers=[(r"/",ServerHandler)])
server=tornado.httpserver.HTTPServer(app)
app.listen(9001)
tornado.ioloop.IOLoop.instance().start()
注意:在t12
线程中,我调用另外十个线程,我在这里没有提到。我想我的内存可能会泄漏。