2013-05-16 3 views
2

명령. 데이터가 웹 사이트로 업데이트되고 장치가 로밍되므로이 특정 설정을했습니다. http://www.cosm.org을 사용할 수 없습니다. 15 분마다 업데이트된다는 지식만으로는 5 ~ 10 초마다 업데이트해야하기 때문입니다. 내가 UDP 연결을 형성하기 위해 아래 코드를 시도했지만이 수신 IP 및 포트를 통해 전송되지 않습니다 연결하려면GPRS 실드 서버에 아두 이노 센서 데이터를 전송하고 AT 내가 GPRS 실드 (geeetech <a href="http://www.geeetech.com/wiki/index.php/Arduino_GPRS_Shield" rel="nofollow">http://www.geeetech.com/wiki/index.php/Arduino_GPRS_Shield</a>에서 sim900 실드)를 사용하여 서버에 아두 이노 센서 데이터를 전송하기 위해 노력하고있어

. 왜 arduino쪽에 오류가 발생하는지 알지 못합니다.

import SocketServer 

PORTNO = 14 

class handler(SocketServer.DatagramRequestHandler): 
    def handle(self): 
     newmsg = self.rfile.readline().rstrip() 
    print (newmsg) 
     self.wfile.write(self.server.oldmsg) 
     self.server.oldmsg = newmsg 

s = SocketServer.UDPServer(('',PORTNO), handler) 
print "Awaiting UDP messages on port %d" % PORTNO 
s.oldmsg = "This is the starting message." 
s.serve_forever() 

내가 가능한 솔루션은 TCP 연결로 변경 될 수 있습니다 볼 수 있습니다,하지만 난 방법을 모르는 :

///connect 
void connectUDP() 
{ 
mySerial.println("AT+CSTT=\"APN\""); 
delay(3000); 
ShowSerialData(); 
mySerial.println("AT+CIICR"); 
delay(3000); 
ShowSerialData(); 
mySerial.println("AT+CIFSR"); 
delay(3000); 
ShowSerialData(); 
mySerial.println("AT+CIPSTART=\"UDP\",\"SERVER IP\",\"SERVER PORT\""); 
delay(3000); 
ShowSerialData(); 
mySerial.println(); 

} 


///send udp packet to server 
void sendUDP() 
{ 
for(int x = 0; x < 30; x++){ 
    mySerial.println("AT+CIPSEND"); 
    delay(100); 
    ShowSerialData(); 
    mySerial.println("\"hello world\""); 
    delay(100); 
    ShowSerialData(); 
    mySerial.println((char)26); 
    delay(1000); 
    ShowSerialData(); 
} 
mySerial.println(); 
//ShowSerialData(); 
} 

서버 쪽은 다음과 같이 (파이썬으로 작성)한다 do ...

답변

4

우선 : 지연에 의해 지연을 사용하지 마십시오. 모뎀이 제공 한 실제 응답을 구문 분석하여 대기하지 마십시오. AT+CIPSEND이 행동을 AT+CMGS과 명백하게 공유하는 데이터를 보내기 전에 "\ r \ n>"을 기다리는 것과 같은 점을 포함하여 자세한 내용은 this answer을 참조하십시오. 당신이 (약간의 힌트를 this answer 참조) 처리하여 AT 명령을 해결 한 다음

, 자신의 PC에 방화벽하지/열려있는 뭔가 SERVER IPSERVER PORT을 변경 (ShieldsUP에서 확인하여 확인). AT 명령을 실행하는 동안 Wireshark을 실행하고 해당 트래픽을 수신했는지 확인하십시오. 이 시점까지 모든 것이 예상대로 작동하면 서버에 문제가있는 것처럼 보입니다.

+0

모뎀의 응답을 구문 분석하는 데 사용할 수있는 코드는 무엇입니까? –

+0

위의 링크 된 답변은 http://stackoverflow.com/a/16446523/23118 코드가 어떻게 생겼는지에 대한 구조를 보여줍니다. 어쩌면 당신이 사용할 수있는 mySerial.readln 함수가 있을까요? 그렇지 않으면 mySerial.read를 기반으로 독자적인 readln 함수를 작성하십시오 (반드시 종료해야합니다). – hlovdal