2013-03-06 2 views
0

기본 장고 설정을 실행 중이며 현재 직렬 연결에 일부 데이터를 쓰도록 dajaxice 호출을 구현 중입니다 (RainbowDuino가 반대쪽에 있음).dajaxice 호출에서 사용할 수있는 지속적인 직렬 연결을 유지 하시겠습니까?

다음 코드는 Arduino에 직렬 연결을 설정할 때 Arduino가 다시 설정 될 때 데이터를 쓰기 전에 기다려야합니다.

from django.utils import simplejson 
from dajaxice.decorators import dajaxice_register 
import time, serial 

def serialWrite(msg): 
    try: 
     ser = serial.Serial('/dev/ttyUSB0', 9600) 
     time.sleep(1.5) #wait for arduino to reset 
     ser.write(msg) 
     return "Running Animation" 
    except: 
     return "Failed to communicate with cube" 

@dajaxice_register 
def animate(request, data): 
    msg = serialWrite(str(data)) 
    return simplejson.dumps({'message':msg}) 

나는 모든 것을 파이썬에 새로 온 사람과 내가이 환경에서 직렬 연결을 사용할 수있는 지속성 개체를 유지하는 방법을 확실 해요 장고. 내 자신의 독서와 테스트에서 나는 dajaxice 등록 된 메소드가 해당 버튼 클릭의 수신시에만 호출된다는 것을 알 수 있습니다.

내 응용 프로그램보기를 사용하여 직렬 연결을 인스턴스화 할 수있는 경우입니까? 그렇다면 어떻게하면 dajaxice 호출과 연결을 공유 할 수 있습니까?

+0

이상적인 설정은 아니지만 영구 연결을 설정할 특별한 이유가 있습니까? 다른 방법이있을 수 있지만 런타임 설정 (실제로 장고 앱을 제공하는 방식)에 따라 달라집니다. 다른 접근법은 Arduino와의 지속적인 연결을 설정하고 Django에서 보낸 명령 (아마도 Redis를 통해)을 수신하는 별도의 프로세스를 실행하는 것일 수 있습니다. – robertklep

+0

솔직히 개인적인 취향 일 뿐이므로 4x4 LED 큐브를 리셋 할 때 스위치가 꺼지면 멋지지 않습니다. 현재 django 앱은 나무 딸기 파이에서 제공되며 학교 프로젝트의 필수 조건입니다. 나는 Redis를 조사 할 것이고 제안에 감사한다. – Gybe

답변

1

런타임 환경이 간단하면 미들웨어가 옵션 일 수 있습니다.

// middleware/__init__.py 
class ArduinoMiddleware: 

    def __init__(self): 
     self.serial = serial.Serial('/dev/ttyUSB0', 9600) 
     time.sleep(1.5) 

    def process_request(self, request): 
     request.serialWrite = self.serialWrite 

    def serialWrite(self, msg): 
     try: 
      self.serial.write(msg) 
      return "Running Animation" 
     except: 
      return "Failed to communicate with cube" 

// ajax.py 
@dajaxice_register 
def animate(request, data): 
    msg = request.serialWrite(str(data)) 
    return simplejson.dumps({'message':msg}) 

// settings.py 
... 
MIDDLEWARE_CLASSES = (
    'middleware.ArduinoMiddleware', 
    ... 
) 

테스트되지 않은, 당신은 다중 스레드 환경 (같은이 manage.py runserver)에서 실행하는 경우 잠금 필요할 수 있습니다.

+0

고마워요, 제대로 작동하는 것 같습니다. 내일 Arduino와 테스트 해보면 받아 들일 것입니다. – Gybe

관련 문제