Как отправить данные в базу данных с помощью nodeMCU?
Мы создали веб-сайт, размещенный на 000webhost, и пытаемся отправить данные из нашего nodeMCU в базу данных, используя приведенный ниже скетч, но база данных, похоже, не показывает никаких полученных данных. Как это исправить?
и ниже приведен 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() {
// поместите сюда ваш основной код для многократного запуска:
}
@Jeano Duhaylungsod, 👍-1
Обсуждение3 ответа
HTTP требует \r\n в качестве конца строки. println добавляет \r\n. Таким образом, чтобы напечатать имя хоста клиенту, используйте println и удалите \n из строки. И замените client.print("\n\n")
на client.println(); client.println();
(или напечатайте длину, а затем используйте один println)
Вы используете метод 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
Во-первых, я бы проверил каждую часть, т.е. Сначала проверьте, может ли ваш 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
- Как заставить 5-вольтовое реле работать с NodeMCU
- ESP8266 не подключается к Wi-Fi
- Разница между этими двумя платами NodeMCU?
- NodeMCU - использовать кнопку flash в качестве входного сигнала в loop()
- Как определить размер Flash?
- Как изменить имя модуля ESP8266-12E по умолчанию
- Простой запрос GET с ESP8266HTTPClient
- В ESP-12E NodeMCU, какой выход PIN A0?
выложи код в виде текста, @Juraj
ты видел мой ответ?, @Juraj
Извините, скоро выложу коды, надеюсь, @Jeano Duhaylungsod