Hallo zusammen,
ich habe als ESP-Newbie ein kleines Problem mit der Übergabe von Daten an ein serverseitiges PHP-File.
Kurz der UseCase:
ESP8266 soll per DHT22 Temp & Humidity erfassen und per Wifi an eine PHP-Datei auf einem entfernten Server schicken (LAMP). Die Datei schreibt per INSERT in eine Tabelle (mariaDB).
Was klappt?
- php an DB: Die Übergabe der Werte per http://www.meinedomain.de/connect2.php?humi=10.2&temp=12.9 funktioniert
- ESP verbindet sich mit dem Wifi
- ESP sammelt Daten vom DHT22 ein (über Serial Monitor gecheckt)
- ESP scheint sich mit dem Server zu verbinden
Was klappt nicht?
- Die Übergabe der Messwerte an das php File (denke ich). Oder der String, oder oder oder - keine Ahnung.
Ich hoffe wirklich, dass mir hier jemand helfen kann.....
Danke auf jeden Fall schonmal vorab,
Ch.
LUA
#include <DHT.h>
#include <ESP8266WiFi.h>
WiFiClient client;
#define DHTPIN 4 // SENSOR PIN
#define DHTTYPE DHT22 // SENSOR TYPE - THE ADAFRUIT LIBRARY OFFERS SUPPORT FOR MORE MODELS
DHT dht(DHTPIN, DHTTYPE);
const char* ssid = "Mein Netzwerk";
const char* password = "Passwort";
const char server[] = "meinedomain.de";
void setup() {
Serial.begin(9600);
delay(100);
// Blinker
pinMode(0, OUTPUT);
// Los gehts mit der Verbindung zum WiFi Netzwerk
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
// blink (100, 20, 10);
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
// DHT Messung
dht.begin();
Serial.println("sensor inizialized");
delay(5000); // GIVE THE SENSOR SOME TIME TO START
int sensorTemp = dht.readTemperature();
Serial.println("temp sensor read");
int sensorHum = dht.readHumidity();
Serial.println("hum sensor read");
Serial.println(sensorTemp);
Serial.println(sensorHum);
Serial.println("\nStarting connection to server...");
//die IP des Servers auf dem du die Daten ablegen willst
//IPAddress server(111, 111, 11, 111);
//Serial.println(server);
if (client.connect(server, 80)) {
Serial.println("connected!!");
WiFi.printDiag(Serial);
String data = "temp="
+ (String) sensorTemp
+ "&humi="
+(String) sensorHum;
client.println("POST /connect2.php HTTP/1.1");
client.print("Host: 111.111.11.111\n");
client.println("User-Agent: ESP8266/1.0");
client.println("Connection: close");
client.println("Content-Type: application/x-www-form-urlencoded");
client.print("Content-Length: ");
client.println(data.length());
client.print("\n\n");
client.println (data);
client.stop();
Serial.println("\n");
Serial.println("My data string im POSTing looks like this: ");
Serial.println(data);
Serial.println("And it is this many bytes: ");
Serial.println(data.length());
delay(2000);
client.stop();
}
}
//Serial.println("Going into deep sleep for xx seconds");
//ESP.deepSleep(20e6); // e.g. 20e6 is 20 seconds
void loop() {
// nothing here
}
void blink(int t1, int t0, int n) {
// Schaltet LED ein und aus. Übergabeparameter: Millisekunden Ein,
// Millisekunden aus, Anzahl Blinks
// Optional - ggf. weglassen, um Strom zu sparen
int i = 0;
while (i <= n) {
digitalWrite(0, HIGH);
delay(t1);
digitalWrite(0, LOW);
delay(t0);
i++;}
}
PHP-Skript
<?php
$servername = "111.111.111.111";
$username = "User";
$password = "DBPassword";
$dbname = "DBName";
$temp = $_REQUEST['temp'];
$humi = $_REQUEST['humi'];
//date_default_timezone_set('America/Toronto');
//$date=date('m-d-Y H:i:s') ;
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "INSERT INTO hello_arduino (temp, humi)
VALUES ('$humi', '$temp')";
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "
" . $conn->error;
}
$conn->close();
?>