我在使用nodemcu(ESP8266MCU)使用php mysql编写数据来编写数据很难。
在串行监视器上说,无法连接到服务器而不执行get命令
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <SimpleDHT.h>
// WiFi - Coloque aqui suas configurações de WI-FI
const char ssid[] = "WIFI-D767480";
const char psw[] = "986557D124D480";
// Site remoto - Coloque aqui os dados do site que vai receber a requisição GET
const char http_site[] = "192.168.23.1";
const int http_port = 80;
// Variáveis globais
WiFiClient client;
IPAddress server(192,168,23,1); //Endereço IP do servidor - http_site
int pinDHT11 = D2;
SimpleDHT11 dht11;
void setup() {
delay(30000); //Aguarda 30 segundos
Serial.begin(9600);
Serial.println("NodeMCU - writing data in BD via GET");
Serial.println("Waiting connection");
// Tenta conexão com Wi-fi
WiFi.begin(ssid, psw);
while ( WiFi.status() != WL_CONNECTED ) {
delay(100);
Serial.print(".");
}
Serial.print("nWI-FI sucefull connection: ");
Serial.println(ssid);
}
void loop() {
//Leitura do sensor DHT11
delay(3000); //delay entre as leituras
byte temp = 0;
byte humid = 0;
if (dht11.read(pinDHT11, &temp, &humid, NULL)) {
Serial.print("Fail in sensor.");
return;
}
Serial.println("writing data in BD: ");
Serial.print((int)temp); Serial.print(" *C, ");
Serial.print((int)humid); Serial.println(" %");
// Envio dos dados do sensor para o servidor via GET
if ( !getPage((int)temp,(int)humid) ) {
Serial.println("GET request failed");
}
}
// Executa o HTTP GET request no site remoto
bool getPage(int temp, int humid) {
if ( !client.connect(server, http_port) ) {
Serial.println("Failed to connect to site ");
return false;
}
String param = "?temp=" + String(temp) + "&humid=" + String(humid); //Parâmetros com as leituras
Serial.println(param);
client.println("GET /weather/insert_weather.php" + param + " HTTP/1.1");
client.println("Host: ");
client.println(http_site);
client.println("Connection: close");
client.println();
client.println();
// Informações de retorno do servidor para debug
while(client.available()){
String line = client.readStringUntil('r');
Serial.print(line);
}
return true;
}
我试图修改以下行,但没有成功:
client.println("GET /weather/insert_weather.php" + param + " HTTP/1.1");
for:client.println(" get/weather/insert_weather.php" param);and:client.println(" get/weather/insert_weather.php? param r n");
错误在附带的imagenter映像说明中我也尝试了其他代码,但是成功。
我的PHP代码是:
<?php
$temp = filter_input(INPUT_GET, 'temp', FILTER_SANITIZE_NUMBER_FLOAT);
$humid = filter_input(INPUT_GET, 'humid', FILTER_SANITIZE_NUMBER_FLOAT);
if (is_null($temp) || is_null($humid) ) {
//Gravar log de erros
die("Dados inválidos");
}
$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "maker";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
//Gravar log de erros
die("Não foi possível estabelecer conexão com o BD: " . $conn->connect_error);
}
$sql = "INSERT INTO weather (wea_temp, wea_humid) VALUES ($temp,$humid)";
if (!$conn->query($sql)) {
//Gravar log de erros
die("Erro na gravação dos dados no BD");
}
$conn->close();
?>
我正在使用Wampv。3.1.17坦克你!
尝试使用邮政请求而不是get,在您的php代码中,请使用$ _post [myvariable]获取HTTP请求的正文内容。此外,还有一个用于ESP8266的HTTP库,您可以获得具有发送HTTP请求的功能的功能。这是我一个项目中的一个片段,我做了与您现在尝试做的完全相同的事情
if(WiFi.status()== WL_CONNECTED){ //Check WiFi connection status
HTTPClient http; //Declare object of class HTTPClient
postData = "reading=" + readingData + "&data=" + ADCData; //create the string that
// will be sent in the POST request
http.begin("http://192.168.0.179:80/phptesting.php"); //Specify request
destination
//send it to a .php file which can extract data from POST requests.
http.addHeader("Content-Type", "application/x-www-form-urlencoded"); //Specify
// content-type header
int httpCode = http.POST(postData); //Send the request
String payload = http.getString(); //Get the response payload
Serial.println(httpCode); //Print HTTP return code
Serial.println(payload); //Print request response payload. If you get anything
besides '200' something is up.
http.end(); //Close connection
尝试一下,如果它不起作用,请告诉我,我可以从此项目中向您发送其余代码。