Intégrez un bouton « physique » et intelligent à votre prochain projet
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 :
Me at 11pm: « Hey, what if I can build a #smart #iot button and make it trigger ANY webhook? » ?
4 hours later… Mission accomplished ??⚡✨
What would you make it do? Send me your ideas.
Would you like a blog post about this project? pic.twitter.com/wOoZPlTdgS
— Wassim Chegham (@manekinekko) July 8, 2019
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 :
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 !