MSP에서 라즈베리 파이 3 - 2 Xbee S1 모듈로 일부 패키지를 보내려고합니다.python-xbee 라이브러리 및 라즈베리가 포함 된 패키지가 누락되었습니다.
Xbee는 DigiMesh 2.4로 이스케이프 된 프레임, 라우터 및 다른 코디네이터로 구성됩니다. 나무 딸기에 연결은 USB 동글로한다.
내 코드는 MSP에서 CTS 흐름 제어로 10 us마다 패키지를 보냅니다. 코디네이터가 내 PC에서 실행중인 윈도우에 연결되면 XCTU를 통해 도착한 모든 패키지를 확인할 수 있습니다.
그러나 동글이 Raspbian과 Raspbian을 실행하고 다음 코드를 실행하면 일부 패키지가 도착할 수 없습니다.
모든 것이 XCTU에서 제대로 작동하기 때문에 문제는 코드에 있으며 직렬 포트 또는 이와 비슷한 것을 처리 할 수 있습니다.
그래서 도움이 될 것입니다.
start.py :
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# copyright: Thiago Cruz <[email protected]>
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 : 이미 time.sleep의 값 (변경하려) 이후의 스레드의 실행을 억제 한
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# copyright: Thiago Cruz <[email protected]>
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)
에 " 격리 "하십시오.
내 콘솔은 ~ 120에서 ~ 170까지의 값을 표시합니다. MSP는 200 개의 데이터 패키지 만 전송합니다!
그래서 ... 모든 추측 ??
미리 감사드립니다.
실제로 패키지를 보낸 다음 10us를 기다립니다 ... 전송 속도를 변경하려고 시도했지만 아무 것도 변경되지 않았습니다. 내 코디네이터가 XBee S2C라고 언급하는 것을 잊지 마십시오. –
추가 아이디어 : Python 코드 테스트 더 빠른 컴퓨터가 계속 작동하는지 확인하기위한 PC. 이스케이프 처리 된 API 모드 대신 일반 API 모드로 전환하여 이스케이프 코드의 오버 헤드를 줄이십시오. 수신 된 데이터를 대기열에 저장하지 않고도 계속 유지할 수 있는지 확인하십시오. Sleep이 모든 스레드를 중지시키지 않도록 sleep()을 0.001로 변경하십시오 (값의 변경은 언급했지만 값의 범위는 0.001 = 1ms가 아님). – tomlogic