esp8266 WiFi не может подключиться к PHP- серверу
Я использую магнитный поплавковый датчик для контроля уровня воды в резервуаре. Я использую плату ESP8266.
Я пытаюсь отправить собранные им данные на страницу php на хосте под названием «weris.link». Я проверял ssid и пароль Wi-Fi множество раз, но каким-то образом соединение с сервером все равно не удавалось.
Совершил ли я ошибку?
Вот мой код:
#include <ESP8266WiFi.h>
#define FLOAT_SENSOR D2 // номер контакта кнопки
#define LED D8 // номер контакта светодиода
const char* server = "weris.link"; // аламат-сервер
const char* ssid = "aBee"; // SSID роутер Wi-Fi
const char* password = "xxxxx"; // пароль Wi-Fi
const char* SensorID = "Water_Level_Kelompok_1.Unsrat"; // идентификационный датчик
const char* count1= "Water Tank Full";
const char* count2= "Water Level Low";
const char* recommend1= "Turn Off Flow";
const char* recommend2= "Turn on Flow";
WiFiClient client;
void setup()
{
Serial.begin(115200);
// инициализируем вывод светодиода как выход:
pinMode(LED, OUTPUT);
// инициализируем вывод кнопки как вход:
pinMode(FLOAT_SENSOR, INPUT_PULLUP);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi Connected");
}
void loop()
{
if(digitalRead(FLOAT_SENSOR) == LOW)
{
// включаем светодиод:
digitalWrite(LED, HIGH);
Serial.println(count1);
}
else
{
// выключаем светодиод:
digitalWrite(LED, LOW);
Serial.println(count2);
}
// датчик данных Мулай Кирим
if (client.connect(server,80 && LED == HIGH)) {
Serial.print("Posting data...");
digitalWrite(BUILTIN_LED, LOW);
Serial.println("Tank Full: " + String(count1) + ", Tank Level Below Normal: " + String(count2));
// получение данных GET /path к файлу PHP с данными
client.println("GET /iot/terima.php?data1=" + String(count1) + "&data2=" + String(recommend1) + "&sid=" +SensorID+ " HTTP/1.1");
client.println("HOST: weris.link");
client.println("Connection: close");
client.println();
client.stop();
Serial.println();
digitalWrite(BUILTIN_LED, HIGH);
}
else if(client.connect(server,80 && LED == LOW)) {
client.println("GET /iot/terima.php?data1=" + String(count2) + "&data2=" + String(recommend2) + "&sid=" +SensorID+ " HTTP/1.1");
client.println("HOST: weris.link");
client.println("Connection: close");
client.println();
client.stop();
Serial.println();
digitalWrite(BUILTIN_LED, HIGH);
}
else {
Serial.println("Koneksi ke server gagal");
}
delay(5000);
}
Ниже приведен снимок экрана с последовательного монитора
@Kenneth W. A, 👍-1
1 ответ
Эта строка:
if (client.connect(server,80 && LED == HIGH)) {
определенно не принесет ничего полезного. И это не строка:
else if(client.connect(server,80 && LED == LOW)) {
В обеих строках вы берете логическое И числа 80 и результат тестирования светодиода.
Поставьте закрывающую скобку в нужное место:
if (client.connect(server,80) && LED == HIGH) {
и
else if(client.connect(server,80) && LED == LOW) {
Так написано, что вы все равно подключаетесь дважды, если светодиод горит НИЗКИМ светом. Лучше бы код написал:
if (client.connect(server,80)) {
if(LED == HIGH) {
do stuff
} else {
do other stuff
}
}
Еще лучше было бы, чтобы в разделах делать что-то и делать другое просто устанавливались некоторые переменные, а затем писался код для однократного взаимодействия с веб-сервером, используя эти переменные. Наличие единственного экземпляра кода поможет избежать ошибок в будущем, если вам когда-нибудь понадобится его изменить - принцип программирования DRY (не повторяйте себя).
Кроме того, я надеюсь, что вы не просто опубликовали здесь свой пароль Wi-Fi. Если да, то вам следует это изменить.
- Wemos D1 mini зависает через несколько минут
- Как разрешить междоменные запросы на ESP8266 WebServer
- Почему мы используем client.flush() в коде, когда мы подключаем Esp8266 к Интернету или серверу?
- Управление реле 5В с помощью Wemos D1 R1
- Создать один сервер в режиме точки доступа, а другой - в режиме станции.
- Веб-сервер ESP8266 недоступен через 2 минуты после сброса
- Веб-сервер ESP8266 отображает только текст, даже если тип контента — текст/HTML.
- Веб-сервер ESP8266 не отвечает
LED
— это номер контакта, а не состояние контакта., @gre_gorхорошая точка зрения! Я уверен, что @Kenneth WA может использовать это как упражнение для читателя, чтобы исправить эту часть его кода :), @romkey
Большое спасибо, я очень ценю помощь, реструктурировал свой код, теперь он работает, @Kenneth W. A