Node.JS est une plateforme serveur qui utilise JavaScript. Originalement développée pour le navigateur Google Chrome, il est très performant, ce qui rend l’utilisation d’un serveur web Raspberry Pi Node.JS intéressante. En plus des avantages des applications asynchrones, Node.JS offre une méthode très simple mais puissante pour installer et utiliser différents plugins ou bibliothèques, en utilisant le gestionnaire de pack interne « npm ».
Ce tutoriel vous montre comment mettre en place et configurer un serveur Raspberry Pi NodeJS. De plus, j’ai écrit un petit programme pour Node, qui peut contrôler les GPIOs du Raspberry Pi.
Un serveur NodeJS est une condition préalable pour de nombreuses applications différentes, telles que HomeBridge. De nombreux autres projets, pour lesquels un serveur est nécessaire, peuvent également être réalisés avec un Raspberry Pi et NodeJS.
Matériel utilisé
À cause des meilleures performances par rapport aux versions précédentes et surtout à cause de l’architecture ARMv8, je recommande un Raspberry Pi 3. De plus, votre routeur doit supporter le port de transfert, si vous voulez appeler les applications en dehors de votre réseau domestique. Je recommande pour cela un FRITZ!Box ou similaire.
Afin de pouvoir reproduire le petit exemple à la fin, le matériel suivant est également nécessaire :
- Quelques LED
- 330 Ω Résistances
- Breadboard
- Câble de raccordement femelle-Jumper
De plus, je recommande d’utiliser l’accès SSH, ainsi que de façon optimale d’un service FTP, pour simplement transférer des fichiers vers le Raspberry Pi.
Installation de Node.JS sur le Raspberry Pi
Avant d’installer Node, nous mettons à jour les packs et les sources des packs pour avoir tout ce dont vous avez besoin :
sudo apt-get update sudo apt-get full-upgrade
Le processus peut prendre un certain temps. Puisque Node.JS n’est pas dans les sources prédéfinies du pack, nous devons l’ajouter en premier. La dernière version de LTS peut être consultée sur le site web de Node.JS et adapté en conséquence.
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
Maintenant nous pouvons facilement installer Node via le gestionnaire de pack interne, ce qui peut prendre un peu de temps :
sudo apt-get install -y nodejs
Premier Test
Si l’installation s’est déroulée sans problème, nous pouvons simplement écrire ce qui suit dans la console pour voir si tout a fonctionné :
node --version
La dernière version devrait maintenant être affichée.
Maintenant, commençons avec un petit Commençons maintenant par un petit programme Hello-World!. Nous sommes en train de créer un nouveau fichier.
sudo nano hello-world.js
Ici nous ajoutons le contenu suivant :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// Load the http module to create an http server. var http = require('http'); // Configure our HTTP server to respond with Hello World to all requests. var server = http.createServer(function (request, response) { response.writeHead(200, {"Content-Type": "text/plain"}); response.end("Hello World\n"); }); // Listen on port 8000, IP defaults to 127.0.0.1 server.listen(8000); // Put a friendly message on the terminal console.log("Server running at http://127.0.0.1:8000/"); |
Nous enregistrons et fermons ensuite l’éditeur (CTRL + O, CTRL + X). Vous pouvez maintenant démarrer le serveur en entrant simplement ce qui suit dans le terminal :
node hello-world.js
Vous pouvez maintenant visualiser la page dans le navigateur. Entrez soit l’IP de votre Pi dans le réseau en incluant le port (ex : 192.168.1.68:8000) ou (si votre routeur le supporte) simplement le nom de l’hôte en incluant le port. Pour moi, c’est http://raspberrypi:8000/
PS : Nous utilisons le port 8000 dans cet exemple. Le port par défaut pour les serveurs web est 80. Cependant, Node.js requiert privilèges de démarrage pour les ports inférieurs à 1000.
Si vous souhaitez accéder en permanence au serveur depuis l’extérieur de votre réseau domestique, il est judicieux d’installer un serveur DNS. Bien entendu, les ports sélectionnés doivent également être sélectionnés et activés dans votre routeur via une redirection de port pour l’adresse IP interne de votre Raspberry Pi.
NPM – Gestionnaire de package NodeJS
Avec l’aide du NPM (Gestionnaire de package Node.js), des bibliothèques supplémentaires peuvent être facilement installées et utilisées dans un projet de nœud. Typiquement, un projet créé a un fichier nommé « package.json » dans le répertoire racine. Dans ce fichier, les « dépendances » sont utilisées pour spécifier les packages utilisés (minimum requis). Si vous utilisez / téléchargez un autre projet, les paquetages requis doivent d’abord être installés. Pour ce faire, allez dans le répertoire où se trouve le package.json et entrez :
npm install
Tous les paquets nécessaires sont installés. Cependant, il n’est pas absolument nécessaire que vous entriez vos paquets utilisés à la main. Si vous voulez utiliser un nouveau paquet (dans notre cas, c’est rpio) vous pouvez spécifier le paramètre --save
et le package sera automatiquement ajouté au fichier package.json :
npm install rpio --save
Pour plus d’instructions et d’explications, vous pouvez consulter la documentation NPM.
Contrôle des GPIOs Raspberry Pi via l’interface web
Si votre fichier d’exemple est toujours en cours d’exécution, vous pouvez le terminer en appuyant sur CTRL + C.
J’ai écrit une petite application qui vous permet de contrôler vos GPIOs via l’interface web (navigateur de PC de bureau, smartphone, tablette). Comme il ne s’agit que d’un petit exemple, la sortie ne peut être contrôlée qu’en sortie. Cependant, il est également facile de définir les GPIOs en entrée et de les lire. Comme base, j’ai pris le package NPM rpio.
Pour un simple test, vous pouvez cloner le package GitHub :
git clone https://github.com/tutRPi/Raspberry-Pi-Simple-Web-GPIO-GUI cd Raspberry-Pi-Simple-Web-GPIO-GUI
Avant de démarrer le serveur, les autres packages doivent être installés :
npm install
Le serveur Raspberry Pi Node.JS peut alors être démarré. Comme nous utilisons les GPIOs, nous devons le démarrer avec sudo. J’ai donc décidé de faire tourner le serveur sur le port 80, car nous pouvons facilement y accéder via le nom d’hôte ou l’IP interne du Pi sans spécifier le port. La condition préalable est que rien d’autre ne tourne sur ce port (comme Apache2). Nous commençons donc maintenant :
sudo npm start
De retour dans le navigateur Web, vous pouvez voir l’interface utilisateur pour le contrôle des GPIO (aucun port requis). Pour cela, il faut dire que les GPIOs sont initialement affichés comme « OFF », même si une autre application a préalablement connecté l’une des broches. Ceci est dû au fait que la bibliothèque ne peut malheureusement pas lire l’état de sortie des GPIOs. Bien que vous puissiez démarrer l’application web tous les GPIOs au niveau bas, mais j’ai décidé de ne pas le faire. Si cela vous dérange, vous êtes libre de l’ajuster.
De plus, je l’ai enregistré pour montrer comment le contrôle se présenterait à travers l’interface web. Si vous voulez voir la structure du circuit d’échantillonnage, vous pouvez le faire ici. Mais en principe, c’est assez simple, puisqu’une LED avec une résistance en série a été simplement attachée aux GPIO individuels (contrôlables).
Démarrage automatique du serveur Raspberry Pi Node.js
Enfin, nous voulons démarrer le serveur automatiquement après le redémarrage du Pi Framboise. Sinon, le serveur se terminerait à l’arrêt et il faudrait le réactiver à la main.
Avant que nous puissions créer l’entrée pour le démarrage automatique depuis notre application serveur, nous devons trouver le chemin où se trouve Node (par défaut, ceci est /usr/bin/node
).
pi@raspberrypi:~ $ which node /usr/bin/node
Maintenant nous avons besoin de compléter le chemin où se trouve notre fichier javascript (app.js
). En utilisant ls
, nous pouvons afficher les fichiers qui sont présents dans le dossier et avec pwd
le chemin.
Ces deux valeurs sont copiées pour créer maintenant une nouvelle entrée :
sudo crontab -e
À la fin de ce fichier, des entrées peuvent être ajoutées, qui sont exécutées par exemple après un redémarrage ou à un certain moment. Pour que notre application démarre automatiquement après le redémarrage, nous ajoutons la ligne suivante à la fin du fichier (si nécessaire, ajustez les chemins) :
@reboot sudo /usr/bin/node /home/pi/Raspberry-Pi-Simple-Web-GPIO-GUI/app.js &
Sauvegardez-le avec CTRL + O et quittez avec CTRL + X (Nano Editor). Pour vérifier si tout a fonctionné, vous pouvez redémarrer le Raspberry Pi (sudo reboot
) puis appeler à nouveau l’URL dans votre navigateur. Si la page est affichée, tout a fonctionné.
Les applications que vous pouvez exécuter sur votre serveur Raspberry Pi Node.JS sont presque illimitées. De la commande GPIO pure, en passant par une surface pour la domotique jusqu’au serveur de surveillance pour des services ou des capteurs individuels. Grâce à la faible consommation électrique du Raspberry Pi et à ses performances relativement élevées, le Raspberry Pi est un serveur idéal pour les petits (loisirs) projets.