Феномен Blynk и его альтернативы. Мигание встроенным на плату Arduino светодиодом Blink проекты
Еэспэшники — вливайтесь в ряды блинкеров!
Сегодня мы за 5 минут настроим управление ESP8266 с вашего смартфона (iOS или Android) с помощью нового облачного сервиса Blink . Видео и подробности под катом.
Установите приложение Blynk на смартфон
Зарегистрируйтесь в приложении и создайте новый проект.
Введите название проекта, например ESP8266 . В поле Hardware Model выберите ESP8266 . (надеюсь, что вы заметите впечатляющий список поддерживаемого оборудования) Автоматически сгенерированный Auth Token отправьте на свой почтовый ящик.
После нажатия на кнопку Create вам станет доступно пустое поле для проектирования UI вашей панели управления ESP8266.
Жмете на плюсик вверху справа — появится панель инструментов Widget Box для добавления виджетов на вашу панель управления. Стоит заметить, что список виджетов еще будет пополняться.
Для пробы выберем тип виджета Button — этот виджет сразу добавится на вашу панель. Отредактируйте его одним прикосновением. Название можно не заполнять, чуть правее можно выбрать цвет индикатора, в поле OUTPUT PIN выберите справа Digital , а слева любой свободный пин GPIO . Ниже переключите тип кнопки на Switch .
Далее установите библиотеку Blynk в Arduino IDE. В этом вам поможет официальная инструкция . Также можете взять библиотеку самую последнюю версию прямо из репозитария и установить вручную. Далее выбираем пример ESP8266_Standalone и прописываем в нем Auth Token , который мы получили по почте, SSID и пароль вашей WiFi сети. Компилируем и заливаем скетч в ESP8266.
Вот, собственно, и все.
Возвращаемся к нашему приложению на смартфоне, жмем маленький треугольничек, похожий на кнопку Play, в верхнем правом углу и переходим из режима редактирования проекта в режим управления ESP8266 и жмем созданные нами кнопочки и мигаем светодиодами, как на видео в начале статьи.
На этом уроке Вы научитесь программировать свою плату Arduino на примере мигания встроенным светодиодом.
Необходимые элементы
Для данного примера Вам понадобится плата Arduino (в данном случае – Arduino Uno R3 , но Вы сможете проработать данный пример, имея в наличии и другую плату) и кабель USB (типа A (4х12 мм) – B (7х8 мм) – более подробно можно почитать на Вики).
Что такое ” L” светодиод
На Arduino Uno присутствуют ряды коннекторов типа мама по бокам платы, которые используются для подключения периферийных электронных устройств или “шилдов” .
Кроме того, на плате присутствует встроенный светодиод (англ. – LED), которым Вы можете управлять с помощью скетчей. Этот встроенный светодиод условно назовем “L” светодиод, как это принято на многих англоязычных ресурсах.
Расположение данного светодиода на плате отмечено на фото снизу.
Загрузка примера “Blink” (мигание) в Arduino IDE
При подключении новой платы к персональному компьютеру, обратите внимание, что светодиод начинает мигать, так как все платы от производителей поступают с уже “залитым” скетчем “Blink ”.
На этом уроке мы перепрограммируем нашу плату, изменив частоту мигания светодиода. Не забудьте настроить оболочку Arduino IDE и выбрать нужный серийный порт, по которому Вы подключили Вашу плату.
Пришло время проверить Ваше подключение и запрограммировать плату.
В оболочке Arduino IDE существует большая коллекция скетчей, которые уже готовы к использованию. Среди них находится и пример, который заставляет мигать “L” светодиод.
Откройте пример “Blink”, который находится в пункте меню File – Examples – 01.Basics
После открытия, расширьте окно оболочки Arduino IDE, чтобы Вы могли весь скетч в одно окне.
Скетчи из примеров, включенные в Arduino IDE предусматривают режим “только чтение” (“read only”). То есть, загрузить их на плату Вы сможете, но после изменения кода, Вы не сможете их сохранить в том же файле.
Мы будем изменять скетч, так что в первую очередь Вам необходимо сохранить собственную копию, которую Вы сможете изменять.
Вы сохранили копию скетча “Blink” в Вашей библиотеке. Теперь открыть этот файл Вы можете в любой момент, перейдя по вкладке File – Scetchbook.
Загрузка примера “Blink” (мигание) на плату
Подключите свою плату Arduino к компьютеру с помощью USB и проверьте тип платы (“Board type”) и серийный порт (“Serial Port”), по которому она подключена.
Текущие настройки отображаются внизу окна оболочки Arduino IDE
Кликните на кнопку “Загрузить” (“Upload”)
Во время загрузки в нижней части окна IDE появятся ползунок загрузки и сообщения. Вначале появляется фраза “Компилирование” (“Compiling scetch..”), что означает процесс конвертирования Вашего скетча в формат, подходящий для загрузки на плату Arduino.
В конце статус сменится на ”Загрузка завершена” (“Done uploading”). В сообщении, которое появится в текстовой строке отобразится информация о том, что загруженный скетч занимает 1,084 байта из 32,256 доступных.
Иногда при компиляции у Вас может возникнуть подобная ошибка:
Причин может быть несколько: Вы не подключили плату к компьютеру; Вы не установили необходимые драйвера; Вы выбрали некорректный серийный порт.
Пояснения к скетчу “Blink”
Ниже представлен код скетча “Blink”.
Turns on an LED on for one second, then off for one second, repeatedly.
This example code is in the public domain.
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
pinMode(led, OUTPUT);
delay(1000); // wait for a second
Первое, на что стоит обратить внимание: в данном скетче множество “комментариев”. Обратите внимание, что комментарии не являются инструкцией по работе программы. Это исключительно пояснения отдельных функций и задач, которые выполняются на определенном этапе кода. Это не обязательная часть кода. Все между символами /* и */ в верхней части скетча – это комментарии, в которых описаны задачи программы. Так же есть комментарии, которые ограничиваются одной строкой. Они начинаются с символов // и заканчиваются по умолчанию в конце строки. Первая важная, по сути, часть данного кода это строка:
В комментариях над строкой указано, что мы присваиваем имя пину, к которому подключен светодиод. На большинстве плат Arduino это будет 13 пин. Дальше используется функция “Setup”. Опять-таки, в комментариях указано, что функция срабатывает после нажатия кнопки “reset”. Также эта функция срабатывает, когда плата перезагрузится по каким-либо другим причинам. Например, подача питания или после загрузки скетча.
// the setup routine runs once when you press reset:
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
Каждый скетч Arduino обязан включать в себя функцию “setup” и часть, в которую вы можете добавлять собственные инструкции, заключенные между { }. В нашем примере в функции присутствует только одна команда, в которой указано, что пин, который мы используем, настраивается на “вывод” (“Output”). Также обязательным для любого скетча является функция цикла “Loop”. В отличие от функции “Setup ”, которая отрабатывает один раз после перезагрузки, функция “Loop” после окончания работы команд, вновь запустится.
// the loop routine runs over and over again forever:
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
В теле функции “Loop” светодиод включается (HIGH), данное значение задерживается на 1000 миллисекунд (1 секунда), светодиод отключается (LOW) и остается выключенным на 1 секунду, после чего цикл повторится.
Изменение частоты мигания светодиода
Для того, чтобы обеспечить более частое мигание светодиода, необходимо изменить параметр, указываемый в скобках () в команде “delay ”.
Как уже было указано, период задержки указывается в миллисекундах. То есть, для того, чтобы заставить светодиод мигать в два раза чаще, необходимо изменить значение с 1000 на 500. В результате, пауза между включением/выключением светодиода составит половину секунды и светодиод будет мигать быстрее.
Для проверки, не забудьте загрузить измененный скетч на плату Arduino.
В этой статье мы сделали попытку собрать в одном месте ссылки на все самые популярные библиотеки Ардуино, а также подготовили подборку наиболее популярных библиотек. Рано или поздно, любой ардуинщик сталкивается с необходимостью использования той или иной библиотеки. Ведь использование готового кода сильно сокращает время на программирование. Надеемся, что собранные в одном месте и снабженные ссылками для скачивания и короткими примерами использования, сведения о популярных библиотеках помогут вам в ваших проектах.
Библиотека ардуино – это некий программный код, хранящийся не в скетче, а во внешних файлах, которые можно подключить к вашему проекту. В библиотеке хранятся различные методы и структуры данных, которые нужны для упрощения работы с датчиками, индикаторами, модулями и другими компонентами. Использование готовых программ существенно упрощает работу над проектами, потому что можно сосредоточиться на основной логике, не тратя время на множество мелочей.
Сегодня создано огромное количество библиотек, которые можно легко найти и скачать в интернете. Подавляющее большинство библиотек распространяются по свободной лицензии, поэтому необходимости в поиске “пиратских” версий нет. Главное, это научиться .
Стандартные библиотеки Ардуино
Начать знакомство с библиотеками лучше с официального сайта, на котором можно найти внушительный список стандартных модулей и ссылки на официальные библиотеки партнеров.
Список встроенных библиотек (они поставляются вместе с дистрибутивом Arduino IDE):
- EEPROM
- Ethernet / Ethernet 2
- Firmata
- LiquidCrystal
- Servo
- SoftwareSerial
- Stepper
Подборка библиотек в одном архиве
Если у вас нет времени на детальный анализ множества сайтов и вы хотите скачать все необходимое для работы с внешними устройствами Ардуино в одном архиве, мы подготовили список 40 самых популярных библиотек. Просто и распакуйте его содержимое (папку libraries) в папку Arduino.
Библиотеки для экранов, индикаторов и дисплеев
Библиотека I2C
Библиотека, предназначенная для работы периферийного устройства по протоколу I2C.
Пример использования:
#ifndef I2C_MASTER_H
#define I2C_MASTER_H
void I2C_init (void) – создание объекта, настройка на правильную частоту для шины.
uint8_t I2C_start () – установка соединения с новым устройством.
uint8_t I2C_write() – запись данных на текущее устройство.
uint8_t I2C_read_ack() – считывание байта с устройства, запрос следующего байта.
Библиотека LiquidCrystal
Стандартная библиотека, установленная в Arduino IDE. Предназначена для управления жидкокристаллическими дисплеями LCD.
Пример использования:
#include
Конструктор класса – LiquidCristal(…). Аргументами являются rs, rw, en, do…d7. Первые 3 соответствую выводам сигналов RS, RW и Enable. Выводы d соответствуют номерам шин данных, к которым подключен дисплей.
void begin(cols, rows) – метод, который инициализирует интерфейс дисплея. Аргументами являются количество знаков в строке (cols) и число строк (rows). Этот метод должен задаваться первым.
void createChar(num, data) – метод, необходимый для создания пользовательских символов.
Библиотека UTFT
Стандартная библиотека, необходимая для работы Ардуино с TFT экранами разных типов. Все поддерживаемые дисплеи представлены в сопроводительном документе с библиотекой.
Пример использования:
#include
UTFT(); – создание экземпляра UTFT.
textRus(char*st, int x, int y); – метод, позволяющий выводить строку из указателя. Например, char *dht = “Температура,С”;
textRus(string st, int x, int y); – вывод строки с указанием в параметре. Например, g.textRus(“Температура, С”, 0, 20);
Библиотека LedControl
Позволяет управлять семисегментными дисплеями, объединять массив из светодиодов в одну матрицу.
Пример использования:
#include
LedControl lc1= LedControl();
– требуется для инициализации библиотеки. Должна состоять из четырех аргументов – номера пинов, к которым подключен дисплей (первые 3 аргумента) и количество подключенных чипов.
writeArduinoOn7Segment() – отображение на дисплее всех чисел от 0 до 15. Использует функции setChar() для символов a и d и setRow() для создания макета пропущенных символов.
LedControl.shutdown() – отключение изображения.
setIntensity() – контроль яркости.
Библиотеки для работы с датой и временем ардуино
Библиотека RTClib
Библиотека для работы с часами реального времени, упрощающая взаимодействие с Ардуино.
Пример использования:
#include
RTC_DS1307 RTC; – выбор датчика (в данном случае DS1307).
rtc.adjust(DateTime(Date, Time)); – настройка времени и календаря.
dayOfTheWeek () – вывод дня недели. Аргумент от 0 до 6, 0 – воскресенье.
Библиотека Timelib
Позволяет Ардуино получать информацию о дате и времени в данный момент.
Пример использования:
#include
Time(); – создание экземпляра.
setTime (t); – установка времени. Аргумент t – час, минута, секунда, день, месяц и год.
timeStatus(); – показывает, установлено ли время.
adjustTime(adjustment); – настройка времени.
Библиотека Ds1307
Библиотека для удобного взаимодействия часов DS1307 с Ардуино c использованием библиотеки Wire.
Пример использования:
#include
class DS1307RTC – создание объекта DS1307.
SetTime() – установка времени.
get() – считывает RTC, возвращает полученную дату в формате POSIX.
Set(time_t t) – запись даты в RTC
Библиотека DS 3231
Предназначена для управления датой и временем в модуле ds3231.
#include “ds3231.h”
DS3231 Clock(SDA, SCL); – создание объекта DS3231, подключение к линии тактирования и линии данных.
getTime(); – считывание даты и времени с часов.
setDate(date, mon, year); – установка даты.
Системные библиотеки ардуино
Библиотека EEPROM
Стандартная библиотека. Предназначена для работы с энергонезависимой памятью (запись данных, их чтение).
Пример использования:
#include
EEPROM.read(); – создание объекта, считывание байта по адресу из энергонезависимой памяти.
EEPROM.write(address, value)– запись байта в энергонезависимую память.
EEPROM.put() – запись строк чисел с плавающей запятой.
EEPROM.get() – чтение строк и чисел с плавающей запятой.
Библиотека SoftwareSerial
Библиотека, которая позволяет реализовывать последовательные интерфейсы с любых цифровых пинов. Также позволяет создавать несколько последовательных портов, которые работают на скорости до 115200 бод.
#include
SoftwareSerial mySerial(RX, TX) – создание объекта, аргументы – выводы, к которым подключены RX и TX.
Serial.begin(); – устанавливает скорость порта для связи ардуино и компьютера.
mySerial.overflow() – проверка входного буфера на переполнение.
Библиотека Math
Включает в себя большое количество математических функций для работы с числами с плавающей запятой.
Пример использования:
#include
Math(); – создание экземпляра Math.
Serial.print(“cos num = “); – возвращает косинус числа.
Serial.println (fmod (double__x, double__y)); – возвращает числа по модулю.
Библиотека Scheduler
Предназначена для работы с Arduino Due, позволяет работать в режиме многозадачности. Пока является экспериментальной библиотекой.
Пример использования:
#include
Scheduler; – создание экземпляра.
Scheduler.startLoop() – позволяет добавить функцию, которая будет выполняться вместе с loop().
yield() – позволяет передать управление другим задачам.
Библиотеки серво моторов и шаговых двигателей
Библиотека Servo
Стандартная библиотека. Необходима для управления серводвигателями и часто используется в робототехнических проектах с манипуляторами.
Пример использования:
#include
Servo myservo; – создание объекта для серводвигателя..
myservo.attach(); – номер выхода, к которому подключен серводвигатель.
myservo.write(180, 30, true); – движение на 180 градусов, скорость 30, ожидание окончания движения.
Библиотека Stepper
Небходима для управления шаговым униполярным и биполярным двигателем.
#include
const int stepsPerRevolution = ; – количество шагов, за которое двигатель проходит полный поворот.
Stepper myStepper = Stepper(steps, pin1, pin2) – создает экземпляр класса с указанным количеством шагов и выводами, к которым подключается двигатель.
Библиотеки датчиков ардуино
Библиотека DHT
#include < DHT.h>
DHT dht(DHTPIN, DHT11); – инициализирует датчик (в данном случае DHT11).
dht.begin(); – запуск датчика.
float t = dht.readTemperature(); – считывание текущего значения температуры в градусах Цельсия.
Библиотека DallasTemperature
Предназначается для работы с датчиками Dallas. Работает совместно с библиотекой OneWire.
#include
DallasTemperature dallasSensors(&oneWire); – передача объекта oneWire для работы с датчиком.
положить ее в регистр.
printTemperature(sensorAddress); – запрос получить измеренное значение температуры.
Библиотека Ultrasonic
Обеспечивает работу Ардуино с ультразвуковым датчиком измерения расстояния HC-SR04.
#include
Ultrasonic ultrasonic (tig , echo) – объявление объекта, аргументы – контакт Trig и контакт Echo.
dist = ultrasonic.distanceRead(); – определение расстояния до объекта. Агрумент – сантиметры(СМ) или дюймы (INC).
Timing() – считывание длительности импульса на выходе Echo, перевод в необходимую систему счисления.
Библиотека ADXL345
Предназначается для работы с акселерометром ADXL345.
Пример использования:
#include
ADXL345_ADDRESS – создание объекта, указание его адреса.
ADXL345_REG_DEVID – идентификация устройства.
ADXL345_REG_OFSX – смещение по оси Х.
ADXL345_REG_BW_RATE – управление скоростью передачи данных.
Библиотека BME280
Предназначается для работы с датчиком температуры, влажности и давления BME280.
Пример использования:
#include
BME280_ADDRESS – создание объекта BME280, указание его адреса.
begin(uint8_t addr = BME280_ADDRESS); – начало работы датчика.
getTemperature – получение измеренной температуры.
getPressure – получение измеренного давления.
Библиотека BMP280
Требуется для работы с датчиком атмосферного давления BMP280.
Пример использования:
#include
BMP280_CHIPID – создание экземпляра, указание его адреса.
getTemperature(float *temp); – получение измеренной температуры.
getPressure(float *pressure); – получение измеренного значения давления.
Библиотека BMP085
Требуется для работы с датчиком давления BMP085.
Пример использования:
#include
Adafruit_BMP085 bmp; – создание экземпляра BMP085.
dps.init(MODE_ULTRA_HIGHRES, 25000, true); – измерение давления, аргумент 25000 – высота над уровнем моря (в данном случае 250 м. над уровнем моря).
dps.getPressure(&Pressure); – определение давления.
Библиотека FingerPrint
Требуется для работы со сканером отпечатков пальцев.
Пример использования :
#include
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial); – объявление объекта Finger. Параметр – ссылка на объектр для работы с UART, кокторому подключен модуль.
finger.begin(); – инициализация модуля отпечатков пальцев.
Func_sensor_communication(); – вызов модуля отпечатков пальцев.
Библиотеки коммуникации
Библиотека Wire
Требуется для работы с двухпроводным интерфейсом I2C.
Пример использования:
#include
Wire.begin() – инициализация библиотеки, подключение к шине I2C.
Wire.requestFrom() – запрос мастером байтов от ведомого устройства.
Wire.beginTransmission() – начало передачи на ведомое устройство.
Библиотека Irremote
Требуется для работы ардуино с ИК приемником.
Пример использования:
#include
IRrecv irrecv(RECV_PIN); – пин, к которому подключен ИК приемник.
SetPinAndButton(int ir1,int ir2,int pin) – позволяет настроить определенный выход на срабатывание при заданных значениях ir1, ir2.
Библиотека GSM
Требуется для соединения через GSM-плату с сетью GSM/GRPS. С ее помощью можно реализовать операции, свершаемые GSM-телефоном, работать с голосовыми вызовами и подключаться к сети интернет через GRPS.
Пример использования:
#include
GSM GSMAccess – инициализирует экземпляр класса.
gprs.powerOn() – включение питания.
GPRS – настройка подключения к интернету.
GSM – управление радио-модемом.
Библиотека RFID
Требуется для соединения Ардуино и RFID -модуля.
Пример использования:
#include
RFID rfid(SS_PIN, RST_PIN); – создание экземпляра rfid, аргументы – пины, к которым подключен модуль.
rfid.init(); – инициализация модуля RFID.
Библиотека MFRC 522
Требуется для соединения Ардуино и MFRC522 -модуля.
Пример использования:
#include
MFRC522 mfrc522(SS_PIN, RST_PIN); – создание экземпляра MFRC522, аргументами указаны выходы, к которым подключен модуль.
mfrc522.PCD_Init(); – инициализация MFRC522.
Библиотека Ethershield
Новая версия https://github.com/jcw/ethercard
Требуется для подключения Ардуино к локальной сети или сети интернет. Библиотека больше не поддерживается, более новая версия Ethercard. Также существует стандартная библиотека Ethernet.
Пример использования:
#include «EtherShield.h»
#include
EtherShield es = EtherShield (); – подготовка веб-страницы
ether.begin(sizeof Ethernet::buffer, mymac,); – начало работы, аргументы – адрес Mac и номер порта, к которому подключен выход CS.
Библиотека Nrf24l01
Требуется для работы с RF24-радиомодулем.
Пример использования:
#include “RF24.h”
RF24 – Конструктор создает новый экземпляр драйвера. Перед тем, как использовать, нужно создать экземпляр и указать пины, к которым подключен чип (_cepin: контакт модуля Enable, cspin: контакт модуля Select).
Begin – начало работы чипа.
setChannel – каналы для связи RF.
setPayloadSize – установка фиксированного размера передачи.
getPayloadSize – получение фиксированного размера.
Библиотека TinyGPS
Требуется для чтения сообщений GPGGA и GPRMC. Помогает считывать данные о положении, дате, времени, высоте и других параметрах.
Пример использования:
#include
TinyGPS gps; – создание экземпляра TinyGPS.
encode () – подача на объект последовательных данных по одному символу.
gps.stats() – метод статистики. Показывает, получены корректные данные или нет.
Библиотеки в Arduino IDE
Среди всего разнообразия библиотек можно выделить 3 основных группы:
- Встроенные – это библиотеки, изначально установленные в среде Arduino IDE. Их не нужно скачивать и устанавливать дополнительно, они доступны для использования в программе сразу после запуска среды разработки.
- Дополнительные – это библиотеки, которые нужно самостоятельно скачивать устанавливать. Обычно такой вид библиотек разрабатывает производитель датчиков, сенсоров и других компонентов для облегчения работы с ардуино.
- Зависимые библиотеки – устанавливаются как помощник дополнительной библиотеки, отдельно от нее не работает.
Самым простым способом работы с библиотеками в ардуино является использование встроенных возможностей среды разработки Arduino IDE. Об этом мы поговорим в отдельной статье.