Ошибка запроса HTTP myphp RFID

nodemcu web-server rfid http web-service

Эта программа представляет собой программу, в которой показания 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();
 }

, 👍1

Обсуждение

client.println("Хост: IP-адрес ВАШЕГО СЕРВЕРА");//например: 192.168.0.222 -- Это *действительно* то, что у вас есть в рабочем коде?, @Majenko

нет, это образец, мой код — client.println("Хост: 192.168.0.14");, @wen02

Пожалуйста, покажите нам свой *настоящий* код. Мы не сможем сказать вам, что не так с вашим кодом, если вы покажете нам что-то, что не является вашим кодом., @Majenko

Отредактировано со всеми конфигами (реальный код), @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