RepaeR
New member
Здравствуйте. Вопрос таков: на странице php есть вывод числа (Проверка на совпадение в БД). Если есть в БД, то выводит 1. Если нет - 0. Использую библиотеку ESP8266HTTPClient. Отправляю нужную и нформацию методом POST(). Получение происходит через метод getString(). Преобразование в целочисленный - toInt(). Однако, результат преобразования один и тот же - это число 0.
C++:
#include "Arduino.h"
#include "CTBot.h"
CTBot myBot;
TBMessage msg;
#include "ESP8266WiFi.h"
#include "ESP8266HTTPClient.h"
//Web server ---------
#define HTTPS_RESPONSE "***" //
#define POST_RESPONSE "***" //
#define ADMIN_RESPONSE "***" // На сайте сами скрипты
#include "ArduinoJson.h"
#include "ESP8266WiFiMulti.h"
#include "WiFiClientSecureBearSSL.h"
const uint8_t fingerprint[20] = {0xF3,0x1B,0xB7,0x47,0x29,0x59,0x39,0xC1,0x91,0x7D,0xB4,0x61,0xDA,0x4D,0xEC,0x0D,0x8C,0xE1,0xE7,0xC1};
ESP8266WiFiMulti WiFiMulti;
// -------------
#define tx433Pin D4
#define MAX_DELTA 200 // это максимальное отклонение от длительности Pe при приеме
#define Pe 413
#define Pe2 Pe*2
const char ssid[] = "***";
const char pass[] = "***";
String token = "***";
String payload;
int access = 0;
bool admin;
const uint8_t LED_PIN = D1;
void httpsResponse(long id, String finder){
// wait for WiFi connection
if ((WiFiMulti.run() == WL_CONNECTED)) {
//---std::unique_ptr<BearSSL::WiFiClientSecure>client(new BearSSL::WiFiClientSecure);
WiFiClient clients; //----
//---client->setFingerprint(fingerprint);
// Or, if you happy to ignore the SSL certificate, then use the following line instead:
// client->setInsecure();
HTTPClient https;
if(id == -1 && finder != "get"){
Serial.print("[HTTPS] begin...\n");
if (https.begin(clients, HTTPS_RESPONSE)) { // HTTPS (*client, HTTPS_RESPONSE)
Serial.print("[HTTPS] GET...\n");
// start connection and send HTTP header
int httpCode = https.GET();
// httpCode will be negative on error
if (httpCode > 0) {
// HTTP header has been send and Server response header has been handled
Serial.printf("[HTTPS] GET... code: %d\n", httpCode);
// file found at server
if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
payload = https.getString();
Serial.println(payload);
}
} else {
Serial.printf("[HTTPS] GET... failed, error: %s\n", https.errorToString(httpCode).c_str());
}
} else {
Serial.printf("[HTTPS] Unable to connect\n");
}
}else if(finder != "get"){
String getData;
getData =String("id=") + String(id);
Serial.println("Connecting to Server");
https.begin(clients, POST_RESPONSE); // (*client, Post_response)
https.addHeader("Content-Type", "application/x-www-form-urlencoded");
int httpResponseCode = https.POST(getData);
if(httpResponseCode > 0){
String payloads = https.getString();
Serial.println(payloads + "," + payload.toInt());
if (payloads.toInt() == 1) {
Serial.println("Access Granted");
access = 1;
}
else if (payloads.toInt() == 2) {
Serial.println("time");
access = 2;
}
else {
Serial.println("Access Denied");
access = 0;
}
}
}
else if (id != -1 && finder == "get"){
String getData = String("id=") + String(id);
https.begin(clients, ADMIN_RESPONSE);
https.addHeader("Content-Type", "application/x-www-form-urlencoded");
https.POST(getData);
payload = https.getString();
if(payload.toInt() == 1)
admin = true;
else
admin = false;
}
https.end();
}
}
void setup() {
pinMode(tx433Pin, OUTPUT);
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, !HIGH);
// initialize the Serial
Serial.begin(9600);
Serial.println("Starting TelegramBot...");
myBot.wifiConnect(ssid, pass);
if(WiFi.isConnected()){
digitalWrite(LED_PIN, !HIGH);
Serial.println("Connected");
}
else{
Serial.println("Failed");
digitalWrite(LED_PIN, HIGH);
delay(3000);
ESP.reset();
}
// set the telegram bot token
myBot.setTelegramToken(token);
WiFi.mode(WIFI_STA);
WiFiMulti.addAP(ssid, pass);
}
// Transmitter Codes
//-----------------------------------------
void SendBit(byte b) {
if (b == 0) {
digitalWrite(tx433Pin, HIGH); // 0
delayMicroseconds(Pe2);
digitalWrite(tx433Pin, LOW);
delayMicroseconds(Pe);
}
else {
digitalWrite(tx433Pin, HIGH); // 1
delayMicroseconds(Pe);
digitalWrite(tx433Pin, LOW);
delayMicroseconds(Pe2);
}
}
void SendANMotors(long c1, long c2)
{
for (int j = 0; j < 4; j++)
{
// отправляем 12 начальных импульсов 0-1
for (int i = 0; i < 12; i++) {
delayMicroseconds(Pe);
digitalWrite(tx433Pin, HIGH);
delayMicroseconds(Pe);
digitalWrite(tx433Pin, LOW);
}
delayMicroseconds(Pe * 10);
// отправляем первую половину
for (int i = 4 * 8; i > 0; i--) {
SendBit(bitRead(c1, i - 1));
}
// вторую половину
for (int i = 4 * 8; i > 0; i--) {
SendBit(bitRead(c2, i - 1));
}
// и еще пару ненужных бит, которые означают батарейку и флаг повтора
SendBit(1);
SendBit(1);
delayMicroseconds(Pe * 39);
}
}
void OpenANMotors(){
long c1 = 0x20240000 + 0x101 * random(0xff); // AN-MOTORS хотят рандом - получит рандом ))
long c2 = 0x6A19BE24;
SendANMotors(c1, c2);
}
//------------------------------------------------------------------------
//int parkedCounts = 99;
//-------------------------------------------------------
//LOOP
void loop() {
// if(parkedCounts == 99){
// httpsResponse(-1, "");
// parkedCounts = 20 - payload.toInt();
// }
// if there is an incoming message...
if (myBot.getNewMessage(msg) && msg.sender.id != 5296944422) {
if(msg.text.equalsIgnoreCase("/open")){
httpsResponse(msg.sender.id, "");
if(access == 1){
OpenANMotors();
myBot.sendMessage(msg.sender.id, "Welcome Back! Через 15 секунд шлагбаум закроется.");
delay(15000);
OpenANMotors();
}
else if (access == 2)
myBot.sendMessage(msg.sender.id, "Шлагбаум работает в период: с 6 до 23 часов.");
}
else if (msg.text.equalsIgnoreCase("/gs")){
httpsResponse(msg.sender.id,"get");
if(!admin)
myBot.sendMessage(msg.sender.id, "Такой команды не существует");
else{
OpenANMotors();
myBot.sendMessage(msg.sender.id, "Отправлен 1 сигнал ");
}
}
}
//delay(3000);
}