разместить данные из узла mcu в базе данных sql
#include <ESP8266WiFi.h>
const char* ssid = "xxxx";
const char* password = "xxxxxxxxxx";
const char* host = "192.168.43.18";
const int ldr = A0;
int val = 0;
void setup()
{
Serial.begin(9600);
Serial.println();
Serial.printf("Connecting to %s ", ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println(" connected");
}
void loop()
{
val = analogRead(ldr);
WiFiClient client;
Serial.printf("\n[Connecting to %s ... ", host);
if (client.connect(host, 80))
{
Serial.println("connected]");
client.println("POST /past.php HTTP/1.1");
client.println("Host: 192.168.43.10");
client.print(val);
Serial.println(val);
Serial.println("\n[Disconnected]");
}
else
{
Serial.println("connection failed!]");
client.stop();
}
delay(5000);
}
Я загрузил этот код в node mcu, но он работает, но загруженные данные в моей базе данных не отображаются. Пожалуйста, кто-нибудь, помогите мне.
@vathsalhari, 👍0
Обсуждение3 ответа
Вы используете WIFIClient для отправки данных на HTTP-сервер. Я не думаю, что WiFiClient умеет правильно форматировать HTTP-запросы, поэтому вам нужно это сделать. Я думаю, что есть HTTPClient, который может сделать для вас больше.
Между заголовком и телом сообщения есть пустая строка, а также пустая строка в конце тела. Вам нужна строка с надписью `client.println();
Принимает ли "SQL-сервер" сообщение, содержащее только число? Откуда он знает, к чему относится число? Если у вас есть какой-то PHP-сайт на фронте DBS, который всем этим занимается, то, пожалуйста, проигнорируйте этот вопрос.
Возможно, вы захотите проверить, можете ли вы запустить Wireshark (или аналогичный) на своем ПК и посмотреть, что отправляет MCU, вы также можете взглянуть на надстройки Chrome. Я думаю, что есть некоторые, с помощью которых вы можете создавать необработанные пакеты и отправлять их на свой сервер, чтобы убедиться, что он отвечает так, как ожидается.
В качестве последнего средства вы, вероятно, могли бы набросать очень быструю и грязную программу C# с помощью Visual Studio Community Edition (бесплатно ) и заставить ее отправлять пакет на сервер. Использование этого в сочетании с Wireshark может быть проще, чем использование MCU, пока вы не поймете, что вам следует делать.
println пишет /r/n, @Juraj
Хорошо, потому что выглядит уродливо со всеми этими \r\ns :) Хотя все еще нужны пустые строки, которых может быть просто две println("");, @Code Gorilla
Да, есть HTTP-клиент, но он не работает, поэтому я использую Wi-Fi-клиент. Wi-Fi-клиент можно использовать для отправки данных с узла MCU на HTTP-сервер, потому что мы заставляем узел MCU действовать как клиент. В этом месте мы называем веб-сайт хостом, потому что, как мы знаем, хост может действовать как сервер или как клиент в зависимости от сервиса. Поэтому в моем исправленном коде вы можете видеть, что я называю его хостом., @vathsalhari
пожалуйста, воспользуйтесь моим исправленным кодом для справки, так как он работает, @vathsalhari
На самом деле вы не публикуете никаких данных. После client.println("POST /past.php HTTP/1.1"); Добавьте еще одну(ые) строку(и), например... клиент.println("?myvar=65dcsagh&anothervar=ghsadjkj78");
Также страница на сервере (past.php) должна иметь возможность получать и обрабатывать отправленные данные. Если использовать PHP, то это будет что-то вроде... $data = $_GET[myvar]; А затем PHP-код должен подключиться к вашей базе данных SQL и вставить ее с помощью mySQL
есть клиент.print(val);, @Juraj
упс, извините, я этого не увидел, тогда поможет ли вторая часть моего ответа?, @Brian Moreau
он не спрашивает о части php, @Juraj
Нет, но он говорит, что данные не вводятся в базу данных, поэтому, не зная, что находится в past.php, это может быть проблемной частью., @Brian Moreau
Ребята, на самом деле я не объединял данные, вот в чем проблема. Без объединения мы не можем отправить данные, иначе, если мы это сделаем, PHP-код, написанный на другой стороне, не распознает их., @vathsalhari
На самом деле, похоже, это подчеркивает важный момент., @Chris Stratton
Мой исправленный код, рабочий код:
#include <ESP8266WiFi.h>
const char* ssid = "vathsal";
const char* password = "1234567890";
const char* host = "wwwkprstaffcom.000webhostapp.com";
const int ldr = A0;
int val = 0;
String data;
void setup()
{
Serial.begin(9600);
Serial.println();
Serial.printf("Connecting to %s ", ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println(" connected");
}
void loop()
{
val = analogRead(ldr);
data = "ldr=";
data.concat(val);
WiFiClient client;
Serial.printf("\n[Connecting to %s ... ", host);
if (client.connect(host, 80))
{
Serial.println("connected]");
client.println("POST /add.php HTTP/1.1");
client.println("Host: wwwkprstaffcom.000webhostapp.com");
client.println("Content-Type: application/x-www-form-urlencoded");
client.print("Content-Length: ");
client.println(data.length());
client.println();
client.print(data);
Serial.println(val);
Serial.println("\n[Disconnected]");
}
else
{
Serial.println("connection failed!]");
client.stop();
}
delay(5000);
}
Вообще говоря, простое удаление кода не является ответом. Чтобы составить ответ, вам действительно следует начать с объяснения того, что вы изменили и почему., @Chris Stratton
- NodeMCU - Vin контакт как выход 5V?
- Как заставить 5-вольтовое реле работать с NodeMCU
- ESP8266 не подключается к Wi-Fi
- Разве в узле MCU v3 (LoLin) нет встроенного светодиода?
- Разница между этими двумя платами NodeMCU?
- NodeMCU - использовать кнопку flash в качестве входного сигнала в loop()
- Как определить размер Flash?
- Использование датчика рН 5В с узлом 3,3В
Я бы ожидал одну пустую строку после заголовков, а также заголовок Content-Length с фактической длиной
val
(его строковое представление, а не sizeof int!)., @KIIVи остановить клиент после запроса, @Juraj
@Juraj В этом случае я бы ожидал, что деструктор позаботится об этом. Если нет, то это определенно ошибка в библиотеке., @KIIV
да, деструктор закрывает соединение. А зачем вы закрываете его в else? :-), @Juraj
IP-адреса не совпадают, @Juraj