Релейная плата не работает с nodemcu

Это релейная плата

Я использую nodemcu для создания проекта домашней автоматизации, которым управляет помощник Google. Это код, который я использую, вот этот

#include <ESP8266WiFi.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"

#define Relay1            D0
#define Relay2            D1
#define Relay3            D2
#define Relay4            D3

#define WLAN_SSID       "Subhodip"             // Ваш SSID
#define WLAN_PASS       "09003244135"        // Ваш пароль

/************************* Adafruit.io Setup *********************************/

#define AIO_SERVER      "io.adafruit.com"
#define AIO_SERVERPORT  1883                   // использовать 8883 для SSL
#define AIO_USERNAME    "SubhodipRoy"            // Замените его своим именем пользователя
#define AIO_KEY         "50a98bb44f6b48b69e645badadf8fb577894"   // Замените ключом аутентификации вашего проекта

/************ Global State (you don't need to change this!) ******************/

// Создаем класс ESP8266 WiFiClient для подключения к серверу MQTT.
WiFiClient client;
// или... используйте WiFiFlientSecure для SSL
//Клиент WiFiClientSecure;

// Настройте класс клиента MQTT, передав клиент WiFi и сервер MQTT и данные для входа.
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);

/****************************** Feeds ***************************************/

// Настройте ленту с именем 'onoff' для подписки на изменения.
Adafruit_MQTT_Subscribe Light1 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME"/feeds/Relay1"); // Имя канала
Adafruit_MQTT_Subscribe Light2 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/Relay2");
Adafruit_MQTT_Subscribe Light3 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/Relay3");
Adafruit_MQTT_Subscribe Light4 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/Relay4");

void MQTT_connect();

void setup() {
  Serial.begin(115200);

  pinMode(Relay1, OUTPUT);
  pinMode(Relay2, OUTPUT);
  pinMode(Relay3, OUTPUT);
  pinMode(Relay4, OUTPUT);

  // Подключиться к точке доступа Wi-Fi.
  Serial.println(); Serial.println();
  Serial.print("Connecting to ");
  Serial.println(WLAN_SSID);

  WiFi.begin(WLAN_SSID, WLAN_PASS);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println();

  Serial.println("WiFi connected");
  Serial.println("IP address: "); 
  Serial.println(WiFi.localIP());


  // Настраиваем подписку MQTT на ленту on-off.
  mqtt.subscribe(&Light1);
  mqtt.subscribe(&Light3);
  mqtt.subscribe(&Light2);
  mqtt.subscribe(&Light4);
}

void loop() {

  MQTT_connect();

  Adafruit_MQTT_Subscribe *subscription;
  while ((subscription = mqtt.readSubscription(20000))) {
    if (subscription == &Light1) {
      Serial.print(F("Got: "));
      Serial.println((char *)Light1.lastread);
      int Light1_State = atoi((char *)Light1.lastread);
      digitalWrite(Relay1, Light1_State);

    }
    if (subscription == &Light2) {
      Serial.print(F("Got: "));
      Serial.println((char *)Light2.lastread);
      int Light2_State = atoi((char *)Light2.lastread);
      digitalWrite(Relay2, Light2_State);
    }
    if (subscription == &Light3) {
      Serial.print(F("Got: "));
      Serial.println((char *)Light3.lastread);
      int Light3_State = atoi((char *)Light3.lastread);
      digitalWrite(Relay3, Light3_State);
    }
    if (subscription == &Light4) {
      Serial.print(F("Got: "));
      Serial.println((char *)Light4.lastread);
      int Light4_State = atoi((char *)Light4.lastread);
      digitalWrite(Relay4, Light4_State);

    }
  }


}

void MQTT_connect() {
  int8_t ret;

  // Остановить, если уже подключено.
  if (mqtt.connected()) {
    return;
  }

  Serial.print("Connecting to MQTT... ");

  uint8_t retries = 3;

  while ((ret = mqtt.connect()) != 0) { // connect вернет 0 для подключенных
    Serial.println(mqtt.connectErrorString(ret));
    Serial.println("Retrying MQTT connection in 5 seconds...");
    mqtt.disconnect();
    delay(5000);  // ждем 5 секунд
    retries--;
    if (retries == 0) {
      // в основном умираю и жду, пока WDT перезагрузит меня
      while (1);
    }
  }
  Serial.println("MQTT Connected!");

}

Подключение контактов, как указано ниже

VIN-->VCC D0--> IN1 Д1 --> ВХ2 D2 --> IN3 D3-->IN4 Земля-->Земля

Но только светодиоды IN2,IN3 и IN4 на плате реле светятся, IN1 не светится и реле не включаются/выключаются...

Кто-нибудь, пожалуйста, помогите....

Пожалуйста, дайте решение... Почему не включаются реле?

Пожалуйста, ответьте как можно скорее... Я очень обеспокоен... Даже не могу спать по ночам....

, 👍0

Обсуждение

не работает как? как он подключен? Вы питаете реле 3,3 В?, @Juraj

Действительно ли принимается сигнал из облака? Пожалуйста, проверьте это, выполнив последовательную печать в этом случае. Если облачный сигнал получен правильно, предоставьте меньший тестовый код без всего MQTT и Wifi, только переключая реле. Это облегчило бы отладку, @chrisl

почему вы говорите, что ваше соединение использует 6 проводов, когда на картинке показано только 5 проводов?, @jsotola

Я питаю реле с помощью nodemcu с 5 В и подключаю соединения, как указано выше ..., @Subhodip Roy

Да, данные из облака поступают, светодиод на плате реле включается/выключается, кроме светодиода IN1, который не светится, за исключением того, что остальные 3 светодиода на плате реле работают, но реле не работают, @Subhodip Roy

Извините... я забыл последний контакт, @Subhodip Roy

Да, у меня нет нового обновления, кто-нибудь, пожалуйста, предскажите причину этого., @Subhodip Roy

нарисуйте картинку с проводкой. эта релейная плата обеспечивает полностью отдельную цепь для реле, сигнализирующих через оптопары., @Juraj

https://arduinoprosto.ru/q/60471/5v-10a-4-channel-relay-to-2-lights15w-light-in-series-in-220v-ac-supply/60484#60484, @Juraj

Вы можете попробовать подключить каждый релейный вход по отдельности сначала к контакту 3V nodemcu, а затем к земле. Реле должно переключаться. Приложите ухо близко к реле и попытайтесь услышать щелчок. Если этого не происходит, попробуйте с 5В. Проверьте, правильно ли заземление и Vcc подключены к плате реле. Если по-прежнему ничего не происходит, возможно, ваша релейная плата сломана., @chrisl


1 ответ


1

Судя по описанию и комментариям, проблема связана с аппаратным обеспечением. Я рекомендую вам выполнить тест релейного модуля (без NodeMCU):

  1. Попробуйте включить/выключить реле, просто подключив источник питания, который вы используете для питания NodeMCU. Подключите VCC–5V, GND–GND и один из каналов IN напрямую к контакту 5V. Если реле включается, попробуйте другой канал. Если нет, попробуйте подключить IN к GND вместо 5 В (обратная логика).
  2. Если 1. не сработало, проверьте желтую перемычку с правой стороны платы реле. Перемычка должна быть установлена (на случай, если вы не хотите использовать другой независимый источник питания только для реле).
  3. Если 2. не сработало, проверьте, не предназначена ли плата реле для использования с источником питания 12 В постоянного тока (проверьте маркировку реле).

На этом этапе вы должны знать, все ли каналы релейного модуля работают, а также логику переключения (инверсия/неинверсия). Следующим шагом должно быть подключение релейного модуля к NodeMCU и запуск примера «мигания» для всех каналов. Если все работает хорошо, мы будем уверены, что проблема НЕ связана с аппаратным обеспечением...

,

1. Я использую блок питания, как мне подключить перемычку к блоку питания. 2. Куда подключать желтый провод. 3. Я уверен, что это 5 В., @Subhodip Roy

1. Существует больше способов подключения источника питания. Вероятно, проще всего подключить источник питания к NodeMCU и использовать контакт GND и 5V. 2. Не провод, а перемычка. Это желтая штука в правом нижнем углу платы реле., @JSC