无法使用nodeMCU在mysql中编写dht11传感器

问题描述 投票:0回答:1

我使用PHP + MYSQL和nodeMCU(ESP8266MCU)编写使用DHT11传感器收集的数据时遇到问题。

在串行监视器上说,无法连接到服务器而不执行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);和:client.println(“GET /weather/insert_weather.php?+param+\r\n”);

错误是在附加图像qazxsw poi我尝试了其他代码,但没有成功。

我的PHP代码是:

enter image description here

我正在使用WAMP v.3.1.17坦克你!

php mysql arduino esp8266 nodemcu
1个回答
0
投票

尝试使用POST请求而不是GET,并在PHP代码中使用$ _POST [myvariable]来获取HTTP请求正文的内容。此外,还有一个用于ESP8266的HTTP <?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(); ?> ,您可以获得具有发送HTTP请求的功能。这是我的一个项目的片段,我做的几乎与你现在要做的完全相同

library

尝试这个,如果它不起作用,让我知道,我可以发送给你这个项目的其余代码。

© www.soinside.com 2019 - 2024. All rights reserved.