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);
}

Ниже приведен снимок экрана с последовательного монитора

Вот моя фотография

, 👍-1


1 ответ


3

Эта строка:

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. Если да, то вам следует это изменить.

,

LED — это номер контакта, а не состояние контакта., @gre_gor

хорошая точка зрения! Я уверен, что @Kenneth WA может использовать это как упражнение для читателя, чтобы исправить эту часть его кода :), @romkey

Большое спасибо, я очень ценю помощь, реструктурировал свой код, теперь он работает, @Kenneth W. A