使用GPRS-shield和AT命令向服务器发送arduino传感器数据

2024-06-26 17:41:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用GPRS屏蔽(geeetech的sim900屏蔽)将arduino传感器数据发送到服务器。我有这个特殊的设置,因为数据将更新到一个网站和设备将漫游。我不能使用http://www.cosm.org,因为据我所知,只有每15分钟更新一次,我需要每5-10秒更新一次。

为了连接,我尝试了下面的代码来形成UDP连接,但它没有被发送到接收IP和端口。我不知道为什么,阿杜伊诺那边没有出现错误。

///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连接,但我不知道如何做到这一点。。。


Tags: 数据selfipserverat屏蔽udpdelay
1条回答
网友
1楼 · 发布于 2024-06-26 17:41:25

首先:永远不要,永远不要使用延迟来代替正确的等待,而是解析调制解调器给出的实际响应。有关更多详细信息,请参见this answer,包括在发送数据之前等待“\r\n>;”的要点,它显然与AT+CIPSEND共享行为。

然后,当您修复了AT命令处理(请参见this answer获得一些提示)后,将SERVER IPSERVER PORT更改为在您自己的PC上打开/未防火墙的内容(通过检查ShieldsUP进行验证)。运行AT命令时运行Wireshark,并验证是否接收到相应的通信量。如果到目前为止一切都按预期工作,那么问题似乎出在服务器上。

相关问题 更多 >