Une clé USB qui saisit votre mot de passe pour moins de 3 Euros !

Dans cet article je vous propose aujourd’hui de découvrir le Digispark: il s’agit d’une mini carte de développement USB basée sur le tout petit microcontrolleur ATTiny85 que je vous ai présenté dans un précedent article. A la base il s’agit d’un d’un projet KickStarter lancé en 2012 et qui a récolté plus de 300 000 Dollars sur les 5 000 demandés…

Vendu au prix de 8,95 Dollars sur le site officiel on trouvé également des clones de ce module aux environs de 3 euros sur eBay.fr (j’ai payé le mien 2,75 Euros frais de port compris !).

Vue de la face avant du Digispark

Vue de la face avant du Digispark

Présentation du module

Ce module est donc constitué de quatre composants principaux:

  • L’ATTiny85 que nous connaissons désormais,
  • Un régulateur 78M05 (le petit frère du 7805) permettant de délivrer un courant de 500 mA et une tension fixe de 5v à partir d’un tension allant de 7v à… 35v (mais dans la pratique 12v c’est déjà bien),
  • Une Led servant de témoin d’alimentation (rouge),
  • Une seconde Led (rouge elle aussi) connectée à PB1 pouvant être utilisé pour tester le module (le fameux « Blink »).

Les autres composants sont principalement des composants passifs (résistances, condensateurs…).

En voici le schéma de principe:

Schéma de principe du Digispark

Schéma de principe du Digispark (cliquez pour agrandir)

L’alimentation de l’ATTiny s’effectue généralement via le port USB et le régulateur n’est utile que lorsque que l’on souhaite réaliser une alimentation externe (on aurait presque pu s’en passer…)

En ce qui concerne le fonctionnement, la particulité de ce module est la présence d’un bootloader (ie. un petit programme qui s’éxécute au démarrage de l’ATTiny85 comme sur Arduino) et qui permet de réaliser la programmation elle aussi directement via le port USB, il n’y a donc aucun composant ou programmateur supplémentaire à prévoir ! Le bootloader utilisé est MicroNucleus.

La programmation s’effectue via l’interface classique Arduino gràce à un package spécifique contenant à la fois les drivers mais aussi les librairies adaptées. Ce package est disponible sur le site officiel pour Windows, Mac et Linux.

Attention toutefois car bien que l’interface soit la même que sur Arduino il n’est toutefois pas possible d’utiliser la plupart des librairies classiques Arduino. Rassurez-vous toutefois car il existe non seulement des libraires spécifiques et surtout le package d’origine contient de très nombreux exemples.

Dernier point important, ce module ne dispose pas d’une console série comme c’est le cas sur un Arduino, il n’est donc pas possible de recevoir un « feedback »  via le moniteur Sériel (il existe d’ailleurs une nouvelle version offrant cette possibilité, le Digispark Pro).

Vue illustrée du Digispark

Vue illustrée du Digispark (cliquez pour agrandir)

 

Faisons clignoter une Led

Nous allons commencer par un programme extrèmement simple à savoir faire clignoter la Led embarquée connectée sur la pin PB1 de l’ATTiny85.

Pour le moment ne connectez pas votre Digispark.

Commencez par installer l’environnement de développement en le récupérant sur le site officiel. L’installation ne devrait poser aucun soucis particulier.

Une fois l’environnement lancé, commencez par seléctionner la bonne carte via le menu « Tools » puis « Board » et enfin « Digispark – Default 16.5 Mhz ».

Choix de la carte DigiSpark

Choix de la carte DigiSpark

Une fois ce choix réalisé, nous allons désormais charger l’exemple « Start » comme illustré ci-dessous:

Chargement de l'exemple "Start"

Chargement de l’exemple « Start »

Vous devriez désormais voir apparaitre le programme suivant:

// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(0, OUTPUT); //LED on Model B
pinMode(1, OUTPUT); //LED on Model A  or Pro
}

// the loop routine runs over and over again forever:
void loop() {
digitalWrite(0, HIGH);   // turn the LED on (HIGH is the voltage level)
digitalWrite(1, HIGH);
delay(1000);               // wait for a second
digitalWrite(0, LOW);    // turn the LED off by making the voltage LOW
digitalWrite(1, LOW);
delay(1000);               // wait for a second
}

Si vous êtes familier avec Arduino, vous ne devriez pas avoir de difficulté à comprendre ce petit bout de programme. Pour résumer:

  • Dans la fonction « Setup »: On commence par initialiser les Pin 0 et 1 en mode « sortie » (on utilise ici les deux pins car la Led n’est pas connecté à la même Pin suivant le modèle… dans la pratique nous pourrions ne conserver qu’une seule ligne).
  • Dans la fonction « Loop » (boucle en français): On passe au niveau haut (« High ») les deux pins, on attend 1 seconde (1 000 ms) puis on le passe de nouveau au niveau bas (« Low ») et enfin on attend de nouveau 1 seconde… et ainsi de suite.

Il ne vous reste plus qu’à tester ce code. Cliquez sur le bouton « Upload » (le deuxième en partant de la gauche) puis attendez l’apparation du message ci-dessous:

Running Digispark Uploader...
Plug in device now... (will timeout in 60 seconds)

 

Il ne vous reste plus qu’à brancher votre Digispark et si tout se passe bien, vous devriez non seulement voir la Led rouge clignoter (lentement) mais aussi le message ci-dessous:

Starting the user app ...
running: 100% complete
Micronucleus done. Thank you!

 

Vous pouvez vous amuser à modifier la fréquence par exemple en modifiant la valeur du « delay ».

Notre clavier virtuel

Passons désormais à notre clavier virtuel. Les choses sont finalement assez simple comme vous allez le voir.

Chargez cette fois l’exemple « Keyboard » disponible dans « File » –> « Examples » –> « DigiSparkKeyBoard ».

Vous devriez voir apparaitre le code suivant:

#include "DigiKeyboard.h"

void setup() {
  // don't need to set anything up to use DigiKeyboard
}


void loop() {
  // this is generally not necessary but with some older systems it seems to
  // prevent missing the first character after a delay:
  DigiKeyboard.sendKeyStroke(0);
  
  // Type out this string letter by letter on the computer (assumes US-style
  // keyboard)
  DigiKeyboard.println("Hello Digispark!");
  
  // It's better to use DigiKeyboard.delay() over the regular Arduino delay()
  // if doing keyboard stuff because it keeps talking to the computer to make
  // sure the computer knows the keyboard is alive and connected
  DigiKeyboard.delay(5000);
}

Grace à l’utilisation de la librairie « DigiKeyboard.h » le code est encore plus simple que notre exemple précedent ! Dans cet exemple ce clavier virtuel va afficher « Hello DigiSpark! » toutes les 5 secondes.

Petit détail, les données envoyées correspondant à un clavier QWERTY (format américain) c’est la raison pour laquelle si vous essayer cette exemple vous verrez apparaitre « Hello Digispqrk »… Pour contrer ce problème il suffit de ruser en modifiant la chaine de caractère pour quelle apparaise correctement une fois saisie sur l’écran.

Nous allons légèrement modifier cette exemple pour atteindre notre objectif: saisir de manière automatique un mot de passe complexe lorsque la clé est insérée.

#include "DigiKeyboard.h"

void setup() {
// Parfois nécessaire pour initialiser le clavier
  DigiKeyboard.sendKeyStroke(0);
// On attend deux petites secondes (pour permettre au driver de se charger)
  DigiKeyboard.delay(2000);
// On envoie le mot de passe
  DigiKeyboard.println(";otDePqsse");
  
}

void loop() {
 // Pas vraiment utile mais au cas où...
  DigiKeyboard.delay(10000);

}

Il ne vous reste plus qu’à uploader de le même manière que précedemment et vous devriez voir apparaitre à l’écran votre « MotdePasse » environ 2 secondes après l’insertion de la clé…. magique non ?

Cette approche fonctionne relativement bien pour les caractères classiques, pour les chiffres c’est un peu plus compliqué, vouz pouvez par exemple remplacer la ligne suivante:

DigiKeyboard.println(";otDePqsse");

par:

DigiKeyboard.print(";otDePqsse");
DigiKeyboard.sendKeyStroke(KEY_0,MOD_SHIFT_LEFT);
DigiKeyboard.sendKeyStroke(KEY_1,MOD_SHIFT_LEFT);
DigiKeyboard.sendKeyStroke(KEY_ENTER);

et vous obtiendrez dans ce cas un joli « MotDePasse01″.

Notez l’utilisation de la fonction print sur la première ligne à la place de println qui permet de ne pas envoyer de retour à la ligne. La table de correspondance entre les constantes tel que KEY_1 et le scan code correspondant se trouve dans la librairie DigiKeyboard.h

Autres utilisations possibles…

Un tel clavier virtuel ouvre un nombre de possibilité assez incroyable, imaginez:

  • Un générateur de mot de passe aléatoire constitué d’un bouton permettant de générer un mot de passe et un autre permettant de le transmettre
  • Une clé magique pour « amuser » vos collègues en envoyant de manière aléatoire des caractères ou en jouant sur l’activation des majuscules/minuscules
  • Un outil d’automatisation pour vos tâches répétitives (bon même si il existe aussi des logiciels pour cela…)
  • ….

N’hésitez pas à partager vos idées et vos montages !

7 Responses to “Une clé USB qui saisit votre mot de passe pour moins de 3 Euros !”
  1. andro says:
    • Jerome says:
  2. FredouilleZeus says:
    • Dav81 says:
  3. Loris says:
  4. Scott says:

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *