conférence a duré près de 2 heures, il est donc probablement préférable de la regarder directement sur Youtube; il y a une table des matières dans la description de la vidéo. La vidéo sera suivie d'une transcription textuelle sous une forme abrégée (spéciale pour Habr).
Bonne visualisation ou lecture. :)
Description du problème et concept de la solution
Commençons par les données initiales. Nous avons un scanner ordinaire (dans mon cas Canon CanoScan LiDE 120) qui se connecte au port USB de l'ordinateur et peut numériser dans l'ordinateur. Mais ici, par exemple, un deuxième ordinateur apparaît, et avec le besoin général de numérisation, basculer le scanner entre les ordinateurs à chaque fois n'est pas pratique. Que faire? Oui, il existe maintenant des MFP réseau, mais pour une raison quelconque, ce n'est pas une option pour nous.
Pour résoudre le problème, nous devons essentiellement équiper un emplacement séparé pour le scanner, organiser un lecteur réseau, y connecter tous les ordinateurs de notre réseau domestique et apprendre au scanner à numériser vers ce même lecteur réseau. L'utilisateur en cours de numérisation sera à proximité du scanner, appuyez sur les boutons et changez les feuilles numérisées; il n'a pas besoin de courir sur l'ordinateur à chaque fois pour donner une commande à analyser. Et puis, lorsque tout ce dont il a besoin est numérisé, il ira sur son ordinateur, copiera ou transférera les fichiers numérisés du lecteur réseau vers lui-même et continuera à travailler avec eux.
Du coup, on choisit un endroit pour placer le scanner, on y apporte un câble depuis le routeur de notre réseau local (le WiFi est également possible, mais on laisse cela pour une option), on met une prise pour alimentation 220V - et que faire ensuite?
En théorie, le scanner doit être connecté à un ordinateur. Mais acheter et installer un ordinateur séparé à ces fins est coûteux et non justifié. Eh bien, il aura besoin d'un clavier et d'une souris avec un moniteur, ils ont également besoin d'un endroit. En même temps, nous n'avons rien de spécial, nous numérisons principalement un format (A4). Alors regardons quelque chose de plus portable.
Dans notre projet, nous utilisons un ordinateur monocarte Raspberry Pi 2 Model B.Bien qu'il ne soit pas nouveau et pas très puissant, sa puissance nous suffit pour la tâche, il ne consomme pas vraiment d'énergie, eh bien, le GPIO nous sera utile.
Pour ceux qui veulent tout de suite tout répéter sur la base du scanner existant, je vous recommande de vous rendre d'abord sur le site du projet SANE, accédez à la liste des périphériques pris en charge et assurez-vous que le modèle de scanner spécifique est correctement pris en charge par le projet. Sinon, les efforts et, éventuellement, l'argent peuvent voler dans le tuyau. De plus, cela peut valoir la peine d'organiser une machine (virtuelle ou réelle) avec Debian 10 (plus précisément, la version actuelle au moment de la vérification de la version à partir de laquelle la Fondation Raspberry Pi a fait le système d'exploitation) et sain d'esprit et de vérifier le travail à l'aide de l'utilitaire scanimage; si tout est normal, cela fonctionnera probablement sur les framboises.
Auxiliaire nécessaire
En ce qui concerne l'alimentation de la framboise et du scanner, dans le projet de démonstration, j'utilise un chargeur MicroUSB ordinaire à deux ampères. Mais, si les framboises sont censées fonctionner 24 heures sur 24, je ne conseille pas de les utiliser. Ce n'est pas leur tâche, et ce n'est pas un fait qu'une charge particulière n'échouera pas si elle ne donne pas un si petit courant pendant une longue période en mode 24/7. Il est préférable de ne pas économiser d'argent et de prendre soit un bloc d'alimentation propriétaire, soit d'en adapter un autre adapté à un tel travail.
De plus, je ne recommande pas de connecter le scanner avec un câble USB de grande longueur ou de quelque origine que ce soit. C'est le résultat de plus de six mois d'expérience d'exploitation; une surprise peut survenir au moment le plus inopportun.
En ce qui concerne la mémoire «disque» - dans les framboises, comme vous le savez, des cartes microSD sont utilisées. Le dixième système d'exploitation Raspberry Pi tient sur une carte de 4 Go. Mais nous aurons toujours un logiciel installable décent là-bas, plus un dossier réseau pour les analyses. Nous nous concentrons donc sur au moins 8; 16 utilisé dans le projet.En outre, pour l'enregistrement initial de l'image du système d'exploitation, vous aurez besoin d'un ordinateur avec un lecteur de carte, auquel la carte peut être connectée. J'ai utilisé un adaptateur pour un lecteur de carte SD intégré à l'ordinateur portable.
Nous avons également besoin d'un corps. Il existe de nombreuses options. Dans la variante représentée, j'ai utilisé un boîtier non d'origine d'épaisseur accrue; cela a permis de monter un schéma de deux boutons et une LED fournie par le projet sur le capot supérieur (plus à ce sujet plus tard), et la hauteur du boîtier était suffisante pour les boutons, et pour une framboise, et pour les connecteurs BLS pour la connexion aux broches GPIO. Ce corps est en plexiglas. Voici à quoi ça ressemble avec le circuit assemblé, mais sans la framboise:
j'utilise maintenant ce boîtier pour le débogage et les démonstrations, et dans la version de combat, la framboise est attachée dans un panneau électrique dédié avec l'alimentation et est utilisée en même temps pour une autre tâche, et le circuit est monté dans un petit boîtier séparé, qui est connecté à la framboise avec un câble téléphonique plat à quatre conducteurs.
Un autre problème avec les framboises est le chauffage du noyau. Si vous prévoyez de travailler 24 heures sur 24, nous collons un petit radiateur avec quelque chose de conducteur de chaleur approprié.
Préparation d'une carte mémoire
Commençons à préparer la carte mémoire. Récemment, la Fondation Raspberry Pi a non seulement renommé Raspbian en Raspberry Pi OS, mais a également publié un programme appelé Raspberry Pi Imager pour Windows, macOS et Ubuntu. Téléchargez ce programme, installez-le sur votre ordinateur et exécutez-le.
Tout d'abord, dans la fenêtre du programme, faisons Choose OS. Il existe de nombreuses options. Par défaut, le système d'exploitation Raspberry Pi (32 bits) est proposé, mais c'est avec un bureau, et pour deux, le bureau est moyen. Par conséquent, nous allons à Raspberry Pi OS (autre) et là, nous sélectionnons l'option lite; nous n'avons pratiquement besoin de rien d'autre que de la ligne de commande. Ensuite, nous mettons et sélectionnons une carte mémoire et écrivons une image dessus. Ce processus est montré dans la vidéo à 00:12:15 .
La configuration initiale
Vous pouvez mettre la carte mémoire dans la framboise et aller à son réglage. Pour ce faire, en plus de l'alimentation, d'un réseau avec Internet et d'un scanner, nous devons connecter un clavier USB et un moniteur avec un câble HDMI (pour la quatrième génération de framboises, il y a MicroHDMI). Nous connectons l'alimentation en dernier. Et n'oubliez pas la sécurité lorsque vous travaillez avec des pièces conductrices ouvertes, surtout si la framboise n'est pas dans le boîtier, et que l'alimentation est discutable en termes de contact électrique avec 220V.
Allumez, démarrez, connectez-vous avec le login pi par défaut et le mot de passe framboise. Le processus de configuration dans la vidéo commence à 00:18:43 .
Tout d'abord, assurez-vous de travailler sur la mise à jour sudo apt et la mise à niveau sudo apt. Au moment de l'enregistrement de la vidéo, le référentiel proposait de mettre à jour 30 packages, bien que j'aie enregistré l'image de la carte mémoire juste avant la configuration initiale. Apparemment, il n'est pas collecté chaque fois que le référentiel est mis à jour.
De plus, si vous le souhaitez, nous résolvons le problème des carrés dans la console au lieu des lettres russes. Nous appelons sudo dpkg-reconfigure console-setup et parcourons les menus. Nous définissons (ou laissons) les paramètres suivants:
- Encodage à utiliser sur la console - UTF-8
- Jeu de caractères à prendre en charge - Devinez le jeu de caractères optimal
- Taille de la police - 8 x 16
Première fois que nous redémarrons. Nous faisons cela de manière régulière, via sudo reboot. Connectez-vous à nouveau, exécutez sudo raspi-config et procédez au réglage initial des paramètres. Nous y effectuons les tâches suivantes:
- ( : System options — Password )
- SSH (Interface options — SSH)
- (Localisation options — Locale; en_GB.UTF-8 UTF-8, en_US.UTF-8 UTF-8 ru_RU.UTF-8 UTF-8, )
- (Localisation options — Timezone; , )
- (Advanced options — Expand filesystem).
Après cela, sélectionnez Terminer. Le programme proposera de redémarrer, ce que nous faisons.
Ensuite, nous nous reconnectons (cette fois avec un nouveau mot de passe), allons dans sudo raspi-config, sélectionnez les options de localisation puis Clavier. Le programme de configuration du clavier écrira déjà en russe.
Dans le modèle de clavier, en standard, nous sélectionnons "PC ordinaire avec 105 touches (Int.)
Dans la mise en page, sélectionnez d'abord" Autre ", puis" Russe ", puis l'option (juste" Russe "ou plus adapté au clavier existant).
Ensuite, sélectionnez la méthode de commutation des dispositions et d'autres touches différentes, si vous le souhaitez. Tout basculera assez rapidement. Il reste dans le menu principal de raspi-config pour aller à Terminer. Nous ne reviendrons plus sur cet utilitaire.
Installation et configuration de logiciels supplémentaires utilisés par le projet
Faites sudo apt pour installer cablagepi samba sane. J'ai ajouté mc à cette liste (et à la conférence) et montre comment travailler avec lui, mais c'est une question de préférence purement personnelle, je n'impose à personne.
Ensuite (de préférence dans la plupart des cas) définissez l'adresse IP permanente sur le malinka. Je pense qu'il est préférable de le faire sur un routeur, mais si ce n'est pas possible, vous pouvez définir les paramètres réseau statiques en éditant /etc/dhcpcd.conf après le commentaire Exemple de configuration IP statique. Le package dhcpcd est fourni avec le système d'exploitation Raspberry Pi, vous n'avez pas besoin de l'installer.
La tâche suivante consiste à créer un répertoire pour stocker les fichiers d'analyse. J'ai choisi ce cas et créé le répertoire / var / scanned. Ce répertoire doit avoir de telles autorisations pour que Samba puisse fonctionner avec lui.
Maintenant, bien sûr, nous configurons la samba. Nous allons dans /etc/samba/smb.conf et enregistrons les paramètres globaux et la section avec les données de la nouvelle ressource réseau et le chemin vers le répertoire que nous y avons créé. La vidéo le montre à 00:41:51 . Mais, bien sûr, les spécificités du réseau peuvent donner certaines différences par rapport aux paramètres qui y sont donnés.
Après la configuration, il est fortement recommandé de redémarrer la framboise et de vérifier le lecteur réseau depuis l'ordinateur. À partir de là, dans la plupart des cas, vous aurez besoin d'un accès complet aux fichiers du répertoire.
Avant de passer à la couture et à la programmation, il nous reste deux tâches: décider de la pièce en fer et d'abord déterminer les paramètres du programme de numérisation.
Commençons par la partie en fer. Pour ce faire, exécutez gpio readall. Malinka affichera la numérotation des broches sur le connecteur GPIO dans les colonnes Physiques et leur objectif dans les colonnes Nom. Pour le circuit, nous avons besoin de trois ports GPIO et d'un fil commun (dans la colonne Nom, il s'appelle 0v; il y en a beaucoup sur le connecteur, mais nous n'avons pas besoin de tant, sélectionnez simplement l'un d'entre eux). Nous notons leurs noms et numéros sur le connecteur. Pour ma part, j'ai choisi GPIO.1 à la broche 12, GPIO.2 à la broche 13 et GPIO.3 à la broche 15. Je vais connecter le fil commun à la broche 9.
Décidons maintenant du scanner, que nous avons déjà connecté en USB. Faire sudo sane-find-scanner. Si le scanner n'est pas visible avec cet utilitaire, il peut y avoir un problème avec le scanner, la framboise, le câble ou l'alimentation; cela doit être traité séparément. Maintenant, faites sudo scanimage –help | moins et voir les options autorisées pour notre appareil. Pour moi, j'écrirai les options l, t, x, y, la résolution et le format. Ces options iront à la ligne de commande du programme de numérisation.
Ceci termine la configuration initiale de la framboise. Avant d'assembler le circuit, la framboise doit être éteinte. Ceci, si quelqu'un ne s'en souvient pas, est fait avec la commande sudo shutdown –h now. Après un certain temps, l'image à l'écran disparaîtra et toutes les LED de la framboise s'éteindront, à l'exception de la LED d'alimentation. Cela signifie que le système a fini de fonctionner, vous pouvez éteindre l'alimentation et commencer l'artisanat.
Le GPIO dans les framboises est uniquement numérique (c'est-à-dire à deux niveaux 0 et 1) et peut fonctionner en trois modes: juste une entrée (le mode est appelé), une entrée avec une résistance de tirage avec une résistance de 50-65 kilo-ohms (appelée) et une sortie (appelée). Nous utiliserons les deux derniers modes.
Comme je l'ai écrit plus tôt, nous devrons connecter deux boutons via GPIO (appelons-les "Start" et "Stop") et une LED. Naturellement, pour limiter le courant, vous devrez connecter une résistance de limitation en série avec elle; J'ai choisi une résistance de sortie avec une valeur nominale de 2,2 kilohms et une puissance de dissipation de 0,25 W; cela suffit généralement. Le schéma de connexion est le suivant:
Basé sur l'utilisation du mode haut, rappelez-vous que lorsque le bouton est enfoncé, la valeur 0 sera lue à partir de l'entrée GPIO, et lorsqu'elle est relâchée - 1. Les deux boutons sont normalement ouverts, pas de fixation.
Je ne m'attarderai pas ici sur les détails de l'exécution, d'autant plus que j'avais précédemment montré une photo du boîtier fini, où tout était déjà. Pour des raisons de sécurité, je recommanderais uniquement de choisir des boutons avec toutes les parties extérieures en plastique afin de ne pas coller avec les parties conductrices exposées. Je me suis connecté aux broches GPIO avec des connecteurs BLS à une seule broche, similaires à ceux utilisés dans les boîtiers d'ordinateurs; pour cette démo, j'ai simplement pris un tas de fils de projets Arduino avec des connecteurs appropriés, en ai sélectionné quatre multicolores, j'ai coupé les extrémités inutiles, les ai nettoyés et soudés aux détails. Une autre option consiste à utiliser un connecteur de câble plat à double rangée à 40 broches, ou même un morceau d'un ancien câble IDE provenant de disques durs ou de lecteurs de CD, si quelqu'un a autre chose. Cette option, d'ailleurs, convient également aux caisses de hauteur standard;ils ont un emplacement pour une telle boucle pour une sortie vers l'extérieur.
Eh bien, et aussi, je me souviens, j'ai souffert du fait que sur les cartes framboise (en tout cas, 2 modèle B et 3 modèle B) la numérotation des broches du connecteur GPIO n'est pas indiquée. Je vais le réparer maintenant; ces deux modèles ne présentent aucune différence à cet égard.
Implémentation de la partie logicielle
La partie logicielle est implémentée (tadam!) Sous la forme de deux scripts bash - une configuration et un script fonctionnel lui-même. Une explication détaillée de l'organigramme et de la mise en œuvre est dans la vidéo à 01:08:30 . Je ne pense pas qu’il soit logique d’entrer dans les détails ici; les codes sources des scripts peuvent être téléchargés ici et étudiés à votre guise.
Le lancement du script de travail principal est écrit au démarrage dans /etc/rc.local. La seule chose - je devais d'abord enregistrer le changement du répertoire de travail dans le répertoire avec des scripts. Mais il n'y a rien de terrible ici, cela n'empêche pas de travailler plus loin. Et, bien sûr, n'oubliez pas d'ajouter l'icône & après la commande de lancement, sinon il y aura des problèmes avec le démarrage du système.
Eh bien, et il ne restait en fait que de montrer en direct le processus de numérisation proprement dit, ainsi que les connexions ssh et l'ajustement des paramètres - comme c'était le cas pour moi. Vous pouvez le regarder dans la vidéo à 01:41:04 .
D'une manière ou d'une autre, c'est arrivé. Dans la version de combat, des différences, seule l'analyse va vers un NAS séparé, donc les scripts sont légèrement modifiés. Et donc, je pense, les scans peuvent même être envoyés au messager avec un bot quelque part, il n'y aurait qu'un désir de comprendre l'API correspondante et de faire quelque chose comme ça sur curl. Il y a plein d'options. Bonne chance pour la mise en œuvre. :)