Ошибка запроса HTTP myphp RFID
Эта программа представляет собой программу, в которой показания RFID сохраняются в базе данных myphp. У меня проблема при запуске кода Wi-Fi подключен, но когда код не сохраняется, я предполагаю, что проблема в этой части кода client.print("GET / rfid/nodem cu_rfid/rfid_read.php?allow= "); Так как я сделал захват акулы и заметил ошибку неверного запроса 400, как показано на снимке экрана.
IP-адреса: 192.168.0.14 — сервер php, 192.168.0.19 — nodemcu
ВЕСЬ КОД:
#include<SoftwareSerial.h>
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <SPI.h>
#include <MFRC522.h>
const char* ssid = "ARRIS-84AB";
const char* password = "your SSID password ";
//клиент WiFiClient;
char server[] = "192.168.0.14"; //например: 192.168.0.222
#define SS_PIN 2 //ДЛЯ PIN-кода RFID SS, ПОСКОЛЬКУ МЫ ИСПОЛЬЗУЕМ И ETHERNET SHIELD, И RS-522
#define RST_PIN 15
#define No_Of_Card 3
WiFiClient client;
//Сервер WiFiServer(80);
SoftwareSerial mySerial(8,9);
MFRC522 rfid(SS_PIN,RST_PIN);
MFRC522::MIFARE_Key key;
byte id[No_Of_Card][4]={
{44,153,22,219}, //RFID NO-1
{112,224,72,84}, //RFID NO-2
{151,94,80,84} //РЧИД №-3
};
byte id_temp[3][3];
byte i;
int j=0;
void setup()
{
Serial.begin(115200);
delay(10);
mySerial.begin(115200);
SPI.begin();
rfid.PCD_Init();
for(byte i=0;i<6;i++)
{
key.keyByte[i]=0xFF;
}
// Подключаемся к сети Wi-Fi
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
// Запускаем сервер
// сервер.начать();
Serial.println("Server started");
Serial.print(WiFi.localIP());
delay(1000);
Serial.println("connecting...");
}
void loop()
{ // Проверяем, подключился ли клиент
int m=0;
if(!rfid.PICC_IsNewCardPresent())
return;
if(!rfid.PICC_ReadCardSerial())
return;
for(i=0;i<4;i++)
{
id_temp[0][i]=rfid.uid.uidByte[i];
delay(50);
}
for(i=0;i<No_Of_Card;i++)
{
if(id[i][0]==id_temp[0][0])
{
if(id[i][1]==id_temp[0][1])
{
if(id[i][2]==id_temp[0][2])
{
if(id[i][3]==id_temp[0][3])
{
Serial.print("your card no :");
for(int s=0;s<4;s++)
{
Serial.print(rfid.uid.uidByte[s]);
Serial.print(" ");
}
Serial.println("\nVALID");
Sending_To_DB();
j=0;
rfid.PICC_HaltA(); rfid.PCD_StopCrypto1(); return;
}
}
}
}
else
{j++;
if(j==No_Of_Card)
{
Serial.println("inVALID");
Sending_To_DB();
j=0;
}
}
}
// Остановить PICC
rfid.PICC_HaltA();
// Остановить шифрование на PCD
rfid.PCD_StopCrypto1();
}
void Sending_To_DB() //СОЕДИНЕНИЕ С MYSQL
{
if (client.connect(server, 80)) {
Serial.println("connected");
// Делаем HTTP-запрос:
Serial.println("GET /rfid/rfidread.php?allow="); //ВАШ URL-адрес /rfid/rfidread.php?разрешить
client.print("GET /rfid/nodemcurfid/rfidread.php?allow="); //ВАШ URL-адрес /rfid/rfidread.php?allow /var/www/html/rfid/rfid_read.php
if(j!=No_Of_Card)
{
Serial.println('1');
client.print('1');
}
else
{
Serial.println('0');
client.print('0');
}
Serial.println("&id=");
client.print("&id=");
for(int s=0;s<4;s++)
{
Serial.println(rfid.uid.uidByte[s]);
client.print(rfid.uid.uidByte[s]);
}
client.print(" "); //ПРОБЕЛ ПЕРЕД HTTP/1.1
client.print("HTTP/1.1");
client.print("Host: ");
client.println(server);
client.println("Host: 192.168.0.14");//например: 192.168.0.222
client.println("Connection: close");
client.println();
} else {
// если вы не получили соединение с сервером:
Serial.println("connection failed");
}
client.stop();
}
@wen02, 👍1
Обсуждение1 ответ
Лучший ответ:
Ваша проблема здесь:
client.print(" "); //SPACE BEFORE HTTP/1.1
client.print("HTTP/1.1");
client.print("Host: ");
client.println(server);
client.println("Host: 192.168.0.14");//eg: 192.168.0.222
client.println("Connection: close");
client.println();
Это заканчивается:
....(your request)... HTTP/1.1Host: 192.168.0.14
Host: 193.168.0.14
Connection: close
Вы не только дважды отправляете заголовок Host, но и не добавляете строку, заканчивающуюся после HTTP-версии.
Вместо этого он должен выглядеть примерно так:
client.print(" "); //ПРОБЕЛ ПЕРЕД HTTP/1.1
client.println("HTTP/1.1"); // <-- Обратите внимание на использование println not print
client.print("Host: ");
client.println(server);
client.println("Connection: close");
client.println();
Я исправил такой код, но все равно безуспешно
client.print(" "); // ПРОСТРАНСТВО ПЕРЕД HTTP/1.1
client.print("HTTP/1.1");
client.println("Хост: 192.168.0.14");//например: 192.168.0.222
client.println("Соединение: закрыть");
client.println();
Подскажите, пожалуйста, какая строка заканчивается после версии HTTP?, @wen02
Смотрите мое редактирование...., @Majenko
Спасибо, сработало!!!, @wen02
- Почему, когда я пытаюсь подключить ESP8266 к узлу, разорванному в моем локальном хосте, он продолжает отключаться и подключаться?
- Отправка состояния подключения Wi-Fi NodeMCU в базу данных MySQL
- WebSocketsServer.h: No such file or directory
- Как публиковать запросы HTTP POST на моем веб-сайте?
- NodeMCU с RFID RC522 и LCD-модулем интерфейса I2C вместе
- ESP8266 отправляет веб-страницу клиенту, но html-коды отображаются в браузере вместо веб-страницы
- Получение строкового ввода с веб-страницы NodeMCU и его печать на последовательном мониторе
- Точка доступа ESP32 и веб сервер HTTP, как отправить несколько параметров?
client.println("Хост: IP-адрес ВАШЕГО СЕРВЕРА");//например: 192.168.0.222
-- Это *действительно* то, что у вас есть в рабочем коде?, @Majenkoнет, это образец, мой код — client.println("Хост: 192.168.0.14");, @wen02
Пожалуйста, покажите нам свой *настоящий* код. Мы не сможем сказать вам, что не так с вашим кодом, если вы покажете нам что-то, что не является вашим кодом., @Majenko
Отредактировано со всеми конфигами (реальный код), @wen02