2012-01-29 1 views
1

Python 클라이언트에서 이더넷 실드로 Arduino를 사용하려고합니다. Python 클라이언트가 연결을 시도하자마자 Arduino 서버 측에서 정크 값을 얻고 있습니다. 파이썬 측에서 데이터를 보내기 전에이 값을받습니다.Python 클라이언트에서 예기치 않은 값을 수신하는 Arduino EthernetServer

나는 Arduino 문서의 EthernetServer example을 기반으로 최소한의 예를 만들었습니다. 내가 (클라이언트가 아닌) 직렬 연결을 통해 수신 한 데이터를 서버로 전송하도록 변경 한 것은 (네트워크 사양 이외의) 유일한 변경 사항입니다.

아두 이노 서버 코드 :

#include <SPI.h> 
#include <Ethernet.h> 

byte mac[] = {0x90, 0xA2, 0xDA, 0x00, 0xCD, 0x38}; 
byte ip[] = {10, 1, 30, 210}; 
byte gateway[] = { 10, 1, 30, 0 }; 
byte subnet[] = { 255, 255, 0, 0 }; 

EthernetServer server = EthernetServer(50000); 

void setup() 
{ 
    // initialize the ethernet device 
    Ethernet.begin(mac, ip, gateway, subnet); 

    // start listening for clients 
    server.begin(); 

    Serial.begin(9600); 
} 

void loop() 
{ 
    // if an incoming client connects, there will be bytes available to read: 
    EthernetClient client = server.available(); 
    if (client == true) { 
    // read bytes from the incoming client and write them back 
    // to any clients connected to the server: 
    Serial.write(client.read()); 
    } 
} 

파이썬 클라이언트 코드, 나는 아두 이노가 시작하는 시간이 주어진 후에 실행

import socket 
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
client_socket.connect(('10.1.30.210', 50000)) 
client_socket.close() 

내가이 프로그램을 실행하기 전에 직렬 스트림에 아무것도 얻지을 파이썬 코드. 그것이 실행하자마자, 나는 연속적으로 (끝없이) 끊임없이 바이트 스트림을 얻는다. 다음은 샘플입니다.

j!ðé¸Xta¼#ò´çÈÂlÊC`»­\S513ÙCJèÙÒ Í([Ôø#Q_$(Ìs.)RlO&BÏ$6êçÁFøå¨ÝõVé]üEº_Tà*4V[¡¬íÆVÓñÿpQDÒÐþoñ«.çbþÐS-8&ÓÒøHüZ¡ª£¸öÙ ÂÛÖ¨{R{&<(]$¿*PXøMÃ>i]Û¿Ãké2E)¢4WuKÕÎ%CsÉ9ïÓàä-fZàH5N6ºÞ¹A¬}CaY,Ä]Dîj!ðé¸Xta¼#ò´çÈÂlÊC`»­\S513ÙCJèÙÒ Í([Ôø#Q_ 

누구에게이 문제가 발생할 수 있는지 알고 있습니까? Arduino는이 값을 어디에서 읽습니까? 어떻게하면 그 일을 그만두면 좋을지, 대신 client_socket.send()으로 보내는 내용을 읽기 시작할 수 있습니까?

+0

텔넷 클라이언트에서 서버에 연결할 때 일정한 스트림의 정크 출력도 발생합니다. – Topher

답변

0

페도라의 패키지 관리자에서 아두 이노 dev에 환경의 버전으로 문제가 될 수 있습니다. 소스에서 최신 버전으로 업데이트하려고했지만 빌드 프로세스의 Java 부분에서 오류가 발생했습니다. 결국, Windows VM에서 컴파일 한 후 Arduino에 사용했던 것과 동일한 코드를로드했습니다. 그것은 완벽하게 작동했습니다.

최상의 솔루션은 아니지만 업무가 완료되었습니다.

1

이더넷 대신 직렬 패킷을 전송 해 보셨습니까?

또한 전송 속도를 확인하십시오.

##set to your serial port 
ser = serial.Serial('/dev/ttyUSB0', 19200) 

## check serial port 
def checkokay(): 
    ser.flushInput() 
    time.sleep(3) 
    line = ser.readline() 
    time.sleep(3) 

ser.write('1') 

또한이 게시물보고 : 그것은 밝혀졌다

How Do I Use Raw Socket in Python?

관련 문제