0 レビュー
1 回答
mysql-PHPスクリプトを介してArduinoからデータベースにデータを送信する際の問題
プログラマーの皆さん、こんにちは!私は小さなプロジェクトを作成している最中です-それは、PHPスクリプトを介してarduinoセンサーからデータベースにデータを送信することです。ホストとして自分のWebサイトがあり、GETメソッドを使用してデータを送信するphpスクリプトがあります。私はそれを複数回テストしました、SQLクエリに生の数値を入れるとデータを正しく送信します(データベースはレコードを取得しています)が、arduinoからの変数をクエリに入れたいときに問題が始まります-それはテーブル内に「0」を入れます。私はたくさんのチュートリアルを見て、ここで解決策を探しました-役に立たなかった。これが私のPHPスクリプトです:
<html>
<body>
<?php
require_once "sql_connect.php";
$connect = @mysqli_connect($dbhost,$dbuser,$dbpass,$dbname);
if(!$connect){
echo "Error: " . mysqli_connect_error();
exit();
}
echo "Connection Success!<br><br>";
$waterlevel = $_GET["waterlevel"];
echo $waterlevel;
$query = "INSERT INTO waterLevelTable (waterlevel) VALUES ('".$waterlevel."')"; //sends 0
//$query = "INSERT INTO waterLevelTable (waterlevel) VALUES ('20')"; sends 20 to table
$result = mysqli_query($connect,$query);
echo "Insertion Success!<br>";
?>
</body>
</html>
sql_connect.phpは、私が資格情報を持っている場所です。
次に、Arduinoコードに移ります。 arduinoの例からコードのフラグメントを「借用」しました。DHCPAdressPrintを使用してインターネットに接続し、水センサーのコードを記述してから、GETメソッドを介してセンサー値をデータベースに送信しようとしました。そして、これは私が苦労しているところです...ここにコードがあります:
#include <SPI.h>
#include <Ethernet.h>
#define POWER_PIN_WATER_SENS 7
#define SIGNAL_PIN_WATER_SENS A5
#define SOUND_PIN A0
byte mac[] = {0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02};
int waterLevel = 0;
String waterLevelString;
EthernetClient client;
void setup() {
Serial.begin(9600);
pinMode(POWER_PIN_WATER_SENS,OUTPUT);
digitalWrite(POWER_PIN_WATER_SENS, LOW);
Serial.println("Initialize Ethernet with DHCP:");
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
if (Ethernet.hardwareStatus() == EthernetNoHardware) {
Serial.println("Ethernet shield was not found. Sorry, can't run without hardware. :(");
} else if (Ethernet.linkStatus() == LinkOFF) {
Serial.println("Ethernet cable is not connected.");
}
while (true) {
delay(1);
}
}
Serial.print("My IP address: ");
Serial.println(Ethernet.localIP());
}
void loop() {
switch (Ethernet.maintain()) {
case 1:
//renewed fail
Serial.println("Error: renewed fail");
break;
case 2:
//renewed success
Serial.println("Renewed success");
//print your local IP address:
Serial.print("My IP address: ");
Serial.println(Ethernet.localIP());
break;
case 3:
//rebind fail
Serial.println("Error: rebind fail");
break;
case 4:
//rebind success
Serial.println("Rebind success");
//print your local IP address:
Serial.print("My IP address: ");
Serial.println(Ethernet.localIP());
break;
default:
//nothing happened
break;
}
digitalWrite(POWER_PIN_WATER_SENS, HIGH);
delay(100);
waterLevel = analogRead(SIGNAL_PIN_WATER_SENS);
digitalWrite(POWER_PIN_WATER_SENS, LOW);
Serial.print("Water: ");
waterLevel = 1; //debug value
Serial.println(waterLevel);
waterLevelString = "waterlevel=" + (String)waterLevel;
if (client.connect("<snip>", 80)) {
client.print("GET /arduino_connect_to_db.php HTTP/1.1");
client.println("Host: <snip>");
client.println("Content-Type: application/x-www-form-urlencoded");
client.print("Content-Length: ");
client.println(waterLevelString.length());
client.println();
client.print(waterLevelString);
}
if (client.connected()) {
client.stop();
}
delay(3000);
}
問題はarduinoとphpスクリプトの関係にあると思います-私が知らないエラーがあります。私がそれを見つけて解決策を与えるのを手伝ってくれませんか?
わからない
0
レビュー
答え :
解決:
HTTPリクエストを正しく作成していないようです。次のことを試してください。
if (client.connect("<snip>", 80)) {
client.print("GET /arduino_connect_to_db.php?");
client.print(waterLevelString);
client.println(" HTTP/1.1");
client.println("Host: <snip>");
client.println("User-Agent: arduino");
client.println("Accept: */*");
}
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。