Table des matières:

Imprimante Alexa - Imprimante de reçus recyclés : 7 étapes (avec photos)
Imprimante Alexa - Imprimante de reçus recyclés : 7 étapes (avec photos)

Vidéo: Imprimante Alexa - Imprimante de reçus recyclés : 7 étapes (avec photos)

Vidéo: Imprimante Alexa - Imprimante de reçus recyclés : 7 étapes (avec photos)
Vidéo: Ne JAMAIS partir SANS SA COPINE 🫢 #humour #blague #drole #couplegoals #internationalcouple #shorts 2024, Décembre
Anonim
Image
Image
Imprimante Alexa | Imprimante de reçus recyclée
Imprimante Alexa | Imprimante de reçus recyclée

Je suis fan de recycler les vieilles technologies et de les rendre à nouveau utiles. Il y a quelque temps, j'avais acquis une vieille imprimante thermique bon marché et je voulais un moyen utile de la réutiliser. Puis, pendant les vacances, on m'a offert un Amazon Echo Dot, et l'une des fonctionnalités que j'ai le plus utilisées était d'ajouter des produits d'épicerie à ma liste de courses. J'ai donc pensé que ce serait cool de combiner les deux et d'utiliser l'imprimante de reçus comme imprimante IOT pour Alexa (ou Google Home, ou Siri, etc.). Voyons ce qu'il faudra pour faire de cette idée une réalité.

Fournitures

Voici les pièces que j'utilise pour ce projet:

  1. Imprimante de reçus thermique générique bon marché (doit prendre en charge ESC-POS)
  2. Appareil Amazon Alexa (d'autres appareils « assistants domestiques » fonctionneront probablement aussi)
  3. Raspberry Pi Zero sans fil
  4. 7805 Régulateur 5v
  5. Condensateur 10μf
  6. 1μf Condensateur

D'autres choses que j'utilise pour ce projet sont:

  1. Si ceci alors cela (IFTTT.com)
  2. Équipement de soudage

Étape 1: Configuration du Raspberry Pi Zero W

Configuration du Raspberry Pi Zero W
Configuration du Raspberry Pi Zero W
Configuration du Raspberry Pi Zero W
Configuration du Raspberry Pi Zero W
Configuration du Raspberry Pi Zero W
Configuration du Raspberry Pi Zero W

La première étape consiste à faire imprimer à nouveau l'ancienne imprimante de reçus. J'ai choisi d'utiliser le Raspberry Pi Zero W comme contrôleur en raison de son prix bon marché et de sa petite taille. Il est en fait assez petit pour tenir dans le boîtier de l'imprimante de reçus lui-même, il n'y a donc pas de connexions externes ! Le Pi Zero W a également intégré le Wifi, donc tout est fondamentalement intégré dans sa petite taille.

Pour que le Pi soit opérationnel, nous devons télécharger le système d'exploitation Raspbian et le graver sur une carte microSD à l'aide d'un programme tel que Etcher. Insérez-le dans le Pi avec un câble HDMI, un clavier, une souris, puis alimentez-le.

Lorsque le Pi démarre et que vous êtes sur l'interface du bureau, vous pouvez vous connecter à votre connexion sans fil en cliquant sur l'icône sans fil en haut à droite et en sélectionnant le nom de votre connexion sans fil. Ensuite, si vous faites un clic droit sur cette même icône sans fil, vous pouvez accéder aux paramètres réseau et définir une adresse IP statique afin que nous puissions facilement nous y connecter via le réseau. Enfin, vous souhaitez cliquer sur le menu principal et sélectionner "Raspbian Configuration Editor" et sous l'onglet "Interfaces", assurez-vous que SSH est activé. Ensuite, enregistrez-le et redémarrez votre Pi.

Étape 2: Impression à partir du Pi

Impression depuis le Pi
Impression depuis le Pi
Impression depuis le Pi
Impression depuis le Pi

Une fois le Raspbery Pi redémarré, il doit être connecté à votre réseau sans fil avec une IP statique et avec SSH activé. Alors maintenant, nous devrions pouvoir nous y connecter à distance depuis n'importe quel autre ordinateur. Pour ce faire, vous aurez besoin d'un client SSH. Pour Windows, un bon client est Putty. Vous pouvez vous y connecter en utilisant l'adresse IP statique du Pi que nous avons définie précédemment. Ensuite, vous pouvez vous connecter en utilisant "pi" comme nom d'utilisateur et "raspberry" comme mot de passe.

Après une connexion réussie, nous devrions maintenant être à l'interface du terminal du Pi. Ici, nous pouvons saisir des commandes qui s'exécuteront sur le Raspberry Pi. Par exemple, l'une des premières choses que nous voulons faire est de nous assurer que le logiciel du Pi est à jour. Ainsi, dans le terminal, nous pouvons taper:

sudo apt-get mise à jour

Cette commande mettra à jour les référentiels de logiciels sur le Pi. Ensuite, nous pouvons installer le logiciel d'impression ESC-POS et les bibliothèques requises.

sudo apt-get install python3 python3-setuptools python3-pip libjpeg8-devsudo pip3 install --upgrade pip sudo pip3 install python-escpos

Cela fait, nous pouvons maintenant connecter l'imprimante au port Micro-USB du Pi (à l'aide d'un adaptateur) et l'allumer. Ensuite, dans notre terminal, nous pouvons créer un petit script python

nano hello_world.py

Et nous pouvons y ajouter ce code python

#!/usr/bin/pythonfrom escpos.printer import Usb p = Usb(0x0416, 0x5011) p.text("Mini IOT Printer\n") p.close()

Quittez-le (CTRL-X), enregistrez-le (CTRL-Y) et exécutez-le pour le tester

python3 bonjour_monde.py

Étape 3: Se connecter à l'Internet des objets (Partie 1)

Se connecter à l'Internet des objets (Partie 1)
Se connecter à l'Internet des objets (Partie 1)
Se connecter à l'Internet des objets (partie 1)
Se connecter à l'Internet des objets (partie 1)
Se connecter à l'Internet des objets (Partie 1)
Se connecter à l'Internet des objets (Partie 1)
Se connecter à l'Internet des objets (Partie 1)
Se connecter à l'Internet des objets (Partie 1)

A quoi servirait une imprimante sans quelque chose à imprimer ? Je voulais activer la fonctionnalité d'impression à partir de différents services Internet, tels qu'Alexa. Alors comment puis-je accomplir cela? Une option consiste à choisir un service Internet spécifique, à rechercher la documentation de leur API et à écrire une application basée sur leur API. Mais je choisis d'emprunter la voie paresseuse…

Il existe un excellent site Web appelé "If This Then That" qui déclenche des actions pour différents services Internet (Alexa, Google Home, Gmail, Facebook, Instagram, Twitter, etc.) en fonction d'un ensemble de critères. Par exemple, "si" je poste sur Facebook (ceci), "Alors" m'envoie un e-mail (cela).

Donc, pour la première moitié de cela, j'ai créé un compte gratuit, vous pouvez commencer à créer une nouvelle "applet" pour les différents services que vous souhaitez déclencher. La partie "Ceci" de mon applet sera Alexa. Il y a beaucoup de déclencheurs Alexa parmi lesquels choisir, mais je vais sélectionner celui qui dit "Demandez ce qu'il y a sur votre liste de courses". Et nous voulons finalement qu'il déclenche un script Python sur le Raspberry Pi, donc pour la partie "Ça" du script, nous voulons choisir des Webhooks.

Dans l'option Webhooks, nous pouvons ajouter une URL qui pointe vers notre Pi, sur laquelle nous reviendrons plus tard. Nous pouvons laisser le champ Méthode sur "Obtenir", et pour le type de contenu, sélectionner "Texte brut". Pour le champ Corps, cliquez sur « Ajouter un ingrédient » et sélectionnez « Liste entière ». Cela enverra toute la liste de courses en tant que demande Get.

Étape 4: Se connecter à l'Internet des objets (Partie 2)

Se connecter à l'Internet des objets (Partie 2)
Se connecter à l'Internet des objets (Partie 2)
Se connecter à l'Internet des objets (Partie 2)
Se connecter à l'Internet des objets (Partie 2)

L'étape précédente s'occupe de la partie "Internet", donc maintenant travaillons sur la partie "choses" à l'aide du Raspberry Pi. Afin de communiquer avec l'applet des webhooks « If This Then That », nous devons configurer un serveur Web sur le Raspberry Pi. Il existe de nombreuses manières différentes de configurer un serveur Web, mais étant donné que je souhaite finalement exécuter un script Python, j'ai décidé d'utiliser le serveur Flask de Python.

Le Pi a toutes les bibliothèques Flask pré-installées, donc tout ce que nous avons à faire est de commencer à écrire un script de test:

nano flacon_test.py

Et dedans, ajoutons du code qui sert une simple page Web.

#!flask/bin/python#IMPORTER LES BIBLIOTHÈQUES DE FLASK depuis le flacon import Flask, request #CREATE A FLASK VARIABLE app = Flask(_name_) #CREATE AN 'INDEX' PAGE @app.route('/') def index(): return 'Votre serveur Flask fonctionne !' #RUN THE PROGRAM if _name_ == '_main_': app.run(debug=True, host='0.0.0.0')

Maintenant, enregistrez simplement le programme et exécutez-le à l'aide de cette commande:

sudo python3 flacon_test.py

Vous verrez par la réponse de la commande que le port par défaut sur lequel Flask s'exécute est le port 5000. Ainsi, dans un navigateur Web, si vous saisissez l'adresse IP de votre Pi: 5000, vous devriez voir le texte « Votre serveur Flask fonctionne ! »

Nous avons notre code Python de test antérieur qui s'imprime sur notre imprimante de reçus, et nous avons notre serveur Flask de test. Ensuite, nous devons les combiner et incorporer du code qui extrait les données de notre applet Webhook. Créons un nouveau fichier Python:

nano iot_print_server.py

Et à l'intérieur, ajoutez le code suivant:

#!flask/bin/python#IMPORTER LES BIBLIOTHÈQUES DE FLACON ET D'IMPRIMANTE depuis flask import Flask, demande de escpos.printer import Usb #ASSIGNER LES VARIABLES POUR L'IMPRIMANTE ET LA FLASK p = Usb(0x0416, 0x5011) app = Flask(_name_) #CREATE 'INDEX' PAGE @app.route('/') def index(): return 'Votre serveur Flask fonctionne !' #CRÉER UNE "PAGE" APPELÉE "LISTE" POUR L'IMPRESSION DE LA LISTE D'ACHATS ALEXA @app.route('/list') def list(): #CAPTURE "OBTENIR" LES DONNÉES DE IFTTT WEBOOKS content = request.get_data() #CONVERTIR LES DONNÉES RAW EN STRING str_content = str(content) #DIVISER LES DONNÉES EN LIGNES SÉPARÉES str_split = str_content.splitlines() #SÉPARER LES MOTS PAR DES VIRGUES ET AJOUTER À UNE NOUVELLE LISTE newlist = pour le mot dans str_split: mot = mot.split(', ') newlist.extend(word) #REMOVE FORMATTING MARKS rmv_marks = [s.strip("b'") for s in newlist] #PRINT HEADER #print("Liste de courses\n") p.text("Liste de courses:\n ") #ÉNUMÉRER ET IMPRIMER CHAQUE ÉLÉMENT DE LA LISTE r = 1 pour x dans rmv_marks: #print(str(r) + ". " + x + "\n") p.text(str(r) + ". " + x + "\n") r += 1 #RETURN RESULTS return 'x' #RUN THE PROGRAM if _name_ == '_main_': app.run(debug=True, host='0.0.0.0')

Vous pouvez l'exécuter pour voir s'il renvoie des erreurs, mais cela ne fonctionnera pas encore avec notre webhook car pour le moment, le serveur ne fonctionne que localement. Il n'y a pas encore d'URL externe à laquelle le webhook se connecte. Nous pourrions configurer la redirection de port sur notre routeur et utiliser simplement notre adresse IP externe, mais ce n'est pas vraiment trop sûr. Comme alternative, je décide d'aller avec NGROK.

Étape 5: Configuration de l'accès externe avec Ngrok

Configuration de l'accès externe avec Ngrok
Configuration de l'accès externe avec Ngrok
Configuration de l'accès externe avec Ngrok
Configuration de l'accès externe avec Ngrok

Ngrok met en place une connexion sécurisée à votre réseau sans avoir à exposer votre adresse IP externe ou à gâcher la redirection de port. Après avoir créé un compte gratuit, il vous donne un jeton d'autorisation. Ensuite, sur votre Raspberry Pi, vous pouvez le télécharger, le décompresser, connecter votre jeton d'authentification, puis l'exécuter sur le port 5000:

mkdir ngrokcd ngrok wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable… décompressez ngrok-stable-linux-arm./ngrok authtoken [insérez votre jeton d'authentification ici]./ngrok http 5000

***IMPORTANT*** La version gratuite de Ngrok ne vous donne pas d'adresse statique, donc chaque fois que vous relancez Ngrok, il vous donnera une adresse différente. Si vous voulez une adresse statique pour ne pas avoir à rééditer votre Webhook, vous devrez payer pour un compte mis à niveau.

Une alternative gratuite à Ngrok qui offre des adresses IP statiques s'appelle "Serveo" sur www.serveo.net

************************

Sur l'écran résultant, il vous donne une adresse de transfert (https://random-string.ngrok.io) que nous pouvons utiliser dans notre applet Webhook. Donc, en revenant à "If This Then That", dans le champ URL, entrez votre adresse de transfert Ngrok et pointez-la vers la page "liste" de notre serveur Flask. Ça devrait ressembler a quelque chose comme ca

random_string.ngrok.io/list

Ensuite, allez-y et enregistrez les modifications.

Pour le tester, laissez Ngrok en cours d'exécution, ouvrez un nouveau terminal et exécutez notre script python. Avec les deux articles en cours d'exécution, demandez à Alexa ce qu'il y a sur votre liste de courses. Après une minute ou deux, il devrait imprimer les résultats. Si vous souhaitez l'imprimer immédiatement, accédez simplement à votre applet sur IFTTT et cliquez sur "Vérifier maintenant". Si tout se passe bien, l'imprimante de reçus devrait imprimer ce qu'il y a sur votre liste de courses ! Le dernier morceau de code que nous devons ajouter est un moyen de démarrer automatiquement ngrok et notre serveur de flacons à chaque démarrage du Pi. Nous pouvons facilement le faire en rendant notre script Python exécutable:

chmod +x iot_print_server.py

Ensuite, nous pouvons éditer notre fichier /etc/rc.local pour qu'il ressemble à ceci:

## Par défaut, ce script ne fait rien. # Affiche l'adresse IP _IP=$(hostname -I) || true if ["$_IP"]; puis printf "Mon adresse IP est %s\n" "$_IP" fi #autostart ngrok et pointez-le vers votre fichier d'authentification./home/pi/ngrok/ngrok http -config=/home/pi/.ngrok2/ngrok. yml 5000 #autostart le script python de l'imprimante sudo python3 /home/pi/iot_receipt_printer.py & exit 0

Étape 6: Ajout du Pi à l'imprimante

Ajouter le Pi à l'imprimante
Ajouter le Pi à l'imprimante
Ajouter le Pi à l'imprimante
Ajouter le Pi à l'imprimante
Ajouter le Pi à l'imprimante
Ajouter le Pi à l'imprimante
Ajouter le Pi à l'imprimante
Ajouter le Pi à l'imprimante

L'imprimante de reçus que j'ai a beaucoup d'espace vide à l'intérieur du boîtier. Et avec le Raspberry Pi Zero étant aussi petit qu'il est, j'ai pensé que ce serait cool de le cacher dans l'imprimante de reçus pour qu'il ressemble à un seul appareil. Le seul problème est que l'imprimante de reçus fonctionne sur 12v et le Pi fonctionne sur 5v. Donc, si nous ne voulons qu'un seul câble d'alimentation pour les alimenter tous les deux, nous devrons réduire cette alimentation 12v à 5v.

À l'aide d'un régulateur de tension 7805, d'un condensateur 1 uf et d'un condensateur 10 uf, j'ai pu créer un simple régulateur 5 v que j'ai connecté à la carte logique de l'imprimante de reçus. J'ai soudé le fil "-" à la masse commune, puis j'ai soudé le fil "+" au côté "marche" de l'interrupteur d'alimentation afin que le Pi s'allume et s'éteigne lorsque l'imprimante est allumée et éteinte. À l'aide d'un multimètre, j'ai testé pour confirmer que la sortie était sans danger pour le Pi. Ensuite, j'ai soudé un câble micro-usb et je l'ai connecté au Pi. Après avoir branché le câble sur l'imprimante et actionné l'interrupteur, l'imprimante et le Pi se sont allumés !

Enfin, j'ai percé un trou pour connecter le câble USB du Pi à l'imprimante. J'ai trouvé un endroit pour mettre le régulateur 5v et Pi à l'intérieur du boîtier de l'imprimante, puis j'ai tout remonté. Alors maintenant, l'imprimante dispose également de son propre serveur Web autonome !

Étape 7: Aller plus loin

Aller plus loin
Aller plus loin

Si vous avez pu jeter un coup d'œil à "If This Then That", vous avez probablement remarqué qu'il propose des tonnes de services Web différents auxquels se connecter. Donc, si vous n'avez pas d'Alexa ou si vous ne voulez pas en utiliser, vous pouvez utiliser ce projet pour imprimer à partir de n'importe quoi, comme Facebook, Twitter, Gmail, Google Home, Evernote, Tumblr, Flickr, Wordpress, etc. Vous pouvez trouver mon code pour imprimer des Tweets sur ma page Github. Maintenant, allez voir ce que vous pouvez trouver !

Défi IdO
Défi IdO
Défi IdO
Défi IdO

Premier prix du challenge IoT

Conseillé: