Как сделать два (или более) PIN доступными по URL-адресу сервера?

У меня есть веб-сервер, настроенный на esp8266, который настроен на отключение электрического relay0 на моей 8-портовой релейной плате. Устройство инициализирует relay0 идеально и без ошибок. Но когда я настраиваю второй relay1, я не получаю ответа от своего второго URL-адреса.

// примечание: когда вы пишете на низкий уровень, вы включаете коммутатор. По какой-то причине все наоборот
#include <ESP8266WiFi.h>
#define statusLed 2   // встроенный светодиод для ESP8266-12

const char* ssid = "myssid";
const char* password = "mypass";
 
int switchPin0 = 16;
int switchPin1 = 5;
int switch0;
int switch1;

WiFiServer server(80);
 
void setup() {
  Serial.begin(115200);
  delay(10);
 
  pinMode(statusLed, OUTPUT);
  pinMode(switchPin0, OUTPUT);
  digitalWrite(switchPin0, HIGH);

  // Подключение к сети Wi-Fi
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
 
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  digitalWrite(statusLed, HIGH);
  Serial.println("");
  Serial.println("WiFi connected");
 
  // Запустить сервер
  server.begin();
  Serial.println("Server started");
 
  // Печать IP-адреса
  Serial.print("Use this URL : ");
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  Serial.println("/");
 
}
 
void loop() {
  // Проверьте, подключился ли клиент
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
 
  // Подождите, пока клиент не отправит какие-то данные
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }
 
  // Прочитайте первую строку запроса
  String request = client.readStringUntil('\r');
  Serial.println(request);

  client.flush();

  // Соответствие запросу
 
  int value = HIGH;
  if (request.indexOf("/SWITCH=0") != -1){
    digitalWrite(switchPin0, LOW);
    digitalWrite(statusLed, LOW);   //
    delay(1);
    digitalWrite(statusLed, HIGH);
    // установите время водяного насоса здесь
    delay(8000);
    digitalWrite(switchPin0, HIGH);
    value = HIGH;
    ++switch0;
  } else if (request.indexOf("/SWITCH=1") != -1){
    digitalWrite(switchPin1, LOW);
    digitalWrite(statusLed, LOW);   //
    delay(1);
    digitalWrite(statusLed, HIGH);
    // установите время водяного насоса здесь
    delay(8000);
    digitalWrite(switchPin1, HIGH);
    value = HIGH;
    ++switch1;
  } else {

    }
 
  // Вернуть ответ
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println(""); // не забывайте об этом
  client.println("<!DOCTYPE HTML>");
  client.println("<html>");
 
  client.print("Switch pin is now: ");
 
  if(value == HIGH) {
    client.print("Off");  
  } else {
    client.print("On");
  }
  client.println("<br><br>");
  client.println("Switch 0");
  client.println("Click <a href=\"/SWITCH=0\">here</a>  to send a measured amount<br>");
  client.println("Number of times plant 0 has been fed is ");
  client.println(switch0);
  client.println("<br><br>");
  client.println("Switch 1");
  client.println("Click <a href=\"/SWITCH=1\">here</a>  to send a measured amount<br>");
  client.println("Number of times plant 1 has been fed is ");
  client.println(switch1);
  client.println("</html>");
 
  delay(1);
  Serial.println("Client disconnected");
  Serial.println("");
  digitalWrite(statusLed, LOW);   //
  delay(1);
  digitalWrite(statusLed, HIGH);
 
}

мой счетчик будет обновляться, но вывод реле никогда не срабатывает для relay1. relay0 работает нормально. Я могу поменять местами порты, и тогда будет работать второе реле, а не первое. Я просто не могу справиться и с тем, и с другим.

Как получить второй (или более) релейный порт для инициализации через веб-страницу?

, 👍0


1 ответ


Лучший ответ:

3

Похоже, вы забыли инициализировать switchPin1 как выход.

Добавьте следующее в setup() (например, сразу после соответствующих команд инициализации для switchPin0):

void setup() {
    ....
    pinMode(switchPin1, OUTPUT);
    digitalWrite(switchPin1, HIGH);
    ....
}
,

ух ты, какая ужасная оплошность с моей стороны. Спасибо. Ты все сделал правильно., @brad