Table des matières:

Indicateur d'événement RPi-Zero IoT / Lampe de couleur : 6 étapes (avec photos)
Indicateur d'événement RPi-Zero IoT / Lampe de couleur : 6 étapes (avec photos)

Vidéo: Indicateur d'événement RPi-Zero IoT / Lampe de couleur : 6 étapes (avec photos)

Vidéo: Indicateur d'événement RPi-Zero IoT / Lampe de couleur : 6 étapes (avec photos)
Vidéo: Le Plus Grand Point Noir Du Monde ?😱 2024, Juillet
Anonim
Indicateur d'événement RPi-Zero IoT / Lampe de couleur
Indicateur d'événement RPi-Zero IoT / Lampe de couleur
Indicateur d'événement RPi-Zero IoT / Lampe de couleur
Indicateur d'événement RPi-Zero IoT / Lampe de couleur
Indicateur d'événement RPi-Zero IoT / Lampe de couleur
Indicateur d'événement RPi-Zero IoT / Lampe de couleur

Aucun micro-contrôleur supplémentaire et aucun module complémentaire HAT requis. Le RPi-Zero fait tout. Mieux encore, utilisez un RPi-Zero W !

Exemple d'utilisation: indicateur d'état de service Web (par exemple, suivi DowJonesIndex), indicateur d'état d'événement politique ou sportif, lumière d'ambiance, suivre un capteur, vous l'appelez. Regardez la vidéo à l'étape 6.

Le Raspberry-Pi n'a qu'une seule ligne PWM prise en charge matériellement. Ce projet nécessite 3 lignes PWM, j'ai donc utilisé une bibliothèque PWM 'c' pilotée par logiciel (https://wiringpi.com/reference/software-pwm-library/), qui devrait déjà être installée.

J'ai divisé le traitement en 2 processus. Un, piloté par interruption, commutant les lignes de contrôle sur la LED selon les besoins, obtenant ses ordres de marche à partir de son flux « stdin ». L'autre est un serveur nodeJS piloté par événement utilisant socket IO. Cela permet d'éviter des choses comme le scintillement de la lumière tout en assurant la réactivité. La combinaison utilise généralement moins de 5% du CPU. Pendant les périodes de mises à jour continues des couleurs (via des curseurs et/ou de nombreux clients), il peut facilement utiliser plus de 50 % (en particulier lorsque vous utilisez également le navigateur dans l'interface graphique Pi-Zero). Notez que lorsqu'un changement intervient, des notifications de mise à jour sont envoyées à tous les clients socket ouverts.

Étape 1: ce dont vous aurez besoin

Ce dont vous aurez besoin
Ce dont vous aurez besoin
Ce dont vous aurez besoin
Ce dont vous aurez besoin
  • Carte micro-SD Pi-Zero, 8 Go recommandée. Avec Raspbian-Linux ou NOOBS
  • Led RGB (j'ai utilisé celle-ci:
  • 3 résistances (valeur basée sur le courant et/ou la luminosité souhaités, 1/8 watt)
  • un dongle WiFi, USB (par exemple https://www.ebay.com/itm/252018085448) ou encore mieux utiliser un Raspberry Pi Z-W (avec WiFi intégré)
  • un étui (par exemple un petit: https://www.ebay.com/itm/131583579374 avec plus d'espace:
  • un diffuseur (voir exemples en image)
  • Câbles et adaptateurs au besoin.

En option, selon la manière dont vous souhaitez connecter les composants

  • en-tête (https://www.ebay.com/itm/14186077616)
  • cavaliers (https://www.ebay.com/itm/262235387520)
  • adaptateur micro-USB à angle droit (Blue USB 2.0 OTG R)
  • mini hub USB, utilisé uniquement pendant la phase de configuration

Étape 2: configuration de Pi-Zero et préparation au développement

Suivez cette configuration initiale pour votre PiZero, pour le préparer au développement…https://www.raspberrypi.org/help/noobs-setup/

Une fois que vous avez une carte microSD avec la configuration NOOBS, procédez comme suit:

Branchez la carte microSD. Attachez un concentrateur USB à faible consommation avec un dongle Wifi, un clavier et une souris (vous pouvez utiliser une souris et/ou un clavier sans fil, dans tous les cas, cela peut nécessiter une alimentation externe au concentrateur). J'ai utilisé des adaptateurs et un hub que j'avais déjà.

Connectez maintenant un moniteur et un adaptateur secteur microUSB et il démarrera. Continuez et terminez les instructions sur la configuration de Raspbian, Debian Linux, comme indiqué dans le lien noobs-setup ci-dessus.

De plus, j'avais une résolution trop faible. J'ai donc ajouté ces lignes à /boot/config.txt

disable_overscan=1

hdmi_group=2 hdmi_mode=58

Le hdmi_mode=58 fonctionne pour mon moniteur, le vôtre peut avoir besoin d'autre chose.

se référer à: make-raspberry-pi-use-full-resolution-monitor et

raspberrypi.org/documentation/configuration/config-txt.md

Après le démarrage, le Pi-Zero entre dans l'interface graphique.

Pour utiliser toute la taille de ma carte microSD, j'ai utilisé la sélection raspi-config #1 'Expand Filesystem'. Depuis la ligne de commande, dans une fenêtre de terminal, entrez 'sudo raspi-config' Reportez-vous à: documentation/configuration/raspi -config.md

J'ai également modifié ces paramètres sous #5 'Options d'internationalisation'

  • Paramètres régionaux: en_US. UTF-8 UTF-8
  • Fuseau horaire: Amérique … Los_Angeles
  • Disposition du clavier: PC générique à 105 touches (international) … anglais (États-Unis)

Pour moi, le clavier standard de Grande-Bretagne (pour lequel Raspbian est préréglé) faisait de la plupart de mes éditions une véritable corvée.

Modifiez ces paramètres selon vos besoins, de manière appropriée pour vous. Notez que vous devez utiliser les touches fléchées et la touche de tabulation pour naviguer dans 'raspi-config'; et après une sélection, il peut être très lent à répondre.

Je n'ai trouvé aucun problème pour me connecter à Internet avec un dongle WiFi-USB (j'en ai utilisé 2 différents). Je devais simplement entrer mon mot de passe clé d'accès WiFi à l'aide d'un menu déroulant en haut à droite de l'interface graphique. Une fois que j'ai fait cela, il se connecte automatiquement après tout redémarrage/mise sous tension.

Maintenant, j'étais prêt pour le développement général.

Pour arriver à ce point, vous pouvez emprunter de nombreux chemins. Jusqu'à présent, je n'ai pas donné beaucoup de détails ici, mais il existe de nombreuses méthodes et configurations décrites plus en détail sur le Web. Y compris un pour une configuration sans tête où vous utiliseriez une fenêtre de terminal ssh distant sur votre ordinateur personnel pour effectuer les étapes de développement décrites dans cette instruction.

Étape 3: Environnement et outils de développement

Environnement et outils de développement
Environnement et outils de développement
Environnement et outils de développement
Environnement et outils de développement

Pour la configuration du système et le logiciel que j'ai développé pour le projet, j'ai effectué la R&D sur un Raspberry Pi-2; car il dispose d'un processeur quad-core rendant sa navigation et son développement de code, avec plusieurs fenêtres, beaucoup plus rapides. Vous pouvez bien entendu utiliser n'importe quel modèle Raspberry-Pi pour réaliser ce projet.

Pour configurer Node.js (prise en charge de JavaScript côté serveur d'E/S pilotée par les événements), j'ai fait ce qui suit…

sudo apt-get mise à jour

sudo apt-get install nodejs npm

Ajout de ces packages nodeJS (npm est Nodejs Package Manager)

npm installer express

npm installer socket.io

Références:

www.npmjs.com/package/express Framework web rapide et minimaliste

www.npmjs.com/package/socket.io Socket. IO permet une communication basée sur des événements bidirectionnels en temps réel

Étape 4: Le matériel

Le matériel
Le matériel
Le matériel
Le matériel
Le matériel
Le matériel
Le matériel
Le matériel

Les valeurs de résistance utilisées sont toutes différentes, car la chute de tension et l'efficacité diffèrent pour les trois segments de couleurs de LED. Les niveaux de sortie GPIO High étaient tous d'environ 3,2 volts. Chaque segment de LED a été testé pour s'assurer qu'il consomme moins de 20ma maximum et environ 40ma au total (<50ma maximum au total autorisé), ce que le PiZero peut facilement gérer. J'ai obtenu autant de luminosité de sortie que possible, pilotant directement la LED; ce qui est largement suffisant pour mes besoins. Pour conduire des courants plus élevés, pour une sortie beaucoup plus lumineuse, des transistors de commande intermédiaires pourraient être utilisés avec une LED d'anode commune avec son anode connectée à la ligne 5v. PS: Comme mes différents niveaux de blanc sortent un peu bleuâtre, 27 au lieu de 24 Ohm aurait été un meilleur choix pour moi.

Remarquez que j'ai utilisé un en-tête avec des broches mâles et connecté aux pieds LED avec des cavaliers F-F. Cela a permis de réduire la hauteur totale. J'ai soudé les résistances au milieu des cavaliers. L'utilisation d'aucune carte de circuit imprimé ou de carte sans soudure, ainsi que l'utilisation d'un adaptateur micro-USB vers USB à angle droit pour le dongle WiFi, ont rendu l'assemblage final assez compact.

Pour un diffuseur, je vous conseille une balle de ping-pong (il est facile de percer un trou juste assez grand pour y insérer votre LED 5-8-10 mm). Ou coupez le haut d'une ampoule LED (qui utilise un diffuseur en plastique). Pour cela, tracez une ligne, avec une pointe fine, à l'endroit où vous voulez couper, et utilisez un outil de type Dremel avec un accessoire de coupe fin. Si vous le souhaitez, vous pouvez utiliser un joli petit bocal en verre taillé ou un verre à boire. Une fois que vous avez choisi un diffuseur, collez-le sur le dessus du boîtier.

Pour les démonstrations, j'aime utiliser une petite banque d'alimentation Li placée à l'intérieur du boîtier. Cet appareil semble plus impressionnant totalement sans fil. Bien entendu, il aura un temps de fonctionnement limité dans cette configuration. Pour un fonctionnement normal, j'utilise simplement un adaptateur mural micro-USB.

Étape 5: Logiciel de projet

Logiciel de projet
Logiciel de projet

J'ai utilisé deux programmes, un processus Node.js parlant à un processus enfant via son flux de données stdin. C'est ainsi qu'ils peuvent chacun faire ce qu'ils font le mieux et fonctionner comme des processus indépendants à leur propre rythme.

Voici ce que j'ai fait: Mais vous n'êtes pas obligé de le faire, car j'ai fourni un fichier tar-gzip qui contient l'arborescence de fichiers résultante.

Configuration côté serveur de NodeJS:

disque ~

mkdir node_rgb cd node_rgb mkdir public

mettre 'index.html' et 'style.css' dans le répertoire '~/node_rgb/public' mettre 'rgbDriver.c' et 'rgb_main.js' dans le répertoire '~/node_rgb'

Compilez/construisez le processus c 'rgbDriver':

cd ~/node_rgb

cc -o rgbDriver rgbDriver.c -lwiringPi -lpthread

Téléchargement et extension de l'équivalence

Pour télécharger node_rgb.tgz (ci-dessous) sur votre Pi-Zero dans votre répertoire personnel (~pi), vous pouvez effectuer l'une des 3 opérations suivantes:

  1. Téléchargez depuis le navigateur dans l'interface graphique de votre Pi-ZeroDéplacez le fichier vers ~pi/
  2. Dans une fenêtre de terminal connectée à vous Pi-Zero:cd ~piwget

    mv FZBF9BDIL6VBHKF.tgz rgb_node.tgz

  3. Téléchargez à partir d'un navigateur sur votre ordinateur de bureau. Utilisez WinSCP pour le copier dans le répertoire ~pi sur le Pi-Zero

Après avoir effectué #1 2 ou 3 ci-dessus…

disque ~

tar -xzvf node_rgb.tgz tree node_rgb … node_rgb public │ ├── Dow_Jones_Index.html ├── index.html └── style.css rgbDriver rgbDriver.c ├── rgb_main. js ├── start_rgb ├── kill_rgb └── track_dji

L'exécutable résultant (ci-dessus) ' rgbDriver ' peut être utilisé indépendamment du processus d'interface Node.js.

Pour vérifier que ce pilote et le matériel fonctionnent, envoyez des ensembles de trois valeurs (de 0 à 255), séparées par un espace, au pilote. J'aime 'écho 255 0 0 |./rgbDriver' pour le rouge ou 'echo 0 255 0 |./rgbDriver' pour le vert. Notez que le «./ » indique au système d'exploitation de trouver notre programme « rgbDriver » dans le répertoire courant. Lorsque vous émettez un ^c (cntl-c) pour arrêter le pilote, la led peut ou non rester allumée. Alternativement, vous pouvez alimenter interactivement ses valeurs. Essayez de taper, à partir de la ligne de commande, ces lignes l'une après l'autre et observez la LED.

./rgbDriver

0 255 0 100 0 100 255 255 0 …etc… ^c

Assurez-vous que 2 de ces processus ne s'exécutent pas en parallèle.

Pour lancer la suite logicielle complète, y compris le serveur Node.js, utilisez cette commande:

nœud sudo rgb_main.js

Ensuite, utilisez cntl-c lorsque vous souhaitez arrêter le serveur Node.js. Lancez-le avec

nœud sudo rgb_main.js&

pour qu'il s'exécute en arrière-plan, mais vous devrez ensuite utiliser une commande 'sudo kill -9 pid' pour l'arrêter. Si cette commande vous semble étrangère, examinez le résultat de ces commandes: 'man kill' & 'man sudo'.

Utilisez un navigateur, sur votre ordinateur de bureau, tablette ou téléphone, qui est connecté à votre réseau local. Allez sur https://raspberrypi:8080/ ou si cela ne fonctionne pas, utilisez l'adresse IP de l'appareil (obtenue à partir du cmd 'ifconfig') quelque chose comme 192.168.1.15 plus la spécification du port: 8080 ou si vous utilisez le Pi-Zero's GUI: localhost:8080 fonctionnera.

Actionnez les curseurs RVB, sur la page qui s'affiche, et regardez la lampe à LED RVB suivre.

Autres commandes utiles Notez que si vous vous retrouvez avec plus d'un 'rgbDriver' en cours d'exécution en même temps, vous risquez d'avoir un comportement imprévisible. Si vous essayez d'exécuter une deuxième copie de rgb_main.js, une erreur se produira.

Cette commande listera tous les processus associés:

ps aux |grep rgb

Cette commande tuera tous les processus nodeJS, ainsi que les processus enfants 'rgbDriver':

sudo ps aux | nœud grep.*rgb | awk '{print "sudo kill -9 " $2}'' | sh

Fonctionnement autonome

Pour que le Pi-Zero démarre l'application serveur Node.js au démarrage… en utilisant votre éditeur préféré (par exemple, nano ~/.bash_profile), tapez les lignes suivantes et enregistrez dans ~/.bash_profile

cd node_rgb

nœud sudo rgb_main.js &

Pour éviter de recevoir des messages d'erreur indésirables lors de l'ouverture d'une fenêtre de terminal, utilisez un codage conditionnel comme le script shell dans le fichier 'start_rgb'

Lorsque le Pi-Zero est intégré, sans clavier, souris ou moniteur; l'interface utilisateur graphique prendra un temps CPU minimal, car il n'y aura aucune interaction avec l'utilisateur. Je ne désactive pas le démarrage automatique de l'interface graphique, car le Pi-Zero dispose de plus de ressources que nécessaire, dans ce cas; et j'aime pouvoir connecter quelques câbles et l'utiliser, à tout moment dans le futur. Cependant, cela n'est pas nécessaire car vous pouvez utiliser un terminal SSH distant (par exemple, PuTTY) pour effectuer toute maintenance nécessaire.

L'utiliser comme moniteur d'événements

J'ai créé une page Web pour suivre l'évolution quotidienne de l'indice Dow Jones. Sa source peut être utilisée comme ligne directrice pour votre propre page qui utilise des données Web et pilote votre indicateur Pi-Zero en conséquence. Cette page obtient ses données (json) à partir d'un service Web Google. Il existe de nombreuses formes de services Web, vous devrez donc rechercher celui que vous souhaitez utiliser pour déterminer le code JavaScript pour y accéder.

Si vous souhaitez utiliser votre appareil, comme moi, en tant qu'indicateur de changement d'indice Dow dédié et autonome, ajoutez ces lignes à la fin du fichier ~/.bash_profile, ou comme vous le souhaitez, SSH et lancez la deuxième ligne de commande.. Si vous souhaitez par la suite utiliser la télécommande « kill -9 », le processus de navigateur épiphanie résultant.

dormir 20

epiphany-browser --display=:0.0 localhost:8080/Dow_Jones_Index.html &

L'indicateur s'allumera en gris clair pour une valeur de 0. Il devient de plus en plus vert avec des valeurs plus élevées. C'est le vert pur le plus brillant à environ 250. Des valeurs plus élevées provoquent d'abord un flash peu profond, jusqu'à un flash le plus profond à environ 500. Pour une valeur négative (chute quotidienne du Dow), c'est similaire, mais en rouge.

MISE À JOUR Mai 2018

J'ai créé une nouvelle page Web (SolarStorm_devCon.html, jointe en tant que fichier.txt, car le fichier.html n'est pas téléchargé) qui rassemble des informations sur les tempêtes géomagnétiques (qui pourraient prédire un CME, EMP dévastateur) et les utilise pour présenter une couleur échelle reflétant une sorte d'index Geo-Storm 'DevCon'. indiquant le potentiel d'une catastrophe due à une impulsion électromagnétique (EMP) résultant de la météo spatiale, vraisemblablement des éruptions solaires ou d'une éjection de masse coronale (CME). Utilisez-le comme vous auriez utilisé "Dow_Jones_Index.html".

Étape 6: Contrôle de page Web à distance

Image
Image

À ce stade, vous pouvez contrôler votre lampe de couleur IOT de n'importe où sur votre réseau local. Comment le rendre visible sur l'Internet public ne fait pas partie de cette instructable. Si vous configurez une adresse IP publique pour votre appareil, alors vous devrez utilisez cette IP dans la commande open socket dans le JavaScript de vos pages (par exemple ~/node_rgb/public/index.html)

Je prévois d'utiliser mon appareil Pi-Zero IOT comme indicateur de couleur en temps réel pour le changement du jour dans l'indice Dow Jones. J'ai créé une page qui fait cela, qui récupère les données json de google.com/finance. J'ai également créé quelques pages Web pour démontrer le large éventail d'utilisations de ce petit appareil IOT. Plutôt que de mettre mon PiZero sur l'Internet public, j'ai hébergé les pages sur mon serveur Web public existant (actuellement @ 71.84.135.81 aka: https://raspi.ddns01.com/ lorsque mon serveur de noms de domaine dynamique gratuit fonctionne), qui fonctionne sur une version originale B Raspberry-Pi.

Dans le code sur mes pages distantes, j'ai ouvert des connexions de socket à 192.168.1.41: 8080. J'avais fixé l'adresse IP de mon Pi-Zero à 192.168.1.41. Pour faire de même, suivez les instructions sur la configuration de raspberry-pi-with-wifi-and-a-static-ip sous le titre: Static IP Address. Donc, si vous configurez votre PiZero pour qu'il soit à 192.168.1.41 sur votre réseau local, ces pages, ouvertes à partir de mon site Web, communiqueront avec votre appareil, car la connexion se fait du côté client.

Voici les pages que j'ai utilisées pour tester et faire fonctionner mon dispositif d'éclairage Pi-Zero IOT. Si vous affichez ces pages (https://71.84.135.81/iot/rgbLamp/ aka https://raspi.ddns01.com/iot/rgbLamp/ ou l'une des pages encadrées sur cette page), le JavaScript côté client pilotez votre lumière IOT créée (étant donné qu'elle s'exécute à cette URL "192.168.1.41:8080") Si vous le souhaitez, vous pouvez copier la source de l'une de ces pages et la modifier à votre guise.

Avec la première page, vous pouvez régler votre appareil sur n'importe quelle couleur. La lampe LED et la couleur que vous voyez sur la page Web suivront assez bien. Les valeurs de résistance utilisées peuvent être modifiées (ainsi que le moniteur) pour les faire correspondre davantage. J'ai passé peu ou pas de temps à m'assurer qu'ils correspondent. Cette page mettra à jour sa couleur chaque fois que quelqu'un d'autre changera la couleur et le serveur enverra le message d'information mis à jour.

Une page est un simple feu de circulation contrôlé par un bouton.

Il existe une page conçue pour suivre une compétition sportive (par exemple, football, basket-ball, baseball), une élection, ou même adaptée pour une collecte de fonds ou un indicateur de style de niveau d'alerte DEFCON. Les scores (ou votes électoraux engagés) pourraient être automatiquement obtenus à partir d'un service Web ou supprimés d'une autre page Web. Je n'ai pas de flux automatique sur ma page Contest_demo. Quelqu'un avec le bon savoir-faire pourrait ajouter un pilote d'alimentation pour faire fonctionner des projecteurs à LED haute puissance et baigner une pièce (ou un bar sportif) avec la couleur d'une équipe lorsqu'elle est devant. Malheureusement, je suis trop tard avec cette instructable pour les soirées super-bowl de cette année, mais à temps pour les élections de 2016.

Ensuite, il y a la page similaire à celle que je vais utiliser pour transformer mon appareil en indicateur de suivi Dow Jones. Le curseur et les boutons se trouvent uniquement sur la page de démonstration DJI à des fins de démonstration. Dans la source de cette page, il y a un code que j'ai développé pour recolorer une image inspirée d'un écran vert; avec suffisamment de commentaires pour que vous puissiez également le trouver utile.

Seule la première de ces 4 pages (avec la page index.html basée sur Pi-Zero) écoute les messages de mise à jour du serveur et s'actualise en conséquence. Tout le reste n'est envoyé qu'au serveur.

Conseillé: