Comment pirater votre machine à café pour vous servir via Wi-Fi

diagramme de contrôle wifi daniel biegler café

Voici le résultat final:
 
Voici comment ça fonctionne:

Table des matières

Matériel utilisé / Ce dont vous avez besoin

Raspberry Pi Zero W
    J'ai personnellement utilisé un Raspberry Pi Zero avec un dongle USB Wi-Fi. Je recommanderais cependant le Raspberry Pi Zero W.
    Fils
    Carte / s de relais
    Fer à souder
    Optionnel:
    Interrupteur mécanique
        Prise de courant
        Percer

Étape 1:
Décidez de la fonctionnalité

Pour commencer, dévissez votre machine et découvrez comment les boutons interagissent avec le circuit imprimé principal.
Ici, vous pouvez voir que les boutons à l'avant alimentent la carte de circuit imprimé principale via ces connexions
daniel biegler café boutons wifi à la carte mère
Voici l'avant, c'est-à-dire l'interface utilisateur
machine à café wifi daniel biegler
Toute la théorie de ce projet est que nous allons appuyer sur des boutons par programmation.
Avec le matériel, vous avez un bouton physique, qui ressemble à ceci
daniel biegler café wifi bouton interrupteur
Lorsque vous appuyez sur le bouton, vous fermez le circuit qui permet à la charge de se déplacer.
C'est cool, car il suffit d'ajouter un autre "bouton", voir ici
daniel biegler café wifi interrupteur bouton et relais
De cette façon, peu importe le bouton sur lequel vous appuyez, que ce soit le bouton physique de la machine ou notre futur "bouton" numérique; Les deux boutons peuvent compléter le circuit!
Ce deuxième "bouton" sera notre carte relais.

Pour ce projet, j'ai décidé que je ne souhaitais contrôler que les trois boutons suivants:
Allumé éteint
    Préparez une tasse
    Préparez deux tasses

Décidez par vous-même du type de fonctionnalité qui vous intéresse.

Étape 2:
Identifier les connexions à souder

J'ai décidé que c'était une étape que je devais prendre dès le début pour exclure d'éventuels problèmes avec la carte. Les connexions peuvent être obstruées par de la colle chaude par exemple.
Daniel Biegler Coffee Wifi Machine UI Board Back
Retournez la carte d'interface utilisateur et identifiez les voies spécifiques.
Daniel Biegler Coffee Wifi Machine UI Board Front
Un peu de traçage plus tard et j'ai identifié toutes les informations dont j'ai besoin. Un fil à chaque ligne colorée plus un pour la masse (GND).

Daniel Biegler Coffee Wifi Machine UI Board Back annoté

Remarquez comment les trois boutons sont connectés au même GND, la ligne noire. Cela signifie que nous n'avons besoin que d'un seul fil pour le GND au lieu de câbler chaque bouton individuellement, cool!

Étape 3:
Découvrez comment fonctionne une carte relais

Un relais est simplement un interrupteur à commande électrique.
Laissez la charge se déplacer à travers une broche de commande et le commutateur bascule. Voici une courte vidéo, réalisée par Simon A. Eugster
 
Si nous connectons un tel relais à un bouton de notre machine à café, nous pouvons le contrôler électriquement!

Étape 4:
Découvrez comment contrôler la carte relais

Le Raspberry Pi possède ces soi-disant broches d'entrée / sortie à usage général. (court: broches GPIO)
Ils ressemblent à ceci:
daniel biegler café wifi framboise pi gpio pins
Nous allons utiliser les broches de sortie de notre Pi pour contrôler électriquement le relais, qui contrôlera ensuite la machine à café. Rappelez-vous le schéma au début, ici:
diagramme de contrôle wifi daniel biegler café

Comment interagissons-nous avec une broche GPIO?

Le Raspberry Pi fonctionne sous Linux, ce qui signifie "Tout est un fichier"; En d'autres termes, vous pouvez contrôler les broches GPIO simplement en écrivant dans un fichier. Ne vous inquiétez pas, j'ai publié mon code et je vais vous guider. Plus d'informations sur les détails plus tard.

Comment dire au Pi quand retourner la broche (relais)?

J'ai trouvé une API REST simple qui signifie que le Pi attendra une demande réseau spécifique et agira en conséquence, soit en faisant ce qui lui est dit, soit en rapportant une erreur.
Trois boutons veulent être contrôlés, donc le Pi écoutera ces trois instructions:

Commander
            action
        tasses = 1
            Préparez 1 tasse.
        tasses = 2
            Préparez 2 tasses.
        puissance = basculer
            Basculez l'alimentation.
        
Le fait d'avoir une telle interface permet de créer plusieurs façons d'interagir avec le Pi; Autrement dit, disposer d'un appareil capable d'envoyer des requêtes réseau (votre ordinateur de bureau, ordinateur portable, tablette, téléphone, montre, ..) vous permet d'interagir avec la machine à café!

Comment envoyer une demande de réseau?

J'ai trouvé que la construction d'un petit site Web était l'approche la plus intuitive pour l'interaction depuis lors, d'autres personnes de mon réseau peuvent également utiliser ce service. Vous pouvez décider de quelque chose de différent ici.
(Les scripts me viennent à l'esprit)

Étape 5
Décidez où placer le Pi

Votre Pi doit résider à l'intérieur ou à l'extérieur de la machine à café. J'ai ouvert le dos et heureusement trouvé beaucoup d'espace pour travailler avec.
machine à café wifi daniel biegler
Je ne possède pas de boîtier pour le Pi, donc une sorte de plaque arrière serait bien d'avoir. Un peu de plastique du sous-sol fera l'affaire. Percez quelques trous, tournez quelques vis et voilà:
daniel biegler café wifi framboise pi sur plaque
Le coller sur le mur arrière semblait assez raisonnable:
daniel biegler café wifi machine à l'intérieur

Étape 6:
Commencez à souder

Les cartes relais ont généralement besoin d'une broche pour l'alimentation (VCC), d'une autre broche pour la masse (GND) et d'une broche pour chaque canal. Je veux contrôler trois boutons, j'ai donc besoin de cinq broches au total. Je les ai marqués ici:
daniel biegler café wifi relais conseil utilisé broches récolte
Voici les broches que j'ai utilisées
daniel biegler café wifi framboise pi broches utilisées
Après avoir soudé et mis sous tension votre Pi, il devrait ressembler à ceci:
daniel biegler café wifi framboise pi soudé aux relais
Remarquez les trois LED brillantes, elles indiquent l'état des relais. Ils sont activés par défaut et doivent être désactivés après le démarrage de votre Pi. Cette tâche sera automatisée via un script de démarrage; Plus sur cela plus tard.

Sidenote:
À ce stade du projet, tout était nouveau pour moi, j'ai donc essayé de basculer les relais manuellement. Pour ce tutoriel, je vais entrer dans les détails techniques plus tard. Si vous connaissez Bash et que vous souhaitez déjà jouer avec lui, consultez mon script d'initialisation.

Le Pi est terminé, sur la machine à café.

Souvenez-vous du tableau tracé:
Daniel Biegler Coffee Wifi Machine UI Board Back annoté
Après le soudage, il devrait ressembler à ceci:
daniel biegler café wifi machine UI conseil arrière soudé
Cool, progresse! Vous devrez peut-être étendre vos fils en fonction de la taille de votre machine à café. La mienne s'étend de l'avant vers l'arrière comme ceci:

machine wifi wifi daniel biegler
Selon la façon dont vous souhaitez alimenter votre Pi, vous pourriez avoir fini de souder maintenant!

Mon père a suggéré que vous puissiez utiliser la même puissance qui entraîne la machine à café pour alimenter également le Pi. De cette façon, aucun câble externe ne serait visible, ce qui est plutôt bien si vous me demandez!

AVERTISSEMENT: je vous suggère de ne faire cela que si vous savez vraiment ce que vous faites! Travailler avec des tensions aussi élevées est dangereux. N'essayez que si vous savez ce que vous faites.

Nous avons mis une petite prise de courant à l'intérieur de la machine à café qui contient un adaptateur USB AC à DC du moulin. Cet adaptateur alimente ensuite le Pi via USB. Vois ici:
daniel biegler café wifi machine ac dc usb adaptateur
Pour pouvoir allumer ou éteindre le Pi, un petit interrupteur mécanique a été utilisé. La prise blanche a deux câbles qui en sortent. L'un doit passer dans l'interrupteur mécanique et l'autre dans la machine à café.
    Identifiez d'où la machine tire son énergie en recherchant PROBABLEMENT un câble marron, bleu et jaune + vert. (Vérifiez les couleurs de votre région, ces couleurs ne sont valables que pour l'Europe!)
    Connectez les câbles de la prise d'alimentation au câble marron et bleu comme dans l'image suivante. Peu importe le câble spécifique de la prise d'alimentation qui va dans le bleu ou le marron.
daniel biegler café wifi câbles de prise de courant étiquetés
Coupez un trou pour l'interrupteur et profitez de la bonté cachée.
daniel biegler café wifi interrupteur mécanique

Étape 7
Configurer le logiciel nécessaire

Remarque:
Tout mon code pour ce projet se trouve ici.
    
    J'ai codé l'API REST susmentionnée dans du PHP de base, car un serveur Web avec support PHP était déjà installé sur mon Pi.
    En tant que serveur Web (+ PHP), vous avez le choix entre deux options, il y a de petits articles soignés de la Fondation Raspberry Pi elle-même. Peu importe celui que vous choisirez, choisissez-en un. Par exemple, vous pouvez opter pour NGINX ou Apache. Le processus est à peu près le même et une étape "set-it-and-oublier-it".
    Téléchargez et installez, activez certaines choses, c'est fait.

Comment contrôlons-nous exactement les broches GPIO

Les broches sont représentées sous forme de fichiers sur votre Pi. Vous pouvez les trouver dans le dossier / sys / class / gpio, voir ici:
     $ ls / sys / class / gpio
exporter gpiochip0 unexport
    
    Ce dossier est assez intéressant, car il existe deux fichiers spéciaux, l'exportation et la non-exportation.
    Le fichier d'exportation configure et active les fichiers d'une broche spécifique.
Le fichier de non-exportation supprime les fichiers créés.
    
    Un petit exemple vous aidera à comprendre comment cela fonctionne: vous écrivez simplement le numéro de la broche GPIO dans le fichier d'exportation, puis vous avez accès aux fichiers nécessaires. La seule mise en garde est que, par défaut, vous avez besoin des privilèges root car il s'agit d'un répertoire système. Par exemple, je veux activer la 5ème broche GPIO donc j'écris le numéro 5 dans l'export:
     $ Echo 5> exportation
$ ls / sys / class / gpio
exporter gpio5 gpiochip0 unexport
    
    Voyez comment il existe maintenant un dossier supplémentaire appelé gpio5! Vous pouvez aller à l'intérieur et lister son contenu via:
     $ cd / sys / class / gpio / gpio5
$ ls
sous-système de puissance de périphérie de direction active_low valeur uevent
    
    Voici des fichiers plus spéciaux qui vous permettent de configurer cette broche. Pour nous, la direction et la valeur sont intéressantes car avec ces deux-là, nous pourrions commencer à contrôler notre relais! Inspectez le contenu des fichiers via:
     $ Cat direction value
dans
1
    
    La direction actuelle de cette broche pointe et sa valeur est 1. Imaginez que vous connectez un périphérique externe à cette broche, de cette façon, vous pouvez établir une communication entre différents systèmes en surveillant la valeur. Cool, non?
    
    Notre objectif est de fournir une charge au relais, nous devons donc changer de direction de l'intérieur vers l'extérieur.
    Écrivez simplement dans le fichier de direction comme ceci:
     $ Echo out> direction
$ Cat direction value
en dehors
0
    
    Voir maintenant la broche pointe vers l'extérieur et a une valeur de 0. Truc super simple. J'étais assez ravi quand j'ai essayé cela pour la première fois parce que j'avais supposé que le contrôle du matériel serait très difficile. Il suffit d'écrire 1 ou 0 dans le fichier de valeurs. Qui savait?
    
    Un petit sidenote:
Une distinction doit être faite ici, les fichiers d'exportation et de non-exportation n'attendent pas le numéro de broche littéral, mais le numéro de broche GPIO qui est différent. Prenons l'exemple de la broche GPIO numéro 5. Sur le graphique suivant, vous pouvez voir que la GPIO5 a le numéro de broche littéral 29.
daniel biegler café wifi framboise pi broches utilisées

Alors oui, gardez cela à l'esprit.

Configurez les broches GPIO dont nous avons besoin

Comme vous l'avez vu dans le graphique précédent, j'ai l'intention d'utiliser les broches GPIO 2, 3 et 4.
J'ai écrit un script qui effectue les étapes d'exportation, de définition de la direction, de définition de la valeur et des autorisations:
     # Activez les broches nécessaires.
echo 2> '/ sys / class / gpio / export';
echo 3> '/ sys / class / gpio / export';
echo 4> '/ sys / class / gpio / export';

# Changez les directions en "out".
echo 'out'> '/ sys / class / gpio / gpio2 / direction';
echo 'out'> '/ sys / class / gpio / gpio3 / direction';
echo 'out'> '/ sys / class / gpio / gpio4 / direction';

# Éteignez les broches.
echo 1> '/ sys / class / gpio / gpio2 / value';
echo 1> '/ sys / class / gpio / gpio3 / value';
echo 1> '/ sys / class / gpio / gpio4 / value';

# Changer les permissions pour que le serveur web puisse écrire dans les fichiers 'value'
chmod 777 '/ sys / class / gpio / gpio2 / value';
chmod 777 '/ sys / class / gpio / gpio3 / value';
chmod 777 '/ sys / class / gpio / gpio4 / value';
    
    Un redémarrage du Pi réinitialise les broches que nous avons précédemment exportées, nous avons donc besoin d'un service de démarrage qui les réactive après le démarrage. J'ai écrit ce service qui exécutera le script d'initialisation:
     (Unité)
Description = Configure les fichiers et les autorisations nécessaires pour que les 2e, 3e et 4e broches GPIO fonctionnent.

(Un service)
Type = oneshot
ExecStart = / bin / gpio_coffee_init.sh

(Installer)
WantedBy = multi-user.target
    
    Veuillez noter à quoi ressemble le service pour le script d'initialisation dans le dossier / bin /bin/gpio_coffee_init.sh. Donc, avant d'activer ce service, vous devez déplacer gpio_coffee_init.sh dans / bin via:
     $ mv gpio_coffee_init.sh / bin
    
    Ensuite, j'ai également déplacé le service dans / etc / systemd / system de la même manière via:
     $ mv gpio_coffee_init.service / etc / systemd / system
    
    Après cela, vous pouvez essayer si cela fonctionne en démarrant le service via:
     $ Systemctl start gpio_coffee_init.service
    
    Cela devrait définir vos broches GPIO que vous pouvez vérifier manuellement dans le répertoire / sys / class / gpio, comme ceci:
     $ ls / sys / class / gpio
exporter gpio2 gpio3 gpio4 gpiochip0 unexport
    
    Voyez comment les deuxième, troisième et quatrième broches ont été exportées. Yay. Si cela réussit, vous pouvez activer le service, ce qui signifie qu'il s'exécutera à chaque démarrage du Pi.
     $ systemctl enable gpio_coffee_init.service

Un résumé rapide

Nous avons un script d'initialisation qui définit correctement nos broches: exportez-les, configurez la direction, la valeur et les autorisations de fichier.
        Ce script d'initialisation s'exécute automatiquement après le démarrage du Pi.
    
    Je l'ai fait une fois et après des mois d'utilisation, je n'ai jamais eu besoin de changer quoi que ce soit ici. Ça marche. ™

Déployer le site Web

D'accord, nous avons retiré le matériel. Il est temps de déployer le site Web.
    
    Les fichiers du site Web résideront probablement pour vous dans / var / www / html. Ce dossier dépend cependant de votre distribution Linux, les miennes se trouvent par exemple dans / srv / http. Cela n'a pas vraiment d'importance, découvrez simplement où votre serveur recherche des fichiers via le moteur de recherche de votre choix.
    
    Vous pouvez trouver le code de mon site ici. Téléchargez-le et déplacez le fichier index.php et le dossier du fournisseur vers le répertoire où votre serveur Web recherche les pages. Le fichier index.php contient le site Web réel et le dossier du fournisseur contient les «graphiques» pour ainsi dire. Si vous oubliez de déplacer également le dossier du fournisseur, le site aura l'air simple et cassé, c'est tout ce que j'essaie de dire.
    
    Sidenote:
Je ne pense pas qu'il soit nécessaire ici de parcourir tout le code des sites, n'est-ce pas? Envoyez-moi un commentaire si vous pensez le contraire.
    
    J'ai conçu le site pour être minimaliste et optimisé pour les écrans mobiles. Il devrait ressembler à ceci lorsque vous l'ouvrirez dans votre navigateur:
daniel biegler café wifi site web ui
Enfin et surtout deux petites astuces pour améliorer la qualité de vie lors de l'utilisation de ce service:
    Vous pouvez changer le nom d'appareil de votre Pi en quelque chose comme «  café '' afin de pouvoir y accéder plus facilement à l'intérieur de votre réseau domestique. Par exemple, mon routeur FRITZ! Box me permet de me connecter à des appareils à l'intérieur de mon réseau via des URL comme: .fritz.box qui dans ce cas rendrait la connexion très confortable via coffee.fritz.box
    
    Pour ce faire, il vous suffit d'écrire le nom de votre choix dans le fichier de nom d'hôte dans / etc / hostname comme ceci:
     $ echo 'café'> / etc / hostname
    
    Une autre astuce intéressante est que vous pouvez ajouter ce site à votre écran d'accueil. De cette façon, vous pouvez accéder à votre café en appuyant simplement sur l'icône. Chrome, Firefox et Safari prennent tous en charge cette fonctionnalité, recherchez-la dans les paramètres lorsque vous visitez un site.

Le site en action

En supposant que le logiciel fonctionne comme prévu: Enfin, le moment magique de tout assembler est à nos portes.

Étape 8
Connexion de la machine à café au relais

La connexion du relais à la machine à café se fait facilement, voici un petit schéma que j'ai réalisé:
schéma de relais de câblage wifi café daniel biegler
En réalité, cela ressemble à ceci:
relais de câblage wifi café daniel biegler

Vous devriez avoir terminé maintenant.

Maintenant, votre prochain café n'est qu'à un clic!
    Par souci d'exhaustivité, jetez un autre coup d'œil au diagramme abstrait
diagramme de contrôle wifi daniel biegler café
et ressentez le pur bonheur de faire fonctionner une machine lourde du bout des doigts:

Mots de clôture

Merci d'avoir lu ce gâchis. Ce fut mon premier projet de matériel et avait besoin de beaucoup de bricolage, d'essais et d'erreurs. Avec le recul, cela semblait vraiment intimidant, mais j'ai apprécié la route.
    Si vous avez aimé cet article, vous abonner à ma liste de diffusion pourrait vous intéresser. J'ai également un article interactif et approfondi sur l'apprentissage du binaire et plus encore. Rejoignez la discussion sur ce post sur Reddit!

Laisser un commentaire