我正在使用Arduino及其GSM Shield。这是一个硬件设备,允许我对任何IP地址或Web URL发出HTTP GET请求。
因此,我们构建了一个读取URL参数的PHP脚本,并将该数据提交给数据库。当它ping我们的服务器时,它将保存我们的Arduino数据。
现在,当我在浏览器中访问带有参数的网址时,效果很好。一切都保存,可以通过DB访问。但是当Arduino发出请求或我使用cURL ping网址时,记录不会被保存。
我得到的响应显示它正在加载页面并吐出预期的HTML。为什么我的PHP没有读取这些URL参数并保存它们?
我已经看过会议,等等没有运气。
提前致谢!!
EDIT :::
handle_data.php (parses parameters, saves them to DB)
<?php
// Setup our DB login info
$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "arduino";
if (!empty($_GET['lat']) && !empty($_GET['lon'])) {
function getParameter($par, $default = null){
if (isset($_GET[$par]) && strlen($_GET[$par])) return $_GET[$par];
elseif (isset($_POST[$par]) && strlen($_POST[$par]))
return $_POST[$par];
else return $default;
}
$lat = getParameter("lat");
$lon = getParameter("lon");
$person = $lat.",".$lon.",".$time.",".$sat.",".$speed.",".$course."\n";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "INSERT INTO gps_data (latitude, longitude)
VALUES (".$lat.", ".$lon.")";
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
// close connection
$conn->close();
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
else {
};
?>
这是Arduino代码:
if(started) {
//GPRS attach, put in order APN, username and password.
//If no needed auth let them blank.
if (inet.attachGPRS("internet.wind", "", ""))
Serial.println("status=ATTACHED");
else Serial.println("status=ERROR");
delay(1000);
//Read IP address.
gsm.SimpleWriteln("AT+CIFSR");
delay(5000);
//Read until serial buffer is empty.
gsm.WhileSimpleRead();
//TCP Client GET, send a GET request to the server and
//save the reply.
numdata=inet.httpGET("http://cd5d6640.ngrok.io", 80, "/handle_data.php?lat=44.87654&lon=-88.77373", msg, 50);
//Print the results.
Serial.println("\nNumber of data received:");
Serial.println(numdata);
Serial.println("\nData received:");
Serial.println(msg);
}
注意 - 我们正在使用MAMP在localhost上进行开发,使用ngrok隧道到localhost:8888。当您在浏览器中访问ngrok网址时,它可以正常工作,但是当我们通过请求访问它时,它不会正常工作。包含的网址无关紧要且不活跃。