Я пытаюсь отправить данные датчика Arduino на сервер с помощью экрана GPRS (щит sim900 от geeetech http://www.geeetech.com/wiki/index.php/Arduino_GPRS_Shield). У меня есть эта конкретная настройка, потому что данные будут обновляться на веб-сайте, и устройство будет находиться в роуминге. Я не могу использовать 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();
}
Серверная часть выглядит следующим образом (написано на питоне):
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-соединение, но я не знаю, как это сделать...