Intégrez un bouton « physique » et intelligent à votre prochain projet

Temps de lecture : 4 minutes
Wassim CHEGHAM

Je suis un auteur sur logiciels libres. Je construis des outils et des applications, je contribue à des projets open-source tels que Angular, Bazel et Node.js, et j’écris des articles techniques. Je veux aider les développeurs à réussir et à être productifs.

Intégrez un bouton « physique » et intelligent à votre prochain projet

 

J’ai eu récemment une idée que j’ai voulu creuser : fabriquer un vrai bouton qui déclencherait CE QUE JE VOULAIS à l’aide d’une simple URL. Dans ce petit billet, je vous montre pas à pas comment j’ai réussi à développer ce projet en une soirée :

Traduction :

Moi, à 23 h : « Et si j’essayais de fabriquer un bouton #iot #intelligent qui pourrait déclencher N’IMPORTE QUEL webhook ? »

4 heures plus tard… Mission accomplie ⚡✨

À quoi vous servirait-il ? Envoyez-moi vos idées.

Souhaiteriez-vous avoir un billet de blog sur ce projet ?

 

Démonstration :

 

Rapport Magic Quadrant 2019 de Gartner – systèmes de bases de données

Lisez les dernières études pour faire des choix informés sur les solutions de systèmes de gestion de base de données sur ce marché de plus en plus concurrentiel.

Télécharger

Le matériel

Un bouton physique

Tout d’abord, il me faut un vrai bouton ou un interrupteur physique. Par chance, j’avais déjà commandé sur Amazon un « bouton d’urgence » quelques semaines auparavant. En tombant dessus, je l’avais trouvé super et avais décidé de l’acheter au cas où un jour j’en aurais besoin pour un projet. J’ai eu du nez !

Bien sûr, n’importe quel bouton fera l’affaire, du moment qu’il est équipé d’un interrupteur à verrouillage (pour que ce soit plus réaliste !) mais vous pouvez choisir l’interrupteur que vous voulez.

La carte microcontrôleur (le cerveau)

J’adore les cartes microcontrôleur de chez Onion Omega. D’ailleurs j’en ai beaucoup (vous savez, juste au cas où). Et je m’en sers pour tous mes projets IoT, comme pour mon projet de « bureau motorisé contrôlé par Google Home », par exemple.
Pour ce montage, ce sera beaucoup plus simple, puisqu’il n’y a que 2 câbles à connecter (par soudure, de l’interrupteur du bouton aux broches de l’Omega2+).

Voici le diagramme réaliser avec Fritzing :

Pour en savoir plus sur la carte microcontrôleur Onion Omega2+, ce tuto de prise en main est juste génial.

L’antenne Wifi

Vous pouvez (mais ce n’est pas obligatoire) utiliser une antenne Wifi externe pour la carte Onion Omega2+. C’est uniquement à titre de précaution, en cas de perte de signal due à l’antenne intégrée.

Pour mon montage, j’ai utilisé une antenne 6dBi qui traînait dans ma boîte à outils. Vérifiez simplement que votre antenne est compatible avec le connecteur u.FL. Pour en savoir plus sur la connexion de ce type d’antenne, je vous recommande vivement de lire le guide Onion.

Assemblage de tous les composants

Il faut maintenant connecter le câble micro-USB à l’Omega2+ (pour alimenter la carte) et bien placer tous les composants à l’intérieur du boîtier du bouton :

Le programme

En ce qui concerne la partie code, là encore, c’est facile puisqu’on peut choisir n’importe quelle technologie (Python, Node…) capable de communiquer en HTTP. Pour ce  projet, j’ai écrit un script Shell pour gérer le comportement du bouton. J’ai intégré des commentaires au code pour plus de clarté :

#!/bin/ash

# définir la broche d'entrée
IN_PIN=19
WEBHOOK=https://my-awesome-endpoint.dev/build-id
LOCK_FILE=/tmp/yolo.lock

# définir la directionle sens d’état de la broche
fast-gpio set-input $IN_PIN

while true
do

# obtenir la valeur d’état '0' ou '1' de la broche
# - '0': signifie que le bouton est enfoncé
# - '1': signifie que le bouton est relâché
# REMARQUE : veillez à ce que la chaîne 'GPI19' corresponde au numéro de $PIN
state=$(fast-gpio read $IN_PIN | awk '/Read GPI19:/ {print $4}')

# si l’état de la broche est '0', cela signifie que le bouton est enfoncé
if [ "$state" = "0" ]; then
echo "YOLO Button Engaged..."

if [ -f "$LOCK_FILE" ]; then
# vérifiez si le bouton est déjà en mode verrouillage (c’est-à-dire qu'il est enfoncé et verrouillé)
# dans ce cas, il suffit d’afficher le message suivant et de poursuivre.
echo "Command Loaded & Locked!"
echo ">Release Button to Cancel."
else

# si le bouton est enfoncé mais pas en mode verrouillage,
# nous faisons un test ping sur l’url $WEBHOOK ET créons un fichier de verrouillage.
curl -X POST -d {} $WEBHOOK
touch $LOCK_FILE
echo "Engaging Command..."
fi

else
# si l’état de la broche est '1', cela signifie que le bouton est relâché
# on supprime le fichier de verrouillage pour effacer l’état
[ -f $LOCK_FILE ] && rm $LOCK_FILE
echo "YOLO Button ready!"
fi

sleep 1
clear
done

 

Ce code se met en attente active et guette en permanence les changements d’état de $PIN. En appuyant sur le bouton, on active l’interrupteur qui connecte les 2 câbles l’un à l’autre et ferme le circuit. Lorsque cela se produit, la carte Omega 2+ reçoit une tension haute (3,3v) sur l’entrée $PIN. En utilisant le package fast-gpio «  inclus, nous pouvons lire l’état.

• La valeur 0 signifie que le bouton est enfoncé.
• La valeur 1 signifie que le bouton est relâché

.
Pour le reste, il s’agit juste de traiter les modes Enfoncer et Verrouiller de ce bouton, puisqu’il utilise un interrupteur à verrouillage.

À votre tour

Vous vous demandez peut-être ce que vous pouvez faire avec ce type de bouton connecté ? Eh bien, pour être honnête, les possibilités sont infinies, mais pour l’essentiel, tout service qui capable de communiquer en HTTP (URL de déploiement, API serverless, etc.) est un bon candidat !
Si vous souhaitez commencer à vous amuser et connecter ce bouton à une API, testez les Azure Functions pour créer et déployer rapidement votre logique d’application dans un environnement serverless.

Amusez-vous bien !

 

Apprenez à déployer une plateforme Windows Virtual Desktop

Dans ce 1er webinar en 6 parties, nous verrons comment configurer tous les prérequis pour mettre en service un tenant Windows Virtual Desktop et déployer un premier pool d’hôtes Windows 10 avec Office 365.

Je regarde