【发布时间】:2017-12-08 18:31:06
【问题描述】:
我正在尝试通过 2 个 Xbee S1 模块将一些包从 MSP 发送到 Raspberry Pi 3。
Xbee 配置为带有转义帧的 DigiMesh 2.4,一个作为路由器,另一个作为协调器。在 raspberry 中,使用 USB 加密狗进行连接。
我在 MSP 的代码使用 CTS 流控制每 10 我们发送一个包。当协调器插入我运行 windows 的 PC 时,我可以通过 XCTU 看到所有包都到达了,一切都很好!!!
但是,当加密狗在 raspberry,运行 Raspbian 和以下代码时,一些包无法到达。
由于 XCTU 一切正常,问题出在代码中,可能处理串行端口或任何类似的东西。
所以,任何帮助将不胜感激!!!
start.py:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# copyright: Thiago Cruz <thiagoalberto@gmail.com>
import sys
import os
from PyQt4 import QtGui
from middleware.QueueMiddleware import QueueMiddleware
from jobs.ScheduleJob import ScheduleJob
def startQueue():
queue = QueueMiddleware()
queue.start()
def assyncSchedule():
schedule = ScheduleJob()
schedule.run()
def runApp():
startQueue()
app = QtGui.QApplication(sys.argv)
sys.exit(app.exec_())
if __name__ == '__main__':
runApp()
QueueMiddleware.py:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# copyright: Thiago Cruz <thiagoalberto@gmail.com>
import threading
import time
import serial
import Queue
from middleware.DataProcessorGear import DataProcessorGear
from xbee import ZigBee
minutes = 0
class QueueMiddleware(threading.Thread):
__instance = None
PORT = '/dev/ttyUSB0'
BAUD_RATE = 9600
# The XBee addresses I'm dealing with
BROADCAST = '\x00\x00\x00\x00\x00\x00\xFF\xFF'
UNKNOWN = '\xFF\xFE' # This is the 'I don't know' 16 bit address
def __new__(cls):
if QueueMiddleware.__instance is None:
QueueMiddleware.__instance = super(QueueMiddleware, cls).__new__(cls)
return QueueMiddleware.__instance
def __init__(self):
QueueMiddleware.__instance = self
threading.Thread.__init__(self)
self.dataPacketsQueue = Queue.Queue()
# Create API object, which spawns a new thread
self.ser = serial.Serial(
port='/dev/ttyUSB0',
baudrate = 9600,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS,
timeout=1
)
self.xbeeApi = ZigBee(self.ser, callback=self.message_received, escaped=True)
print 'start queue'
def __del__(self):
# halt() must be called before closing the serial
# port in order to ensure proper thread shutdown
self.xbeeApi.halt()
self.ser.close()
self.processor = None
def run(self):
# Do other stuff in the main thread
while True:
try:
time.sleep(1)
#if self.dataPacketsQueue.qsize() > 0:
# lock = threading.Lock()
# processor = DataProcessorGear(self.dataPacketsQueue, lock)
# processor.start()
except KeyboardInterrupt:
break
def message_received(self, data):
global minutes
minutes += 1
print minutes
self.dataPacketsQueue.put(data, block=True, timeout=None)
我已经尝试更改 time.sleep() 的值并抑制后续线程的执行以“隔离”问题。
我的控制台显示从 ~120 到 ~170 的值。 MSP只发送200个数据包!!
所以...有什么猜测吗??
提前致谢。
【问题讨论】:
标签: python raspberry-pi pyserial missing-data xbee