GET в локальной сети из ESP8266

shiyri
Offline
Зарегистрирован: 20.08.2019

Добрый вечер, Подскажите пожалуйста, не уходит запрос на веб-сервер.

Строка запроса выглядит так

192.168.0.62/checkout/new.php?pr=45131561321

либо

checkout-pc/checkout/new.php?pr=45131561321

из браузера все работает....

Код не пашет если хост это ип адрес или днс имя

#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN         5          
#define SS_PIN          4    
MFRC522 rfid(SS_PIN, RST_PIN);   
String value, vall;
byte nuidPICC[4];
const char* ssid     = "яяяяяяяяяяяя";
const char* password = "яяяяяяяяя";
#include <ESP8266WiFi.h>
const char* host = "checkout-pc";

void setup() {
SPI.begin(); // Init SPI bus
rfid.PCD_Init(); // Init MFRC522 
Serial.begin(115200);
delay(10);
WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(200);
}
Serial.println(WiFi.localIP());
}

void loop() {
 value ="" ;
  if ( ! rfid.PICC_IsNewCardPresent())
    return;
  if ( ! rfid.PICC_ReadCardSerial())
    return;
  MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
    for (byte i = 0; i < 4; i++) {
      nuidPICC[i] = rfid.uid.uidByte[i];
    }
    printDec(rfid.uid.uidByte, rfid.uid.size);
    rfid.PICC_HaltA();
    rfid.PCD_StopCrypto1();
}
void printDec(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
      value +=String(buffer[i], DEC);
  }
      value = value.substring(0,10);
      Serial.println(value);
      String url = "/checkout/new.php?pr=";
      url += value;
      Serial.println(url);
      WiFiClient client;
      const int httpPort = 80;
      client.print(String("GET ")+url+" HTTP/1.1\r\nHost: "+host+"\r\nConnection: close\r\n\r\n");
      client.flush();
      while(client.available()){
          String line = client.readStringUntil('\r');
          Serial.print(line);
      }
      Serial.println();
      client.stop();
      delay(2000); 
}

В логах esp свой локальный адрес пишет и строку запроса, подскажите Пожалста в чем ошибаюсь!

rkit
Offline
Зарегистрирован: 23.11.2016

А взять готовый клиент не судьба? Нахрена вручную писать http?

https://github.com/esp8266/Arduino/blob/master/libraries/ESP8266HTTPClient/examples/BasicHttpClient/BasicHttpClient.ino

vitalikost
Offline
Зарегистрирован: 28.11.2014

Что-то я не вижу подключения! Добавь в setup

  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) {
    Serial.println("connection failed");
  }
 

 

shiyri
Offline
Зарегистрирован: 20.08.2019

вот так тоже ничего не происходит :(

#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
ESP8266WiFiMulti WiFiMulti;
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN         5          // Configurable, see typical pin layout above
#define SS_PIN          4         // Configurable, see typical pin layout above
MFRC522 rfid(SS_PIN, RST_PIN);   // Create MFRC522 instance
String value, vall;
byte nuidPICC[4];

void setup() {
  Serial.begin(115200);
   Serial.println();
  Serial.println();
  Serial.println();
  for (uint8_t t = 4; t > 0; t--) {
    Serial.printf("[SETUP] WAIT %d...\n", t);
    Serial.flush();
    delay(1000);
  }
  WiFi.mode(WIFI_STA);
  WiFiMulti.addAP("яяяяяяя", "яяяяяяяя");
  SPI.begin(); // Init SPI bus
rfid.PCD_Init(); // Init MFRC522 
Serial.begin(115200);
delay(10);
}

void loop() {
  value ="" ;
  if ( ! rfid.PICC_IsNewCardPresent())
    return;
  if ( ! rfid.PICC_ReadCardSerial())
    return;
  MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
    for (byte i = 0; i < 4; i++) {
      nuidPICC[i] = rfid.uid.uidByte[i];
    }
    printDec(rfid.uid.uidByte, rfid.uid.size);
    rfid.PICC_HaltA();
  rfid.PCD_StopCrypto1();
}
void printDec(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
        value +=String(buffer[i], DEC);
  }
    value = value.substring(0,10);
    Serial.println(value);
  
  if ((WiFiMulti.run() == WL_CONNECTED)) {
    WiFiClient client;
    HTTPClient http;
    Serial.print("[HTTP] begin...\n");
    if (http.begin(client, "http://192.168.0.62/checkout/new.php?pr="+value)) {  // HTTP
      Serial.print("[HTTP] GET...\n");
      int httpCode = http.GET(); 
      if (httpCode > 0) {    
        Serial.printf("[HTTP] GET... code: %d\n", httpCode);   
        if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
          String payload = http.getString();
          Serial.println(payload);
        }
      } else {
        Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
      }
      http.end();
    } else {
      Serial.printf("[HTTP} Unable to connect\n");
    }
  }
    delay(2000); 
}

 

shiyri
Offline
Зарегистрирован: 20.08.2019
 if (http.begin(client, "http:// 192.168.0.62/checkout/new.php?pr="+value)) {  // HTTP

Строка 58 должна выглядеть так, а в код поста вставляется иначе

vitalikost
Offline
Зарегистрирован: 28.11.2014

Тогда давай лог! Будем смотреть. 

 

shiyri
Offline
Зарегистрирован: 20.08.2019

[SETUP] WAIT 4...
[SETUP] WAIT 3...
[SETUP] WAIT 2...
[SETUP] WAIT 1...
 

и все

shiyri
Offline
Зарегистрирован: 20.08.2019

[SETUP] WAIT 4...
[SETUP] WAIT 3...
[SETUP] WAIT 2...
[SETUP] WAIT 1...
1643455211
1643455211
1643455211
 

vitalikost
Offline
Зарегистрирован: 28.11.2014

Попробуй так! Походу к Вай-фай нет подключения

void printDec(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
        value +=String(buffer[i], DEC);
  }
    value = value.substring(0,10);
    Serial.println(value);
  
  if (WiFiMulti.run() == WL_CONNECTED) {
    WiFiClient client;
    HTTPClient http;
    Serial.print("[HTTP] begin...\n");
    if (http.begin(client, "<a href="http://192.168.0.62/checkout/new.php?pr=" rel="nofollow">http://192.168.0.62/checkout/new.php?pr=</a>"+value)) {  // HTTP
      Serial.print("[HTTP] GET...\n");
      int httpCode = http.GET(); 
      if (httpCode > 0) {    
        Serial.printf("[HTTP] GET... code: %d\n", httpCode);   
        if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
          String payload = http.getString();
          Serial.println(payload);
        }
      } else {
        Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
      }
      http.end();
    } else {
      Serial.printf("[HTTP} Unable to connect\n");
  } else
     Serial.printf("No wi-fi"); 
  }
  
    delay(2000); 
}

 

shiyri
Offline
Зарегистрирован: 20.08.2019

сел по ближе к роутеру и заработало, только почему то два раза надо прикладывать

shiyri
Offline
Зарегистрирован: 20.08.2019
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN         5          
#define SS_PIN          4    
MFRC522 rfid(SS_PIN, RST_PIN);   
String value, vall;
byte nuidPICC[4];
const char* ssid     = "zzzzzzz";
const char* password = "zzzzzzz";
#include <ESP8266WiFi.h>
const char* host = "192.168.0.62";

void setup() {
SPI.begin(); // Init SPI bus
rfid.PCD_Init(); // Init MFRC522 
Serial.begin(115200);
delay(10);
WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(200);
}
Serial.println(WiFi.localIP());
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
  Serial.println("connection failed");
}
}

void loop() {
 value ="" ;
  if ( ! rfid.PICC_IsNewCardPresent())
    return;
  if ( ! rfid.PICC_ReadCardSerial())
    return;
  MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
    for (byte i = 0; i < 4; i++) {
      nuidPICC[i] = rfid.uid.uidByte[i];
    }
    printDec(rfid.uid.uidByte, rfid.uid.size);
    rfid.PICC_HaltA();
    rfid.PCD_StopCrypto1();
}
void printDec(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
      value +=String(buffer[i], DEC);
  }
      value = value.substring(0,10);
      Serial.println(value);
      String url = "/checkout/new.php?pr=";
      url += value;
      Serial.println(url);
      WiFiClient client;
      const int httpPort = 80;
      client.print(String("GET ")+url+" HTTP/1.1\r\nHost: "+host+"\r\nConnection: close\r\n\r\n");
      client.flush();
      while(client.available()){
          String line = client.readStringUntil('\r');
          Serial.print(line);
      }
      Serial.println();
      client.stop();
      delay(2000); 
}

 

Подскажите почему два раза надо прикладывать к считывателю RFID, что б запрос ушел?

 

shiyri
Offline
Зарегистрирован: 20.08.2019

Как можно сократить отправку запроса?

vitalikost
Offline
Зарегистрирован: 28.11.2014

Убрать 

delay(2000);

shiyri
Offline
Зарегистрирован: 20.08.2019

СПАСИБО ПОЛУЧИЛОСЬ!