2014-10-23 3 views
-1

나는 Arduino를 RS-232 (TxD, RxD 및 GND 만)를 통해 컴퓨터에 연결했습니다.리눅스 셸 : 직렬 포트에서 입력 라인을 저장하고 원격 서버로 전송

Arduino는 데이터를 컴퓨터로 보내고 컴퓨터는이를받습니다. 컴퓨터는 Arduino에 아무 것도 전송하지 않습니다.

컴퓨터는 16MB RAM 및 시스템 용 4MB 플래시가있는 OpenWrt Linux가 설치된 WiFi 라우터입니다. 파이썬과 같은 "좋은 도구"를위한 여유 공간이 충분하지 않습니다 (저는 파이썬으로 작성된 x86 PC에서 동일한 작업 프로그램을 사용합니다).

Arduino는 PC +로 데이터를 전송합니다 - 각 60 초. 데이터 형식은 다음과 같습니다.

SENSOR1;12.34;95.47 
ABC245;34.5;75.1 

2 센서의 값은 각각 2입니다. 라인은 <CR><LF>을 사용하여 끝납니다.

SENSOR1;12.34;95.47|ABC245;34.5;75.1 

그렇게 와이파이 라우터에 내가이 캐릭터마다 분을 읽고 변수에 저장 작은 프로그램이 필요

: 내가 좋아하는, 예를 들어 한 줄이 "프로토콜"(또는 다른)을 수정할 수 있습니다. 이 변수는 curl에 삽입하고 원격 서버로 전송합니다. 컬 (덜 램/플래시 사용)없이 데이터를 서버에 보낼 수 있습니까?

나는 순수한 bysybox sh (배시는 크다)을 사용하고 싶습니다.

나는 Bash script: save stream from Serial Port (/dev/ttyUSB0) to file until a specific input (e.g. eof) appears을 발견

#!/bin/bash 
while read line; do 
    if [ "$line" != "EOF" ]; then 
      echo "$line" >> file.txt 
    else 
      break 
    fi 
done < /dev/ttyUSB0 

awk ` 
/EOF/ {exit;} 
{print;}` </dev/ttyUSB0> file.txt 

는이 스크립트를 수정/사용하는 좋은 선택이다? 다른 더 좋은 해결책이 있습니까?

+0

부품의 많은 여기를 포트 매개 변수를 설정하는 NEET , Busybox가'/ dev/ttyUSB0'을 지원한다면 나는 놀랄 것이다. 알아내는 쉬운 방법은 열려있는 터미널이며'ls -l/dev/ttyUSB0'를 수행하는 것입니다. 오류 메시지가 나타나면 정정 가능한지 알아 내야합니다. 그렇지 않으면 첫 줄에'#!/bin/sh '을 사용하여 작업 할 수 있습니다. 중재자에게'http : // askubuntu.com' (또는 어쩌면 http : // Arduino.stackexchange.com')로 이동하도록'flag'를 사용해보십시오. 행운을 빈다. – shellter

+0

Busybox는'/ dev/ttyUSB0'를 지원하지만'/ dev/ttyS0'와 같은 정상적인 장치 파일입니다. 왜 askubuntu/askarduino인가? 쉘도 프로그래밍 언어입니다 ... – martin

+0

askubuntu에서'/ dev/ttyUSB *'와 관련된 많은 질문을 봅니다. 여기 S.O. '쉘 (shell) '질문은 대개 몇 분 안에 답변을 얻습니다. 그래서 저는 여러분에게 도움을 얻을 수 있도록 여러분을 추천합니다. (나는이 질문에 투표하지 않았습니다.) 행운을 빕니다! – shellter

답변

1

왜 ser2net pakage를 시도하지 않습니까?
이렇게하면 직렬 포트를 서버에 전달할 수 있습니다. 그것은 OpenWrt

에 확인 작업 는

루아 루아에있는 스크립트는 시리얼 포트로부터도 읽어 들인 .에 buid되지만 stty를 먼저

stty 9600 raw < /dev/ttyUSB0 
lua myscript < /dev/ttyUSB0 
+0

'ser2net' 또는'socat'을 사용하면 원격 PC에서 "DTR, RTS, CTS, ..."제어 라인으로 작업 할 수 있습니까? – martin