Как отправить данные в базу данных с помощью nodeMCU?

Мы создали веб-сайт, размещенный на 000webhost, и пытаемся отправить данные из нашего nodeMCU в базу данных, используя приведенный ниже скетч, но база данных, похоже, не показывает никаких полученных данных. Как это исправить? Скетч для nodemcu

и ниже приведен php-код для получения данных: Коды PHP

#include <ESP8266WiFi.h>

const char* ssid = "Jino";
const char* pass = "myinternet";
char server[] = "cdgresearch.000webhostapp.com";

WiFiClient client;

int led = 2;

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid,pass);
  pinMode(led,OUTPUT);
  digitalWrite(led, HIGH);

  Serial.println("Connecting to: ");
  Serial.println(ssid);
  Serial.print("Connecting");

  while(WiFi.status() != WL_CONNECTED){
    delay(1000);
    Serial.print(".");
    }

  delay(300);
  digitalWrite(led, LOW);
  Serial.println();
  Serial.println("Successfully connected to the network");
  Serial.print("NodeMCU IP Address: ");
  Serial.println(WiFi.localIP());

  if (client.connect(server, 80)){
    String data = "incoming=fromDuino&incoming2=FROMDUINO2";
    client.println("POST /tag.php? HTTP/1.1");
    client.println("Host: cdgresearch.000webhostapp.com");
    client.println("User-Agent: 8266/1.0");
    client.println("Connection: close");
    client.println("Content-Type: application/x-www-form-urlencoded");
    client.print("Content-Length: ");
    client.print("\n\n");
    client.println(data);
    client.stop();

    Serial.println("Connected to server");
    }
    else{
    Serial.println("Failed to Connect to server...");
    }

  client.stop();
  Serial.println("Disconnected from Server");
}

void loop() {
 // поместите сюда ваш основной код для многократного запуска:
}

, 👍-1

Обсуждение

выложи код в виде текста, @Juraj

ты видел мой ответ?, @Juraj

Извините, скоро выложу коды, надеюсь, @Jeano Duhaylungsod


3 ответа


0

HTTP требует \r\n в качестве конца строки. println добавляет \r\n. Таким образом, чтобы напечатать имя хоста клиенту, используйте println и удалите \n из строки. И замените client.print("\n\n") на client.println(); client.println(); (или напечатайте длину, а затем используйте один println)

,

-1

Вы используете метод POST в php-скрипте ($_POST['var']) и пытаетесь передать параметры скрипту, добавив их в URL-адрес. Это добавление параметров будет работать, только если это будет метод GET вместо метода POST.

Измените везде, где вы написали POST, на GET (как в php-скрипте, так и в коде mcu узла), и ваши данные будут вставлены в базу данных.

1) Измените оба параметра $_POST['var'] на $_GET['var'] в файле php.

2) Замените client.println("POST /tag.php HTTP/1.1") на client.println("GET /tag.php?incoming=fromDuino&incoming2=fromDuino2 HTTP/1.1")

Кроме того, вы можете перейти по этой ссылке, чтобы узнать больше о том, как создать POST-запрос. И можете ли вы показать мне весь код или созданные вами классы?

,

что мне делать, если я хочу использовать POST? Я знаю, что GET также может работать таким образом, но мне нужно, чтобы отправка данных была более дискретной, а метод POST кажется более дискретным, чем GET., @Jeano Duhaylungsod

Не могли бы вы опубликовать весь свой код (включая библиотеки и все объявления)? Тогда я мог бы помочь вам с методом POST: D, @Manav

@Manav, запрос POST имеет тип form-urlencoded. и параметры находятся в теле, как и должно быть, @Juraj


-1

Во-первых, я бы проверил каждую часть, т.е. Сначала проверьте, может ли ваш PHP-скрипт вставлять значения, установив некоторые значения в скрипте, например, incomming = "somejunk";

Я предполагаю, что включаемый файл PHP подключается к вашей БД и изменяется в соответствующую БД? Я предполагаю, что вы настроили пользователя для БД, скажем, в cPanel и установили привилегии

Ваш метод отправки данных отличается от моего рабочего формата... Вы отправляете данные в конце, а не в начале...

Кроме того, если вы посмотрите журнал своего сервера, вы увидите, отправляются ли значения

if (client.connect(server, httpPort)) {
  // подключен к ресурсу
  // отправляем данные
  client.print("POST /dir/file.php?field1=");
  client.print(data1&field2=data2); // должен быть закодирован URL
  client.println(" HTTP/1.1");
  client.println("Host: www.domainname.com");
  // client.println("Длина содержимого: " + String(data.length())); // вам не нужно
  client.println("User-Agent: ESP8266");
  client.println("Connection: close");
  client.println();
,

что это? POST с параметрами URL. Вы знаете, что такое "Content-Type: application/x-www-form-urlencoded"?, @Juraj