GET в локальной сети из ESP8266
- Войдите на сайт для отправки комментариев
Чт, 21/11/2019 - 17:15
Добрый вечер, Подскажите пожалуйста, не уходит запрос на веб-сервер.
Строка запроса выглядит так
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 свой локальный адрес пишет и строку запроса, подскажите Пожалста в чем ошибаюсь!
А взять готовый клиент не судьба? Нахрена вручную писать http?
https://github.com/esp8266/Arduino/blob/master/libraries/ESP8266HTTPClient/examples/BasicHttpClient/BasicHttpClient.ino
Что-то я не вижу подключения! Добавь в setup
WiFiClient client; const int httpPort = 80; if (!client.connect(host, httpPort)) { Serial.println("connection failed"); }вот так тоже ничего не происходит :(
#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); }if (http.begin(client, "http:// 192.168.0.62/checkout/new.php?pr="+value)) { // HTTPСтрока 58 должна выглядеть так, а в код поста вставляется иначе
Тогда давай лог! Будем смотреть.
[SETUP] WAIT 4...
[SETUP] WAIT 3...
[SETUP] WAIT 2...
[SETUP] WAIT 1...
и все
[SETUP] WAIT 4...
[SETUP] WAIT 3...
[SETUP] WAIT 2...
[SETUP] WAIT 1...
1643455211
1643455211
1643455211
Попробуй так! Походу к Вай-фай нет подключения
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); }сел по ближе к роутеру и заработало, только почему то два раза надо прикладывать
#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, что б запрос ушел?
Как можно сократить отправку запроса?
Убрать
delay(2000);
СПАСИБО ПОЛУЧИЛОСЬ!