Найти в Дзене
Электроника и жизнь

Самодельный USB ключ на основе Digispark ATtiny85

Здравствуйте, уважаемые читатели!

Продолжаем создание на основе платы Digispark ATtiny85 электронного USB-ключа с возможностью генерации паролей, их сохранения и использования для входа в различные системы, программы или сервисы.

Самодельный USB ключ на Digispark ATtiny85
Самодельный USB ключ на Digispark ATtiny85

В первой части "Генератор случайных паролей на Digispark ATtiny85" я рассказывал о подключении кнопки и библиотеке для удобной обработки разных типов ее нажатия. А так же мы разбирали скетч, в котором при нажатии на кнопку, генерировался случайный пароль и отправлялся в форму ввода ПК.

В этой части мы будем сохранять сгенерированные пароли в энергонезависимой памяти EEPROM, и при определенном нажатии передавать их на ПК. А так же будем использовать заранее заданные пароли.

Для работы с памятью EEPROM я буду использовать библиотеку EEPROM.h. Она входит в стандартный пакет библиотек для Arduino IDE. И если работаете с платой семейства Ардуино, то ее легко можно подключить к скетчу выбрав Скетч Подключить библиотекуEEPROM.

Библиотека EEPROM
Библиотека EEPROM

А вот если работаем с платой Digispark, то библиотеку нужно добавить вручную. Нужно зайти в каталог, куда установлена Arduino IDE, далее hardware –> arduino –> avr –> libraries –> EEPROM –> src. Копируем файл EEPROM.hи переносим его в каталог проекта.

В самом проекте добавляем на него ссылку.

Добавление библиотеки EEPROM в скетч
Добавление библиотеки EEPROM в скетч

После этого добавляем 2 строчки в наш скетч – одну EEPROM.put() в функцию создания пароля, которая сохранит сгенерированный пароль в нулевой ячейке памяти EEPROM. А вторую EEPROM.get() в функцию setup() которая считает сгенерированный пароль из памяти EEPROM в переменную curPW. И даже когда мы отключим плату Digispark от компьютера, что приведет к очистке оперативной памяти. При следующем подключении сгенерированный пароль сохранится.

Функции для записи и чтения в память EEPROM
Функции для записи и чтения в память EEPROM

После загрузки скетча в плату Digispark, генерируем новый пароль и однократным нажатием повторяем его.

Далее отключаем Digispark от компьютера. Подключаем снова, нажимаем однократно на кнопку и видим, что выводится сгенерированный в прошлый раз пароль. Т.е. мы его один раз сгенерировали и теперь можем использовать многократно для входа в какую-то программу или сервис.

Чтобы перезаписать сохраненный в EEPROM-памяти пароль, используем длительное нажатие на кнопку. Сгенерировался новый пароль и он сохранился в энергонезависимой памяти.

Теперь расширим функционал работы нашего устройства, чтобы можно было использовать не только сгенерированный пароль, а еще один или несколько самостоятельно нами созданных.

Предположим у нас уже есть 3 пароля, которые мы используем в разных сервисах. Создаем символьный массив, каждым элементом которого будет один из наших паролей.

И укажем сколько у нас своих паролей, т.е. 3.

Символьный массив паролей
Символьный массив паролей

Далее будем действовать согласно следующему алгоритму:

Алгоритм работы устройства
Алгоритм работы устройства

При подключении платы Digispark к компьютеру активируется режим 0. В котором при однократном нажатии на кнопку выводится сохраненный в памяти пароль. А при долгом нажатии генерируется новый пароль и выводится в текстовое поле ПК.

Переход к следующему режиму осуществляется при двойном нажатии. В режиме номер 1 у нас будет при однократном нажатии выводится наш первый пароль. При переходе с помощью двойного нажатия ко второму режиму, будет выводиться второй пароль и т.д. в зависимости от количества наших паролей. Двойное нажатия в режиме, соответствующем последнему паролю возвращает нас в нулевой режим генерации нового пароля.

Для визуализации перехода к новому режиму на плате будем мигать штатным светодиодом то количество раз, к какому режиму мы перешли. А чтобы отличить нулевой режим от всех остальных – во всех режимах, кроме нулевого штатный светодиод будет светиться постоянно.

Воплотим данный алгоритм в скетче. Добавим переменные, которые будут хранить номер текущего режима и общее число режимов.

Добавим функцию myDoubleClick()которая будет обрабатывать двойное нажатие на кнопку, переключать режим и отражать переключение миганием светодиода.

Обработка двойного нажатия кнопки
Обработка двойного нажатия кнопки

А так же добавим условия различной обработки события при нажатии на кнопку в различных режимах. При нулевом режиме у нас по-прежнему будет вывод сгенерированного пароля, а во всех остальных режимах вывод заранее заданного пароля, соответствующего текущему режиму.

Обработка нажатия кнопки в разных режимах
Обработка нажатия кнопки в разных режимах

Загружаем скетч в Digispark.

Нажимаем кнопку однократно– выводится сгенерированный ранее и сохраненный в EEPROM-памяти пароль.

Долгое нажатие – выводит новый пароль и сохраняет его в энергонезависимую память.

Двойное нажатие – переходим к режиму номер 1. Нажимаем кнопку 1 раз и выводится первый пароль.

Переходим к режиму номер 2, нажимаем кнопку и выводится второй пароль. В третьем режиме – третий пароль. И снова при двойном нажатии переходим к нулевому режиму.

Переходим к сборке готового устройства на основе платы Digispark с классическим USB.

Схема USB ключа (P2 - только для крепления ножки кнопки)
Схема USB ключа (P2 - только для крепления ножки кнопки)

Кнопку двумя дальними друг от друга ножками воткнем в пины P0 и P2.

Возьмем небольшой обрезок монтажной платы, по ширине равный плате Digispark и две другие ножки припаяем к этому обрезку.

Теперь P0 свяжем резистором на 10кОм с землей. А соседнюю с ней ножку с питанием .

Обратная сторона собранного устройства
Обратная сторона собранного устройства

Плата готова.

Загружаем скетч…..

Вставляем в USB-порт компьютера и после загрузки скетча проверяем работу.

1. Генерация пароля

2. Пароль 1

3. Пароль 2

4. Пароль 3

5. Снова вывод случайно сгенерированного пароля:

Вывод паролей в текстовое поле
Вывод паролей в текстовое поле

Таким образом, мы можем записать в память несколько паролей от разных сервисов и вызывать нужный нам пароль при помощи всего одной кнопки.

Ссылка на скетч из статьи - https://yadi.sk/d/4HYZlXD7mXUPrQ

Ниже размещено видео по материалам этой статьи:

_________________________________________________________

Спасибо, что дочитали до конца! Если статья понравилась, нажмите, пожалуйста, соответствующую кнопку. Если интересна тематика электроники и различных электронных самоделок, подписывайтесь на канал. До встречи в новых статьях!

Другие публикации по теме:

Рекомендуем почитать
Документы, вакансии и контакты