2017-01-12 1 views
0

나는 10 초마다 직렬 출력으로 라인을 제공하는 arduino에서 데이터를 기록하기 위해 OrangePI 보드를 사용하고 있습니다.Python Script? - arduino에서 시리얼 출력 로깅

20.0/12.0 V 

온도는 arduino에 부착 된 온도 센서로 측정 한 온도와 배터리 절약 목적의 전압입니다.

저는 웹에서 수집 된 스 니펫과 제안을 바탕으로 정확하게 필요한 것을 수행하는 스크립트를 만들었습니다.

#!/bin/bash 
# Script will run at reboot. 

echo "Beginning Temperature Log!" 
NOW=$(date +"%Y-%m-%d") 
LOGFILE="log-$NOW" 

name=$LOGFILE 
if [[ -e $name ]] ; then 
    i=2 
    while [[ -e $name-$i ]] ; do 
     let i++ 
    done 
    name=$name-$i 
fi 

ts </dev/ttyUSB0>$name 

스크립트는 매끄럽게 작동하는 cron @reboot를 설정하여 컴퓨터를 부팅 할 때마다 실행됩니다. 전압이 일정 수준 이하가되면

은 지금은 시리얼 출력에 경고를 보냅니다 "배터리 가드"로 아두 이노 코드를 확장 할 계획 OrangePI는 중단해야이 시점에서

20.0/9.0 V/BAT! 

/종료 및 arduino가 릴레이를 비활성화하고 전체 시스템을 끌 수 있도록 "종료 안전"상태 인 경우 arduino에 특정 문자를 보냅니다.

그래서 OrangePI는 항상 "BAT!"문자열의 arduino 출력에서 ​​마지막 줄을보아야한다고 가정합니다. 그런 다음 종료를 트리거합니다.

나는 또한이 프로젝트 아두 이노 코드

에 대한 개념 그러나 리눅스에서 코딩하는 방법에 대한 어떤 생각의 harware 부분에 대한 개념을 가지고있다. 어쩌면 접근법이 잘못되었거나 모든 것이 파이썬이나 다른 것으로 코딩되어야 할 것 같은가?

의견을 보내 주셔서 감사합니다.

+0

이것은 * Python *처럼 보이지 않습니다. 사실 * Bash * 스크립트입니다. –

+0

그 파이썬이 아니고, 질문입니다.이 모든 것을 bash에서 관리 할 수 ​​있습니까? 아니면이 모든 것을 파이썬으로 다시 작성해야합니까? 가능하다면 C 나 (arduino 때문에) – Georg91

답변

1

파이썬은 정말 간단하고 깔끔한 방법입니다. pyserial을 사용하면 직렬 연결을 통해 전송 한 문자열을 읽고 BAT라는 단어를 검색하거나 원하는 것이 무엇이든지간에 검색 할 수 있습니다. 이 예제가 도움이

import serial 
from sys import argv 

port = argv[1] # just to assign port and baud from command line 
baud = argv[2] 

COM = serial.Serial(port, baud) # create serial instance 
data_in = COM.readline().strip("\r\n") # strip ending 
### then some manipulation of data_in ### for example: 
if(something you want is in the transmission string): 
    # do something 
else: 
    float_list = [float(x) for x in data_in] 
    # convert all the vals to a floats for logging etc. 

희망 당신은 그것으로 뭔가를 할 수 : 그래서, 내 머리 위로 떨어져, 당신은 뭔가를 할 수 있습니다.