NodeMCU 1.0 - Порт D3, реле и насос не загружаются
Я пытаюсь создать систему полива с использованием NodeMCU 1.0, реле и нескольких насосов.
В настоящее время у меня уже используются порты D0, D1, D2, D5, D6, D7, D8. Я пытаюсь использовать порт D3 (GPIO0) следующим образом, но когда я подключаю или перезагружаю NodeMCU, иногда (!) при загрузке запускается реле, насос начинает поливать, а плата не завершает загрузку.
Единственные способы начать игру следующие:
- Отключите ток от реле
- Отключите D4, пока загрузка не закончится
- Отсоедините насос от реле
Я попробовал заменить насос светодиодом и резистором, и у меня не возникло никаких проблем. Я также попробовал поставить резистор перед насосом и он запустился (но насос не работает).
При загрузке моя первая команда (после определения переменной и объекта) устанавливает D3 как HIGH)
#define D0 16
#define D1 5
#define D2 4
#define D3 0
#define D4 2
#define D5 14
#define D6 12
#define D7 13
#define D8 15
#define A0 17
#define TX 1
#define RX 3
#define MSG_BUFFER_SIZE 128
// Инициализация клиентов
WiFiClient espClient;
PubSubClient client(espClient);
unsigned long lastMsg = 0;
char msg[MSG_BUFFER_SIZE];
int iteration = 0;
int ID = -1;
int first_run = 1;
void setup() {
//Начальная настройка
digitalWrite(D3, HIGH);
pinMode(D3, OUTPUT);
delay(4000);
Serial.begin(9600);
...
}
Я действительно не понимаю, в чем проблема.
@Timmy, 👍1
Обсуждение1 ответ
D3 подключен к кнопке FLASH на плате. Она используется для управления режимом загрузки при запуске. Если этот вывод имеет низкий уровень при запуске, он останется в режиме флэш-памяти, готовый к приему новой программы. Если он имеет высокий уровень при запуске, он выполнит сохраненную программу (обычная загрузка).
Вероятно, здесь происходит следующее: ваша релейная плата подтягивает D3 к LOW, когда она подключена (вероятно, лишь немного сильнее, чем встроенный подтягивающий резистор NodeMCU). Вероятно, на ее входном контакте есть подтягивающий резистор (чтобы реле оставалось открытым по умолчанию). Затем NodeMCU видит, что D3 находится в состоянии LOW при запуске, и остается в режиме флэш-памяти, никогда не выполняя ваш код. Чтобы NodeMCU мог выполнить ваш код, D3 должен быть в состоянии HIGH при запуске! Если это происходит случайным образом, то подтягивающие и подтягивающие резисторы, вероятно, имеют схожие значения, поэтому шум в системе может переключать состояние контакта.
Теперь у вас есть разные возможности :
- Вы можете удалить резистор pulldown с платы реле, так что резистор pullup на NodeMCU может подтянуть штифт к HIGH во время запуска, пока ваша программа не установит его снова в LOW. Тогда вам придется смириться с тем фактом, что реле будет включено во время запуска NodeMCU, управляя вашим насосом в это время.
- Вы можете сделать вышеописанное, но также переместить соединения насоса на контакт NC (нормально замкнутый) реле. Это означает, что насос активируется, когда D3 имеет НИЗКИЙ уровень, и деактивируется, если он имеет ВЫСОКИЙ уровень, поэтому логика инвертируется. Если D3 имеет ВЫСОКИЙ уровень при запуске, то насос не работает. Предостережение в том, что если питание насоса включено, а питание NodeMCU/реле выключено, насос будет работать.
- Вы можете использовать другой вывод для этой функции. Тот, который свободен от специальной функции загрузки. Мы не знаем, что вы делаете с другими выводами. D3 хорошо подойдет для входного вывода, которому нужен подтягивающий резистор (например, для подключения кнопки). Или выходного вывода, где состояние при запуске не диктуется внешним устройством.
Спасибо за этот драгоценный ответ. Первый вариант (удалить pulldown) мне кажется нормальным. Как мне убрать pulldown и что это такое? У меня реле SRD-05VDC-SL-C, @Timmy
Я пробовал установить NC реле, но результат тот же. Иногда (на самом деле часто, как 4 раза из 5) плата не запускается и продолжает мигать. Продолжайте тестировать другие 2 способа, @Timmy
Этот номер детали — это только само реле, а не модуль реле, который вы используете. Можете ли вы предоставить ссылку на продукт для этого? И при выполнении моего второго пункта вам все равно нужно удалить резистор стягивания с вашего модуля реле. Использование порта NC реле ничего не меняет на сигнальной линии. Мой второй пункт — только предотвратить работу насоса во время запуска NodeMCU, и это компромисс. Лучше всего было бы действительно использовать другой вывод., @chrisl
Я купил это реле (https://it.aliexpress.com/item/1005005865597217.html). Это модель с 4 каналами., @Timmy
- Как заставить 5-вольтовое реле работать с NodeMCU
- NodeMCU продолжает отключаться
- Ультразвуковой датчик (HC-SR04), регистрирующий случайное расстояние
- Разница между этими двумя реле (экран мини-реле D1 и одиночное реле 5 В)
- 4-канальное реле 5 В, 10 А на 2 лампы 15 Вт, последовательно соединенные с источником питания 220 В переменного тока.
- Помощь с интеллектуальным коммутатором на базе NodeMCU
- Может ли Vin из ESP работать со многими датчиками напряжения и реле?
- ESP8266 не подключается к Wi-Fi
что, по-вашему, должно делать верхнее реле? ... где находится насос? ... где находится источник питания?, @jsotola
D3 - это io 0, вывод выбора режима загрузки. Он должен быть HIGH для нормальной загрузки. NodeMCU имеет подтягивающий резистор., @Juraj
@jsotola ralay должен включать и выключать водяной насос, когда я получаю определенное сообщение mqtt. Насос — это белая штука на картинке, и он физически находится рядом с датчиком. Питание подается через USB на nodemcu, @Timmy
@Juraj Я установил D0 на высокий уровень, это неправильно?, @Timmy