Ответ на запрос Eratic PHPPhp

Кемеровские программисты php общаются здесь
Anonymous
Ответ на запрос Eratic PHP

Сообщение Anonymous »

У меня есть веб-страница, которая контролирует и вводит состояния переключателей в базу данных.
Я подтверждаю, что это работает.
Существует программа php для чтения состояний переключателей из базы данных с помощью команды Get и отправки эти данные в формате json на удаленный микропроцессор.
Пока я сижу за Nat, ESP32 периодически вызывает, чтобы получить эти состояния переключателей, и соответствующим образом меняет состояния выводов процессора для управления.
Из опыта опроса данных Json на уровне микропроцессора и изменение статуса контакта также работает.
Проблема..
Я могу вызвать php напрямую через веб-интерфейс (Chrome, Firefox) и получить состояние контакта показания точны в реальном времени.
Однако при выполнении того же запроса через Esp первоначальные показания при запуске являются точными, но последующие изменения иногда бывают ошибочными, но обычно повторяют исходное состояние. Это было подтверждено печатными ответами на уровне микропроцессора.
Это прояснится через разное время, после чего показания на этот момент станут значениями по умолчанию.
Выключение и перезагрузка микропроцессора не имеет никакого значения - как ни странно, он возвращается к значениям по умолчанию. до последнего исходного состояния.!
Как будто состояния через вызов Esp где-то кэшируются и повторяются, в отличие от прямого веб-запроса через php, который действительно показывает изменения. p>
Это проблема со скриптом? и любые идеи, как это исправить.
Код:


Служба хостинга (Blue Host) утверждает, что это проблема со скриптами. Кеширование сервера было очищено без изменения ответа. Я не могу проверить журналы базы данных, поскольку это учетная запись общего хостинга.
Меня беспокоит постоянство своевременного ответа. Иногда это работает, иногда просто зависает.
Ниже приведены выдержки из кода ESP, если это как-то повлияет
#include
#include

//Other usual libraries

// Define GPIO pins (adjust these to match the configuration)
const int gpioPins[] = { 12, 13, 14, 17, 18, 19, 26, 27, 32, 33 }; // GPIO pins, adjust as needed
const int numPins = sizeof(gpioPins) / sizeof(gpioPins[0]);

TaskHandle_t Task1; // program Heartbeat
TaskHandle_t Task2; // Read Switch State
TaskHandle_t Task3; // wifi watchdog
TaskHandle_t Task4; // email engine & pump status

//---------------------------------

// Task 2 - Pins Status

//Get Data from Switch_State Table

void fetchData() {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin(url);
int httpCode = http.GET();

if (httpCode == HTTP_CODE_OK) {
String payload = http.getString();
Serial.println("Received payload:");
Serial.println(payload);

// Parse JSON
DynamicJsonDocument doc(1024);
deserializeJson(doc, payload);

for (JsonObject elem : doc.as()) {
int gpio = elem["gpio"];
int state = elem["state"];

// Find the pin and set its state
for (int i = 0; i < numPins; i++) {
if (gpio == gpioPins) {
pinMode(gpioPins, OUTPUT);
digitalWrite(gpioPins, state);
Serial.printf("Set GPIO %d to state %d\n", gpioPins, state);
break;
}
}
}
} else {
Serial.printf("Failed to fetch data, HTTP code: %d\n", httpCode);
}

http.end();
} else {
Serial.println("WiFi not connected");
}
}

// Check Pin State

void Sstate(void * pvParameters) {
for (;;) {

TickType_t xLastWakeTime;
const TickType_t xFrequency = 30000; // TESTING check every 30 sec (/ portTICK_PERIOD_MS ?)
//Initialise the xLastWakeTime variable with the current time.
xLastWakeTime = xTaskGetTickCount ();
for ( ;; )
{
//Wait for the next cycle.
vTaskDelayUntil( &xLastWakeTime, xFrequency );

Serial.print("Pin check running on core ");
Serial.println(xPortGetCoreID());
Serial.println ();

fetchData () ;
}

}
}



Подробнее здесь: https://stackoverflow.com/questions/790 ... y-response

Вернуться в «Php»