我試圖使用GPRS屏蔽(來自geeetech的sim900屏蔽)向服務器發送arduino傳感器數據。我有這個特殊的設置,因爲數據將被更新到一個網站和設備將漫遊。我不能使用http://www.cosm.org,因爲據我所知,每15分鐘更新一次,我需要每5-10秒更新一次。使用GPRS屏蔽和AT命令將arduino傳感器數據發送到服務器
爲了連接,我嘗試了下面的代碼來形成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連接,但我不知道該怎麼這樣做...
我可以使用哪些代碼來解析來自調制解調器的響應? –
上面鏈接的答案http://stackoverflow.com/a/16446523/23118顯示了你的代碼的結構。也許有一個你可以使用的mySerial.readln函數?否則,根據mySerial.read(我確信必須退出)編寫自己的readln函數。 – hlovdal