我有TEL 0124 SIM 7600调制解调器4G LTE模块连接到Arduino板.威尔
虽然我能够发送AT并获得OK,但我想使用PHP将数据传输到服务器。我无法向服务器发送任何数据
void setup()
{
Serial.begin(115200);
Serial1.begin(115200);
sendData("AT+CCID", 3000, DEBUG);
sendData("AT+CREG?", 3000, DEBUG);
sendData("AT+CGATT=1", 1000, DEBUG);
sendData("AT+CGACT=1,1", 1000, DEBUG);
sendData("AT+CGDCONT=1,\"IP\",\"TM\"", 1000, DEBUG);
sendData("AT+CIPSTART=\"TCP\",\"www.sxxxxde/data2mysql.php?key=xxx",80", 2000, DEBUG);
Serial.println("4G HTTP Test Begin!");
}
void loop()
string http_str = "AT+HTTPPARA=\*URL","HTTPP://www.sxxxxde.de/data2mysql.php?key=xxxx&ID=9999A0200A1300A21024A324A426A510A614A714A828A90A10A110A120"\"\r\n";
Serial.println(http_str);
sendData("AT+HTTPINIT\r\n", 2000, DEBUG);
sendData(http_str, 2000, DEBUG);
sendData("AT+HTTPACTION=0\r\n", 3000, DEBUG);
sendData("AT+HTTPTERM\r\n", 3000, DEBUG);}
String sendData(String command, const int timeout, boolean debug){
String response = "";
Serial1.println(command);
long int time = millis();
while ( (time + timeout) > millis())
{
while (Serial1.available())
{
char c = Serial1.read();
response += c;
}
}
这只是一个例子(写在这里),但它多少说明了我在做什么。,通过PHP调用向服务器发送一串数据。
我想通过4g发送数据,但由于GSM不再适用于我的调制解调器SIM 800 SIM 900。这就是为什么我选择了4G LTE版本。
如何在4G上向服务器发送一串数据流?
任何帮助是非常感谢!
2条答案
按热度按时间flmtquvp1#
有几个严重的问题与您的AT命令处理。
1a)
命令行应仅以
\r
而不是\r\n
终止。V.250 specification says:注意这里的语言,“the termination character”。一个,而不是两个字符1。
为了强调这份文件的重要性:* 即使在爱立信的移动的中实现AT命令十多年后,我和我的同事仍然consulted that document regularly *!
事实上,现在就停止阅读这个答案的其余部分,而是先阅读第250节第5章的全部内容,然后继续阅读这里的其余部分。
1b)
试图在
setup
函数中调用的命令行都缺少终止字符,因此不会被识别为命令行。换句话说,调制解调器会将所有试图执行的命令行作为垃圾输入而忽略。2)
永远不要用等待一定时间来代替reading and parsing responses from a modem。
您必须实现代码来读取从调制解调器发回的响应,并对其进行解析,以正确识别和等待 * 最终结果代码 *。其他的都不行。
使用
Serial1.available()
(+ time)作为帧机制是保证不工作的。你必须buffer modem response data character by character until you have a complete response line,然后你可以继续parse/process that line。1你应该永远改变
S3
的默认值13,所以在实践中你永远不必处理这个寄存器。s4n0splo2#
在我看来,下一行是不正确的:
在C字符串中,如果你想使用引号,你必须写一个反斜杠+引号组合,围绕URL和HTTP。参数(我之前写了更正的行,但是这个编辑器把我的字符串修改成了bad。)