Здесь расположены небольшие скетчи (прошивки) для esp8266 для быстрой проверки различных плат и пр. |
|
В прошлом примере мы разобрались с тем как считать код электронного ключа ibutton, теперь разберемся как использовать на деле работу ключа с ЕСП. Для начала нам надо взять код ключа (как взять код в прошлом примере) и по битам вставить в строку в скетче как на рисунке, далее прислоняем ключ и на д4 у нас появляется +3.3 вольта и тухнет светодиод на плате, так как у него инверсная схема включения, затем через две секунды на пине д4 будет 0 вольт и светодиод вновь загорится. В следующем скетче разберемся с полевым транзистором он позволит включать мощные нагрузки такие как замок или лампы автомобиля и можно будет добавить этот скетч с ibutton чтоб собрать полноценное устройство.
#include <OneWire.h> // подключаем библиотеку для работы с протоколом ванваир
OneWire ds(D2); // д2 пин на WeMos D1 mini
byte i; // создаем переменную для счетчика информации с ключа
byte addr[8]; // создаем переменную для массива с восемью значениями (8 переменных в одной)
byte val; // создаем переменную для количества правильных проверок
byte key[8] = {0x1, 0x94, 0x7B, 0x81, 0xB, 0x0, 0x0, 0xDA}; // код нашего ключа
void setup(void) { // функция настроек и разового ввода данных
pinMode(D4, OUTPUT); // настраиваем пин D4 на выход Wemos D1 Mini инверсный светодиод
}
void loop(void) { // запускаем бесконечную обработку кода (цикл)
byte val = 0; // обнуляем переменную для количества правильных проверок
if (!ds.search(addr)) { // если обнулен пин ds(D4) считываем 8 бит в массив, если считалось то идем дальше
ds.reset_search(); // останавливаем считывание с ds(D4)
return; // прекращаем вычисления
}
for ( i = 0; i < 8; i++) { // цикл на 8 действий
if (addr[i] == key[i]) val++; // если считанный бит равен биту из ключа то к переменной val прибавляем 1
}
if (val == 8) { // если переменная val равна 8 (8 правильных битов ключа)
digitalWrite(D4, 1); // светодиод гаснет на пине д4 +3.3 вольта
delay(2000); // пауза 2 секунды
digitalWrite(D4, 0); // светодиод загорается на пине д4 0 вольт
}
ds.reset(); // обновление считывания с ds(D4)
delay(100); // пауза 0.1 секунда
}
Подключаем по схеме.
Из монитора порта с прошлого примера берем код ключа и вставляем в скетч.
Подключение модуля полевого транзистора (MOSFET) к ЕСП. В прошлом примере про электронный ключ ibutton я пообещал что расскажу про подключение MOSFET транзистора для управления различными мощными нагрузками такими как электромагнитные замки, лампы и пр. Для начала возьмем готовый модуль транзистора MOSFET irf520 и самый простой скетч для мигания светодиодом который использовался в самом начале примеров, подключим по схеме и все мы можем управлять различными нагрузками в режиме включить выключить, а в следующем примере используем уже известный скетч ШИМа и добавим к нему плавное включение, далее сами соберем схему шим модуля.
ЕСЛИ НЕ ЗАЛИВАЕСЯ СКЕТЧ В ЕСП, ОТКЛЮЧИТЕ МОДУЛЬ ВРЕМЕННО ОТ ЕСП
void setup() { // функция настроек и разового ввода данных
pinMode(D4, OUTPUT); // инициализация контакта D4 с подключенным инверсным светодиодом
}
void loop() { // запускаем бесконечную обработку кода (цикл)
digitalWrite(D4, 1); // светодиод тухнет а лампа загорается
delay(1000); // ожидание в течение 1 секунда
digitalWrite(D4, 0); // светодиод горит а лампа тухнет
delay(2000); // ожидание в течение 2 секунд
}
Подключаем по схеме.
Продолжаем эксперименты с транзистором MOSFET на плате ЕСП. В прошлом примере был самый простой скетч и готовый модуль, теперь у нас будет с помощью ШИМа плавный пуск, далее рабочий режим, и выключение. Также будем выводить диагностическую информацию о режимах работы в монитор порта. Транзистор возьмем тот же (irf520) что и в модуле так как мало какие транзисторы MOSFET работают от напряжения 3.3 вольта, хоть и на многих заявлено открытие от 2 вольт, а на Ардуино нано такой проблемы нет там 5 вольт выходы и к ним можно подключить хоть транзистор MOSFET на 100 ампер.
ЕСЛИ ПРОБЛЕМЫ С ЗАГРУЗКОЙ СКЕТЧА В ЕСП, ОТКЛЮЧИТЕ МОДУЛЬ ВРЕМЕННО ОТ ЕСП
void setup() // функция настроек и разового ввода данных
{
pinMode(D4, OUTPUT); // д4 пин с инверсным светодиодом настраиваем на выход
analogWriteFreq(100); // выставляем частоту (100.. 40000 Гц)
Serial.begin (9600); // настраиваем скорость монитора порта
}
void loop() // запускаем бесконечную обработку кода (цикл)
{
Serial.println ("Плавный пуск"); //выводим в монитор порта "Плавный пуск"
for (byte i = 0; i <= 254; i++ ) // цикл for (переменную i ставим в ноль; если i меньше 254 продолжаем цикл; прибавляем 1 к i)
{ // цикл for начинается от этой скобки
analogWrite(D4, i); // включаем работу шим на пин д4, 0-254 скважность передаем через i
delay(25); // пауза 0.25 секунды
} // цикл for заканчивается на этой скобке , так и крутится пока i не станет 254 и программа идет дальше
Serial.println ("Рабочий режим"); //выводим в монитор порта "Рабочий режим"
digitalWrite(D4, 1); // подаем на пин д4 3.3 вольта
delay(10000); // ждем 10 секунд
Serial.println ("Выключено"); //выводим в монитор порта "Выключено"
digitalWrite(D4, 0); // выставляем пин д4 в 0 вольт
delay(5000); //ждем 5 секунд
}
Подключаем по схеме.
Подключаем модуль 433МГц к ЕСП и считываем коды пульта. В этом примере поработаем с популярным модулем для приема сигнала на частоте 433Мгц, обычно данный модуль идет в комплекте с модулем передатчика но мы будем только принимать сигналы с пульта. Пульт самый обычный тоже на 433МГц таких пультов великое множество у них от 2 до 8 кнопок, данную связку (пульт и приемник) используют в различных центральных замках автомобиля, в шлагбаумах, воротах и многом другом, в отличии от ИК пультов с ИК приемниками, им не надо прямую видимость и яркое солнце не влияет на прием сигнала. В этом скетче будем считывать коды пульта и выводить их в монитор порта, в следующем будем использовать пульт по назначению - включать что нибудь дистанционно.
#include <RCSwitch.h> // подключаем библиотеку RCSwitch.h берем её в Инструменты/управлять библиотеками
RCSwitch mySwitch = RCSwitch(); // объявили объект(переменные+функции) для работы с передатчиком и назвали его mySwitch
void setup() { // функция настроек и разового ввода данных
Serial.begin(9600); // настраиваем скорость монитора порта
mySwitch.enableReceive(D2); // включаем приемник и указываем пин для работы (д2)
}
void loop() { // запускаем бесконечную обработку кода (цикл)
if (mySwitch.available()) { // если приемник принял какие либо данные
Serial.println(mySwitch.getReceivedValue()); // обрабатываем и выводим полученные данные в монитор порта
mySwitch.resetAvailable(); // обнуляем данные в объекте
}
}
Подключаем по схеме.
Открываем монитор порта и нажимаем кнопки на пульте (если нет антенны на модуле 433МГц то подносим пульт вплотную).
В прошлом примере мы подключали модуль 433 МГц к ЕСП и считывали коды кнопок с пульта, а в этом примере будем управлять с пульта встроенным светодиодом. Светодиод у нас находится на пине д4 и вы можете управлять этим пином электромагнитным замком двери, центральным замком автомобиля или освещением и пр. подключив транзистор MOSFET к ЕСП как в этом примере , позже рассмотрим подключение к ЕСП электромагнитных реле для управления мощной нагрузкой которыми удобно управлять с пульта и реализовать реверс на моторе. В этом скетче мы просто берем считанный код кнопки пульта и занесем его в программу, далее загружаем программу в ЕСП и если код пришедший с пульта совпал у нас потухнет встроенный светодиод затем пауза 3 секунды и светодиод вновь загорится. Другие кнопки пульта подключаются в программе аналогично первой, на них можно настроить другие пины ЕСП или другие алгоритмы работы пина например частое мигание светодиодом.
#include <RCSwitch.h> // подключаем библиотеку RCSwitch.h берем в Инструменты/управлять библиотеками
RCSwitch mySwitch = RCSwitch(); // объявили объект(переменные+функции) для работы с передатчиком и назвали его mySwitch
void setup() { // функция настроек и разового ввода данных
mySwitch.enableReceive(D2); // включаем приемник и указываем пин для работы (д2)
pinMode(D4, OUTPUT); // подключаем пин D4 с инверсным светодиодом (светодиод светит)
}
void loop() { // запускаем бесконечную обработку кода (цикл)
if (mySwitch.available()) { // если приемник принял какие либо данные
if (mySwitch.getReceivedValue() == 11639073) { // обрабатываем и сравниваем полученные данные с нашим кодом
digitalWrite(D4, 1); // светодиод тухнет а на пине д4 +3.3вольта
delay(3000); // ожидание в течение 1 секунда
digitalWrite(D4, 0); // светодиод горит а на пине д4 0 вольт
}
mySwitch.resetAvailable(); // обнуляем данные в объекте
}
}
Подключаем по схеме.
Нажимаем кнопки на пульте (если нет антенны на модуле 433МГц то подносим пульт вплотную).