Hallo zusammmen! Ich progrmmiere nur gelegentlich und für gewöhnlich find ich auch alles. Dieses mal steh ich aber echt auf der Leitung!
Ich hab ein ESP8266 Modul mit Sensor für Temp und Luftdruck. Diese Werte sollen an eine Serverseitige PHP Datei übergeben und angezeigt werden.
Das ist ein Teil vom C code:
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#include <ESP8266WiFi.h>
#define BMP_SCK 13
#define BMP_MISO 12
#define BMP_MOSI 11
#define BMP_CS 10
#define FORCE_DEEPSLEEP
Adafruit_BMP280 bme; // I2C
String apiKey = ""; //API KEY eintragen
const char* ssid = "FingerWeg";
const char* password = "36180253";
const char* server = "192.168.0.192";
WiFiClient client;
void setup() {
Serial.begin(9600);
Serial.println(F("BMP280 test"));
if (!bme.begin()) {
Serial.println("Could not find a valid BMP280 sensor, check wiring!");
while (1);
}
WiFi.begin(ssid, password);
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(100);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
}
void loop() {
Serial.print("Temperatur: ");
Serial.println(bme.readTemperature());
Serial.print("Luftdruck: ");
Serial.println(bme.readPressure());
Serial.print("Seehoehe: ");
Serial.println(bme.readAltitude(1012.20)); // this should be adjusted to your local forcase
Serial.print("---------------------------\n");
if (client.connect(server,80))
{
// String postStr = apiKey;
String postStr ="temp=";
postStr += String(bme.readTemperature());
postStr +="&pres=";
postStr += String(bme.readPressure());
postStr += "\r\n\r\n";
client.print("POST api.php HTTP/1.1\n");
client.print("Host: 192.168.0.192\n");
//client.print("Connection: close\n");
//client.print("X-THINGSPEAKAPIKEY: "+apiKey+"\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
client.print(postStr.length());
client.print("\n\n");
client.print(postStr);
Serial.print(postStr);
}
client.stop();
int minutes2sleep = 1;
goToBed(minutes2sleep); //sending into deep sleep
}
void goToBed (int minutes) {
#ifdef FORCE_DEEPSLEEP
Serial.print("Uaaah. I'm tired. Going back to bed for ");
Serial.print(minutes);
Serial.print(" minutes. Good night!");
ESP.deepSleep(minutes * 60 * 1000000);
#endif
}
Der Code liegt am Server in der api.php. Leider werden keine Daten übergeben aber warum??
<?php
if(isset($_POST['temp'])){
echo $_POST['temp'];
echo "Daten vorhanden!";
}else{
echo "Keine Daten für die Temperatur!!";
}
if(isset($_POST['pres'])){
$pres = $_POST['pres'];
echo $pres;
echo "Daten vorhanden!";
}else{
echo "Keine Daten für den Luftdruck!!";
}
?>
Als Server läuft ein Raspberry Pi mit Apache2 und php 7 Server.
Es werden keine Daten in die 'temp' geschrieben. Was mach ich da falsch? Wo ist mein Denkfehler?
Wenn ich die api.php aufrufe bekomme ich "Keine Daten für den..." angezeigt.
httpCode kommt 200 zurück
Ich steh echt am Schlauch!![/code]
Danke für die Anregungen.
Hab jetzt doch eine
HTTP/1.1 400 Bad Request <-- ok, aber was stimmt nicht? Kann das sein das der Server nur https erlaubt?
da muss ich mich schlau machen.
hm..., hab jetzt nix gefunden. Du meist das Schloss und der Adressleite.
Mit fingerprint, API und so weiter hab ich mich noch nicht auseinander gesetzt.
Ist doch nicht so einfach wie gedacht.