使用SIM7600和Arduino使用SQL服务器和PHP调用传递数据

yqhsw0fo  于 2023-05-16  发布在  PHP
关注(0)|答案(2)|浏览(137)

我有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上向服务器发送一串数据流?
任何帮助是非常感谢!

flmtquvp

flmtquvp1#

有几个严重的问题与您的AT命令处理。

1a)

命令行应仅以\r而不是\r\n终止。V.250 specification says

  • “命令行由三个元素组成:前缀、正文和终止字符。终止字符可以由用户选项(参数S3)选择,缺省为CR“*”。

注意这里的语言,“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,所以在实践中你永远不必处理这个寄存器。

s4n0splo

s4n0splo2#

在我看来,下一行是不正确的:

string http_str = "AT+HTTPPARA=\*URL","HTTPP://www.sxxxxde.de/data2mysql.php?key=xxxx&ID=9999A0200A1300A21024A324A426A510A614A714A828A90A10A110A120"\"\r\n";

在C字符串中,如果你想使用引号,你必须写一个反斜杠+引号组合,围绕URL和HTTP。参数(我之前写了更正的行,但是这个编辑器把我的字符串修改成了bad。)

相关问题