Здесь расположены небольшие скетчи (прошивки) для esp8266 для быстрой проверки различных плат и пр. |
|
Монитор порта у нас может работать не только на прием из микроконтроллера как в этом примере , но и на отправку сообщений в микроконтроллер. Данная функция очень удобна для различных тестов наших будующих прошивок особенно тогда когда не все элементы управления готовы, например у нас еще нет кнопок но охота поуправлять устройством тогда мы просто подключаем монитор порта на прием и управляем, так же допустим нет термодатчика который передает температуру в цифре и спомощью монитора порта мы можем передать различную температуру и посмотреть как работает наше устройство. В прошивке мы ждем постоянно информацию из монитора порта и как только она приходит такая как мы хотим срабатывает светодиод на плате, на ЕСП светодиод инвертируемый и это означает как только мы подадим на него питание то он потухнет, а как питание пропадет светодиод загорится. Число можно передавать любое, например 53 как у нас в прошивке, и таким образом мы можем управлять хоть сотней действий на плате, единственное кроме нуля так как ноль и так все время передается
void setup() { // функция настроек и разового ввода данных
Serial.begin (115200); // выставляем скорость на порту
pinMode(D4, OUTPUT); // инициализация контакта Wemos D1 Mini светодиод на GPIO2 (D4)
}
void loop() { // запускаем бесконечную обработку кода (цикл)
if (Serial.parseInt() == 53) { // Если (Число из монитора порта = 53) то выполняем команды до конца скобки
digitalWrite(D4, 1); // На пине D4 к которому подключен светодиод устанавливаем 1 это +3.3 вольтa
delay(2000); // ждем 2000 милисекунд - 2 секунды
digitalWrite(D4, 0); // На пине D4 к которому подключен светодиод устанавливаем 0 это 0 вольт
} // команды из if выполняются до этой скобки
}
Для плавного включения и работы в различных режимах используют ШИМ, многих он бесит в экранах смартфонов, но это самый простой способ регулирования мощности. ШИМ можно применить для регулировки скорости и плавного набора скорости различых моторов, например квадрокоптеров, можно изменять свечение ламп и светодиодов, регулировать нагрев, например паяльника, утюга или электроплитки, а так же с помощью ШИМ можно предавать информацию о работе, например с помощью ШИМ передают информацию о давлении некоторые датчики фреона в автомобиле. ШИМ в есп реализован довольно просто, можно использовать почти все пины для этого и регулировать частоту в приличных пределах. В нашем скетче мы будем управлять встроенным светодиодом, для начала выставим частоту в 100 герц и настроим выход на пин д4, затем в цикле включим ШИМ на пине д4 и выставим скважность. Скважность это то чем управляет шим сигнал, чем больше скважность тем больше мощности передается на устройство, смотрите рисунок ниже, но в есп светодиод у нас инверсный он будет показывать все наоборот.
void setup() // функция настроек и разового ввода данных
{
analogWriteFreq(100); // выставляем частоту (100.. 40000 Гц)
pinMode(D4, OUTPUT); // д4 пин настраиваем на выход
}
void loop() // запускаем бесконечную обработку кода (цикл)
{
analogWrite(D4, 175); //включаем работу шим на пин д4, 0-255 скважность
}
Давайте измерим с помощью ЕСП частоту, этот пример поможет делать различные спидометры, тахометры и пр. В прошлом примере мы генерировали ШИМ сигнал давайте померяем его частоту, придется обьеденить два скетча один про монитор порта , а второй про шим сигнал с новыми функциями, таким образом мы будем создавать сигнал, измерять его и выводить в монитор порта с одной платы ЕСП. Для измерениянам пригодится такая функция pulseIn( ) которая будет измерять время сигнала в микросекундах на том пине который мы захотим, далее мы выведем полученый реультат в монитор порта. Можно доработать данную прошивку и она будет измерять и скважность, потом собрать схемку преобразователя сигнала в прямоугольные импульсы 3.3 вольта и у нас получится отличный частотомер с измерением скважности, далее можно вывести информацию на отдельный экранчик и подключить аккумулятор - будет неплохое автономное устройство для измерения и генерирования шим сигнала!
int Htime; // целочисленная переменная для хранения времени высокого логического уровня
int Ltime; // целочисленная переменная для хранения времени низкого логического уровня
float Ttime; // переменная для дробей хранит общую длительности периода
float frequency; // переменная для дробей хранит частоту
void setup() // функция настроек и разового ввода данных
{
Serial.begin(9600); // выставляем скорость на порту
pinMode(D2, INPUT); // д2 пин настраиваем на выход
pinMode(D4, OUTPUT); // д4 пин настраиваем на выход
analogWriteFreq(1000); // выставляем частоту (100.. 40000 Гц)
}
void loop() // запускаем бесконечную обработку кода (цикл)
{
analogWrite(D4, 127); //включаем работу шим на пин д4, 0-255 скважность (127 = 50% скважность)
Htime = pulseIn(D2, HIGH); // прочитать время высокого логического уровня
Ltime = pulseIn(D2, LOW); // прочитать время низкого логического уровня
Ttime = Htime + Ltime; // складываем низкий и высокий логический уровень
frequency=1000000/Ttime; // получение частоты из микросекунд
Serial.println(frequency); // выводим в монитор порта результат
delay(2000); // ожидание в течение 2 секунд
}
Записываем информацию во внутреннюю энергонезависимую память EEPROM ЕСП. В некоторых проектах нам надо сохранять настройки, например в радио сохраняются настройки радиостанций, в часах настройка будильника, в различных измерителях настройки пределов работы, для этого используется внутренняя память EEPROM, в ЕСП она эмулируется в микросхеме флеш памяти и составляет 4 килобайта. Давайте научимся в нее что либо записывать, в данном скетче при включении ЕСП будет записыватся число 251 в память и это число останеся там даже если мы отключим питание или зашьем другую прошивку, пока мы не изменим сами или не стерем епром то число там так и останется. Для прочтения данного числа будем использовать другой скетч (прошивку).
#include <EEPROM.h> // подключаем библиотеку EEPROM.h
int addr = 0; // eeprom начальный адрес данных
int data = 251; // помещаем в пременную любое число например 251
void setup() { // функция настроек и разового ввода данных
EEPROM.begin (4); // указание размера области памяти в байтах
EEPROM.write (addr, data); // подготовка данных
EEPROM.commit (); // Сохранить изменения в данных
}
void loop() { // функцию бесконечного цикла не используем
}
Чтение информации из энергонезависимой памяти EEPROM в ЕСП. В прошлом скетче мы записывали информацию в EEPROM, теперь давайте прочитаем и выведем информацию в монитор порта . Чтение информации необходимо для восстановления настроек наших девайсов при включении, для удобного их использования, например радиоприемник будет настроен на нужную частоту.
#include <EEPROM.h> // подключаем библиотеку EEPROM.h
int addr = 0; // eeprom начальный адрес данных
int data = 0; // переменная для данных с EEPROM
void setup() { // функция настроек и разового ввода данных
Serial.begin(115200); // выставляем скорость в мониторе порта
EEPROM.begin (4); // указание размера области памяти в байтах
}
void loop() { // запускаем бесконечную обработку кода (цикл)
int data = EEPROM.read (addr); //чтение из EEPROM
Serial.println(data); // выводим в монитор порта число из EEPROM
delay(2000); // ожидание в течение 2 секунд
}