Здравствуйте, уважаемые читатели!
Продолжаем создание на основе платы Digispark ATtiny85 электронного USB-ключа с возможностью генерации паролей, их сохранения и использования для входа в различные системы, программы или сервисы.
В первой части "Генератор случайных паролей на Digispark ATtiny85" я рассказывал о подключении кнопки и библиотеке для удобной обработки разных типов ее нажатия. А так же мы разбирали скетч, в котором при нажатии на кнопку, генерировался случайный пароль и отправлялся в форму ввода ПК.
В этой части мы будем сохранять сгенерированные пароли в энергонезависимой памяти EEPROM, и при определенном нажатии передавать их на ПК. А так же будем использовать заранее заданные пароли.
Для работы с памятью EEPROM я буду использовать библиотеку EEPROM.h. Она входит в стандартный пакет библиотек для Arduino IDE. И если работаете с платой семейства Ардуино, то ее легко можно подключить к скетчу выбрав Скетч – Подключить библиотеку – EEPROM.
А вот если работаем с платой Digispark, то библиотеку нужно добавить вручную. Нужно зайти в каталог, куда установлена Arduino IDE, далее hardware –> arduino –> avr –> libraries –> EEPROM –> src. Копируем файл EEPROM.hи переносим его в каталог проекта.
В самом проекте добавляем на него ссылку.
После этого добавляем 2 строчки в наш скетч – одну EEPROM.put() в функцию создания пароля, которая сохранит сгенерированный пароль в нулевой ячейке памяти EEPROM. А вторую EEPROM.get() в функцию setup() которая считает сгенерированный пароль из памяти EEPROM в переменную curPW. И даже когда мы отключим плату Digispark от компьютера, что приведет к очистке оперативной памяти. При следующем подключении сгенерированный пароль сохранится.
После загрузки скетча в плату Digispark, генерируем новый пароль и однократным нажатием повторяем его.
Далее отключаем Digispark от компьютера. Подключаем снова, нажимаем однократно на кнопку и видим, что выводится сгенерированный в прошлый раз пароль. Т.е. мы его один раз сгенерировали и теперь можем использовать многократно для входа в какую-то программу или сервис.
Чтобы перезаписать сохраненный в EEPROM-памяти пароль, используем длительное нажатие на кнопку. Сгенерировался новый пароль и он сохранился в энергонезависимой памяти.
Теперь расширим функционал работы нашего устройства, чтобы можно было использовать не только сгенерированный пароль, а еще один или несколько самостоятельно нами созданных.
Предположим у нас уже есть 3 пароля, которые мы используем в разных сервисах. Создаем символьный массив, каждым элементом которого будет один из наших паролей.
И укажем сколько у нас своих паролей, т.е. 3.
Далее будем действовать согласно следующему алгоритму:
При подключении платы Digispark к компьютеру активируется режим 0. В котором при однократном нажатии на кнопку выводится сохраненный в памяти пароль. А при долгом нажатии генерируется новый пароль и выводится в текстовое поле ПК.
Переход к следующему режиму осуществляется при двойном нажатии. В режиме номер 1 у нас будет при однократном нажатии выводится наш первый пароль. При переходе с помощью двойного нажатия ко второму режиму, будет выводиться второй пароль и т.д. в зависимости от количества наших паролей. Двойное нажатия в режиме, соответствующем последнему паролю возвращает нас в нулевой режим генерации нового пароля.
Для визуализации перехода к новому режиму на плате будем мигать штатным светодиодом то количество раз, к какому режиму мы перешли. А чтобы отличить нулевой режим от всех остальных – во всех режимах, кроме нулевого штатный светодиод будет светиться постоянно.
Воплотим данный алгоритм в скетче. Добавим переменные, которые будут хранить номер текущего режима и общее число режимов.
Добавим функцию myDoubleClick()которая будет обрабатывать двойное нажатие на кнопку, переключать режим и отражать переключение миганием светодиода.
А так же добавим условия различной обработки события при нажатии на кнопку в различных режимах. При нулевом режиме у нас по-прежнему будет вывод сгенерированного пароля, а во всех остальных режимах вывод заранее заданного пароля, соответствующего текущему режиму.
Загружаем скетч в Digispark.
Нажимаем кнопку однократно– выводится сгенерированный ранее и сохраненный в EEPROM-памяти пароль.
Долгое нажатие – выводит новый пароль и сохраняет его в энергонезависимую память.
Двойное нажатие – переходим к режиму номер 1. Нажимаем кнопку 1 раз и выводится первый пароль.
Переходим к режиму номер 2, нажимаем кнопку и выводится второй пароль. В третьем режиме – третий пароль. И снова при двойном нажатии переходим к нулевому режиму.
Переходим к сборке готового устройства на основе платы Digispark с классическим USB.
Кнопку двумя дальними друг от друга ножками воткнем в пины P0 и P2.
Возьмем небольшой обрезок монтажной платы, по ширине равный плате Digispark и две другие ножки припаяем к этому обрезку.
Теперь P0 свяжем резистором на 10кОм с землей. А соседнюю с ней ножку с питанием 5В.
Плата готова.
Загружаем скетч…..
Вставляем в USB-порт компьютера и после загрузки скетча проверяем работу.
1. Генерация пароля
2. Пароль 1
3. Пароль 2
4. Пароль 3
5. Снова вывод случайно сгенерированного пароля:
Таким образом, мы можем записать в память несколько паролей от разных сервисов и вызывать нужный нам пароль при помощи всего одной кнопки.
Ссылка на скетч из статьи - https://yadi.sk/d/4HYZlXD7mXUPrQ
Ниже размещено видео по материалам этой статьи:
_________________________________________________________
Спасибо, что дочитали до конца! Если статья понравилась, нажмите, пожалуйста, соответствующую кнопку. Если интересна тематика электроники и различных электронных самоделок, подписывайтесь на канал. До встречи в новых статьях!
Другие публикации по теме:
- Digispark ATtiny85. Обзор платы, подключение, программирование через Arduino IDE