SIM7600 4G模块与Arduino通过PHP向服务器传数据故障求助
关于SIM7600 4G模块通过Arduino向PHP服务器传输数据的问题
我已将TEL0124 SIM7600 4G LTE模块连接至Arduino板,能够发送AT指令并收到OK响应,但无法通过PHP调用向服务器传输数据。此前使用的SIM800、SIM900等GSM模块已无法正常工作,因此更换为4G LTE版本,现寻求可行的传输方案。
原代码示例
void setup() { Serial.begin(115200); Serial1.begin(115200); sendData("AT+CCID/r", 3000, DEBUG); sendData("AT+CREG?/r", 3000, DEBUG); sendData("AT+CGATT=1/r", 1000, DEBUG); sendData("AT+CGACT=1,1/r", 1000, DEBUG); sendData("AT+CGDCONT=1,\"IP\",\"TM\"/r", 1000, DEBUG); sendData("AT+CIPSTART=\"TCP\",\"www.sxxxxde/data2mysql.php?key=xxx",80/r", 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"; Serial.println(http_str); sendData("AT+HTTPINIT\r", 2000, DEBUG); sendData(http_str, 2000, DEBUG); sendData("AT+HTTPACTION=0\r", 3000, DEBUG); sendData("AT+HTTPTERM\r", 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; } }
代码中的关键问题
- AT指令换行符错误:所有
/r需改为\r,模块仅识别\r作为指令结束标记 AT+CIPSTART语法错误:TCP连接只需指定域名和端口,无需拼接PHP路径,正确格式为AT+CIPSTART="TCP","www.sxxxxde.de",80\rhttp_str字符串格式错误:C++字符串引号不匹配,URL前缀应为http://而非HTTPP:,正确指令格式为AT+HTTPPARA="URL","http://www.sxxxxde.de/data2mysql.php?key=xxxx&ID=9999A0200A1300A21024A324A426A510A614A714A828A90A10A110A120"\rloop函数语法问题:缺少起始大括号,string需改为Arduino专用的String类型sendData函数缺失返回值:函数声明为String类型,但未添加return response;语句,无法获取模块响应用于调试
修正后的完整代码
#define DEBUG true void setup() { Serial.begin(115200); Serial1.begin(115200); // 基础网络附着配置 sendData("AT+CCID\r", 3000, DEBUG); sendData("AT+CREG?\r", 3000, DEBUG); sendData("AT+CGATT=1\r", 1000, DEBUG); sendData("AT+CGDCONT=1,\"IP\",\"TM\"\r", 1000, DEBUG); // 确认APN"TM"为SIM卡正确值 sendData("AT+CGACT=1,1\r", 1000, DEBUG); Serial.println("4G HTTP Test Begin!"); } void loop() { String http_str = "AT+HTTPPARA=\"URL\",\"http://www.sxxxxde.de/data2mysql.php?key=xxxx&ID=9999A0200A1300A21024A324A426A510A614A714A828A90A10A110A120\"\r"; Serial.println(http_str); // HTTP请求流程 sendData("AT+HTTPINIT\r", 2000, DEBUG); sendData(http_str, 2000, DEBUG); sendData("AT+HTTPACTION=0\r", 5000, DEBUG); // 延长超时时间确保请求完成 sendData("AT+HTTPTERM\r", 3000, DEBUG); delay(5000); // 间隔5秒再次发送 } 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; } } if(debug){ Serial.println("Response:"); Serial.println(response); } return response; }
调试与验证建议
- 查看
sendData输出的响应信息:重点关注AT+HTTPACTION=0的返回,若返回OK后跟随+HTTPACTION: 0,200,...表示请求成功;若为其他错误码(如601、603),需检查网络连接或服务器配置 - 手动验证服务器脚本:通过浏览器直接访问PHP URL,确认数据能正常写入MySQL
- 确认APN正确性:若网络附着失败,联系SIM卡运营商获取正确APN参数,替换代码中的
TM - 检查信号强度:发送
AT+CSQ\r查看信号值,确保模块处于信号良好的环境
内容的提问来源于stack exchange,提问作者Zeiti Z
相关产品推荐
相关产品推荐

