2

GPRS シールド (geeetech http://www.geeetech.com/wiki/index.php/Arduino_GPRS_Shieldの sim900 シールド) を使用して arduino センサー データをサーバーに送信しようとしています。データが Web サイトに更新され、デバイスがローミングされるため、この特定の設定があります。http://www.cosm.orgは使用できません。私の知る限り、15 分ごとにしか更新されないため、5 ~ 10 秒ごとに更新する必要があります。

接続するために、以下のコードを試して UDP 接続を形成しましたが、受信 IP とポートに送信されません。理由はわかりませんが、arduino側ではエラーは発生しません。

///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();
}

サーバー側は次のとおりです(pythonで記述):

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接続に変更することかもしれませんが、その方法がわかりません...

4

1 に答える 1

4

まず第一に、モデムからの実際の応答を解析することによる適切な待機の代わりに、遅延を絶対に使用しないでください。明らかAT+CIPSENDAT+CMGS. _ _

次に、AT コマンドの処理を修正したら (いくつかのヒントについてはこの回答を参照してください)、自分の PC で開いている/ファイアウォールで保護されていないものに変更します ( ShieldsUP で確認して確認してSERVER IPください)。AT コマンドの実行中にWiresharkを実行し、対応するトラフィックを受信することを確認します。この時点まですべてが期待どおりに機能している場合、問題はサーバーにあるようです。SERVER PORT

于 2013-05-21T21:57:57.697 に答える