Наверняка все из вас хоть раз в жизни оставляли в спешке в каком-нибудь не очевидном месте свои ключи и потом долго не могли их найти из-за этого. Эта ситуация могла повлечь для вас значительные неудобства. Чтобы оградить себя от подобных происшествий в дальнейшем вы сможете прикрепить к своей связке ключей небольшое электронное устройство, которое поможет вам их быстро найти в случае потери. Создание подобного устройства мы и рассмотрим в нашей статье.
В данной статье мы рассмотрим создание умного искателя/поисковика ключей (smart key finder) с использованием модуля ESP8266, зуммера и батарейки. Если вы забудете где оставили свои ключи, вы сможете открыть специальную страницу на своем смартфоне, с которой вы сможете включить звуковой сигнал на нашем устройстве. Благодаря этому звуковому сигналу вы сможете быстро обнаружить место где оставили свои ключи.
Авторы данного проекта (ссылка на оригинал приведена в конце статьи) сконструировали данный искатель ключей на печатной плате, изготовленной с помощью сервиса PCBONLINE. Данный производитель печатных плат начал свою деятельность в 1999 году и в данное время может создавать печатные платы до 24 слоев, соответствующие стандартам ISO.
Необходимые компоненты
- Модуль ESP8266-01 купить на AliExpress).
- Регулятор напряжения 3.3V AMS1117 (купить на AliExpress - можно купить не в виде модуля, а в виде отдельной микросхемы (от 5 до 7 рублей за штуку), но на момент публикации данной статьи не нашел на алиэкспрессе магазина с дешевой доставкой данной микросхемы).
- Зуммер (Buzzer) (купить на AliExpress).
- Литий-полимерная батарея.
- Конденсатор 10 мкФ – 2 шт. (купить на AliExpress).
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
Схема проекта
Схема умного искателя ключей на модуле ESP8266 представлена на следующем рисунке. Схема нарисована с помощью редактора EasyEDA.
Схема запитывается от литий-полимерной батареи (Lithium polymer Battery), а регулятор напряжения AMS117-3.3V используется для подачи стабилизированного напряжения питания 3.3V на модуль ESP8266-01. Контакты VCC и CH_PD модуля ESP8266-01 подключаются к выходным контактам AMS1117, а его контакт GND мы подключили к выводу –ve батареи. Положительный контакт зуммера подключен к контакту GPIO2 модуля ESP8266, а отрицательный контакт зуммера – к контакту GND модуля.
Изготовление печатной платы для нашего проекта
Печатную плату для проекта его авторы изготавливали с помощью сервиса PCBONLINE. Разумеется, вы можете изготовить печатную плату с помощью любого сервиса, с которым вы привыкли работать. Gerber файлы для изготовления печатной платы проекта вы можете скачать по следующей ссылке.
Для изготовления печатной платы с помощью сервиса PCBONLINE выполните следующую последовательность шагов.
Перейдите на сайт https://www.pcbonline.com/ и зарегистрируйтесь на нем если у вас это первое посещение данного сайта. После входа в свой аккаунт перейдите на вкладку Active Orders (активные заказы) и в ней нажмите на ‘Quote Online’ (заказать онлайн).
В следующем открывшемся окне загрузите Gerber файлы и укажите размеры вашей печатной платы, число ее слоев и число плат, которые вам необходимо изготовить.
После этого необходимо указать еще ряд дополнительных параметров для изготовления печатной платы (материалы, расстояние между дорожками и т.д.), но обычно их значения можно оставить по умолчанию – какие предлагает сервис. Еще необходимо указать страну доставки и срок изготовления.
На заключительном этапе заказа изготовления печатной платы сервис PCBONLINE проверит корректность ваших Gerber файлов, после этого можно будет переходить к оплате заказа.
Состояние вашего заказа вы всегда можете посмотреть на вкладке ‘Active Orders’ (активные заказы).
Изготовление печатной платы
Спустя несколько дней после заказа платы на сервисе PCBONLINE авторы проекта получили изготовленную печатную плату в специальном пакете. Как вы можете судить по рисункам ниже, качество изготовления печатной платы не вызывает нареканий.
После проверки корректности дорожек на плате авторы проекта приступили к припаиванию на нее компонентов. Внешний вид изготовленной конструкции проекта показан на следующем рисунке.
Объяснение программы для модуля ESP8266
Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.
Первым делом в программе подключим все используемые библиотеки. Все эти библиотеки заранее предустановлены в файлы для работы с платами ESP8266. Библиотека ESP8266WiFi используется для подключения модуля ESP8266 к сети Wi-Fi.
1 2 3 |
#include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> |
Затем создадим объект веб-сервера, который будет принимать HTTP запросы на порту 80.
1 |
ESP8266WebServer server(80); |
Далее укажем контакт модуля ESP8266, к которому подключен зуммер.
1 |
const int buz_pin = 2; |
После этого укажем параметры доступа сети Wi-Fi, к которой будем подключаться – ее имя и пароль.
1 2 |
char ssid[] = "Wi-Fi Name"; char pass[] = "Wi-Fi Password"; |
Строка ‘html_code’ содержит простой HTML код для создания необходимой нам веб-страницы.
1 2 |
String html_code = "<!DOCTYPE html><html><head><style>.button {border: none;padding: 12px 40px;text-align: center;text-decoration: none;display: inline-block;font-size: 16px;margin: 4px 2px;cursor: pointer;}.button1 {background-color: black; color: white; border: 3px solid #1c1c1b;border-radius: 30px}body {text-align: center;}</style></head><body><h2>IoT Based Keychain</h2><p>Press the Button to Turn On/Off the Buzzer</p><form action=\"/BUZ\" method=\"POST\"><button class=\"button button1\">Press Me</button></form>"; |
Функция handleRoot() будет исполняться когда мы будем открывать веб-страницу в браузере по адресу модуля ESP8266. На этой веб-странице будет отображаться состояние зуммера и кнопка для его включения.
1 2 3 |
void handleRoot() { server.send(200, "text/html", html_code + "Current state: <b>" + buzzing_state); } |
Функция handleBUZ() будет использоваться для изменения состояния зуммера если на веб-странице нажали кнопку. Также эта функция добавляет в ответ браузеру новое положение (new location) чтобы в нем произошел возврат на главную страницу.
1 2 3 4 5 |
void handleBUZ() { buzzing_state = !buzzing_state; server.sendHeader("Location","/"); server.send(303); } |
Внутри функции setup() мы инициализируем последовательную связь со скоростью 9600 бод, зададим режим работы контакта, к которому подключен зуммер, на вывод данных и затем подключимся к Wi-Fi сети используя ее имя и пароль.
1 2 3 4 5 6 7 8 9 |
Serial.begin(115200); delay(10); pinMode(buz_pin, OUTPUT); WiFi.begin(ssid, pass); while (WiFi.status() != WL_CONNECTED) { delay(500); } Serial.println("OK!"); |
В следующих двух строчках кода функция 'handleRoot' вызывается когда пользователь запрашивает URI (Uniform Resource Identifier, унифицированный идентификатор ресурса, по сути компактная строка символов, используемая для идентификации абстрактного (виртуального) или физического сетевого ресурса. Формально определён в RFC 2396. URI, используемые в Web , именуются URL) "/". Вторая строка в представленном коде используется для вызова функции 'handleBUZ' когда запрос POST выполняется по URI "/ handleBUZ ".
1 2 |
server.on("/", HTTP_GET, handleRoot); server.on("/BUZ", HTTP_POST, handleBUZ); |
Далее мы будем считывать состояние зуммера с веб-страницы и затем соответствующим образом изменять состояние контакта, к которому подключен зуммер, чтобы его включать или выключать.
1 2 3 4 5 6 7 8 |
void loop(void){ server.handleClient(); if (buzzing_state == true) { digitalWrite(buz_pin, HIGH); delay(400); yield(); digitalWrite(buz_pin, LOW); } |
Программирование модуля ESP8266-01
В данном проекте для программирования модуля ESP8266-01 мы использовали плату Arduino Uno вместо использования FTDI платы. Схема для программирования модуля ESP8266-01 с помощью платы Arduino Uno представлена на следующем рисунке.
Соединения в этой схеме приведены в следующей таблице.
Модуль ESP8266-01 | Плата Arduino Uno |
VCC | 3.3V |
GND | GND |
CH-PD | 3.3V |
RX | RX |
TX | TX |
GPIO-0 | GND |
GPIO-2 | не подключен |
RST | первоначально не подключен. Но перед загрузкой программы в модуль соедините контакт RST с землей (ground) и спустя полсекунды отключите его от земли |
Кроме представленных в таблице соединений соедините контакт сброса (Reset pin) платы Arduino с землей (GND) в обход Arduino. Это отключит (disable) плату Arduino и позволит коду программы непосредственно загружаться в модуль ESP8266. После этого подайте питание на плату Arduino Uno и откройте Arduino IDE. В ней в пункте Board (платы) выберите пункт “Generic ESP8266 Module”. Далее перед нажатием кнопки Upload для загрузки программы на одну секунду соедините контакт RST модуля с землей (GND), после этого нажимайте кнопку Upload в Arduino IDE.
Тестирование работы проекта
Теперь, когда конструкция проекта собрана на печатной плате, а программа загружена в модуль ESP8266, мы можем приступать к тестированию работы проекта. Для этого подайте питание на модуль и подождите пока модуль получит IP адрес. После этого откройте браузер и в нем в строке адреса наберите полученный IP адрес модуля. В результате этого в браузере должна открыться веб-страница, показанная на следующем рисунке.
Нажмите на кнопку ‘Click Me’ на этой веб-странице и зуммер начнет издавать звуковой сигнал до тех пор пока вы снова не нажмете эту кнопку.
Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи.
Исходный код программы (скетча)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
#include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> ESP8266WebServer server(80); const int buz_pin = D2; char ssid[] = "Galaxy-M20"; char pass[] = "ac312124"; String html_code = "<!DOCTYPE html><html><head><style>.button {border: none;padding: 12px 40px;text-align: center;text-decoration: none;display: inline-block;font-size: 16px;margin: 4px 2px;cursor: pointer;}.button1 {background-color: black; color: white; border: 3px solid #1c1c1b;border-radius: 30px}body {text-align: center;}</style></head><body><h2>IoT Based Keychain</h2><p>Press the Button to Turn On/Off the Buzzer</p><form action=\"/BUZ\" method=\"POST\"><button class=\"button button1\">Click Me!</button></form>"; boolean buzzing_state = false; void handleRoot() { server.send(200, "text/html", html_code + "Current state: <b>" + buzzing_state); } void handleBUZ() { buzzing_state = !buzzing_state; server.sendHeader("Location","/"); server.send(303); } void handleNotFound(){ server.send(404, "text/plain", "404: Not found"); } void setup(void){ Serial.begin(115200); delay(10); pinMode(buz_pin, OUTPUT); Serial.print("\n\nConnecting Wifi... "); WiFi.begin(ssid, pass); while (WiFi.status() != WL_CONNECTED) { delay(500); } Serial.println("OK!"); Serial.print("IP address: "); Serial.println(WiFi.localIP()); Serial.println(); server.on("/", HTTP_GET, handleRoot); server.on("/BUZ", HTTP_POST, handleBUZ); server.onNotFound(handleNotFound); server.begin(); Serial.println("HTTP server started\n"); } void loop(void){ server.handleClient(); if (buzzing_state == true) { digitalWrite(buz_pin, HIGH); delay(400); yield(); digitalWrite(buz_pin, LOW); delay(200); yield(); delay(400); yield(); } } |
бузер натужно гудит в этой схеме ,при подаче питания
Значит у вас по какой то причине при включении питания подается высокий уровень на контакт модуля ESP8266, к которому подключен зуммер. Вы проверяли это? Если нет мультиметра, то это можно проверить с помощью светодиода и резистора, подключив их в схему вместо зуммера
Идея хорошая, но esp быстро высадит аккумулятор в ноль. К тому же таскать с собой в качестве брелка такую большую плату с li-pol акк не рационально.
P.S. но как пример проект очень хороший, особенно для начинающих
Ну мне кажется все таки не очень быстро, энергопотребление ведь у модуля ESP8266 не такое уж большое. К тому же можно использовать спящие режимы в модуле ESP8266.
Но в прошивке-то это не реализовано)
В программе к данному проекту использования спящих режимов действительно нет. Но нельзя же все возможные опции описывать в одном проекте - это затруднит его восприятие, особенно начинающими. Тот, кому это будет необходимо, я думаю без особого труда добавит в этот проект использование спящих режимов
Это снова я)
Задумал сам один компактный проект на esp с питанием от li-po. В данной статье для регулировки напряжения используется ams1117, но у нее падение напряжение составляет 1.1В. Получается, чтобы поддерживать работу мк на входе должно быть минимум 4.1В (считаем, что esp стабильно работает от 3.0В). Но ведь такое напряжение есть только на полностью заряженном аккумуляторе!
Может я что-то путаю, но мне кажется такой вариант питания является не совсем правильным
Честно говоря, я не очень силен в регуляторах напряжения и с ams1117 лично не работал поэтому, возможно, вы правы. Но кроме ams1117 есть же куча других регуляторов напряжения. К тому же можно соединить вместе два аккумулятора, это уже будет 7,4 В, а вход ams1117, насколько я помню, выдерживает до 10,3 В. Можете посмотреть на нашем сайте статьи по тегу "регулятор напряжения", возможно, в них вы найдете решение своей проблемы. Можно, к примеру, рассмотреть вариант использования регулятора напряжения LM317 - в нем от резисторов обвеса зависит выходное напряжение.