[TUTO] Application web dynamique

Proposer ou rechercher un tutoriel concernant le Raspberry Pi

Modérateur : Francois

Alexidreaming
Raspinaute
Messages : 211
Enregistré le : mar. 16 août 2016 20:55
Contact :

Re: [TUTO] Application web dynamique

Messagepar Alexidreaming » mer. 22 févr. 2017 09:05

Premier tuto traitant de ce sujet qui est intéressant et bien expliqué!


Bravo!
Le pro du déterrage de topic est là!

Alexidreaming

drean
Messages : 12
Enregistré le : lun. 1 févr. 2016 20:17

Re: [TUTO] Application web dynamique

Messagepar drean » mer. 22 févr. 2017 10:31

bonjour
merci pour cette réponse rapide.
en effet avec le débogueur la solution était assez évidente ( mais c'est souvent le cas quand le problème est résolu ).
je vais quand même approfondir l'étude de node sur openclassroom car je me suis rendu compte que mon niveau n'était pas assez bon pour suivre facilement ton tuto.
ce qui est certain c'est que je vais utiliser node pour ma domotique à la maison.

à bientôt pour d'autres questions

André

Bud Spencer
Raspinaute
Messages : 292
Enregistré le : lun. 15 août 2016 21:38

Re: [TUTO] Application web dynamique

Messagepar Bud Spencer » sam. 25 févr. 2017 18:45

drean a écrit :...la solution était assez évidente ( mais c'est souvent le cas quand le problème est résolu ).

Le fameux ‘Bon sang, mais c’est bien sûr !’. Je te rassure, ça me le fait aussi à chaque fois que je résout un problème :lol:

guillaume9344 a écrit : quelques idées : bases de données , i2c , spi , 1wire, inclusion flux video (pour motion par ex), monitoring, écriture de lib (en c ;) ).....

C’est sûr que les idées ne manquent pas, le tout c’est d’en choisir une.

Leçon 7 : chiche, on ajoute 8 entrées analogiques cablées en SPI à la leçon 6 avec un seul composant externe et une dizaine de lignes de code ?

Le composant, un MCP3208 (8 x adc 12 bits SPI) et pour le câblage on peut se contenter de ca (trouvé sur le net pour pas avoir à dessiner :P ).
jv.jpg
jv.jpg (76.65 Kio) Vu 1334 fois


Et pour le code, la lib wiring-pi est déjà chargée, donc juste une fonction qui va dialoguer nativement avec le composant et retourner un tableau json.
mcp3208.png
mcp3208.png (24.43 Kio) Vu 1334 fois


Fini :shock: !

Suffit d’appeler la page http://adressedupi:port/adc pour avoir les valeurs.
Qui a dit que l'analogique et les liaisons SPI c'etait trop compliqué à mettre en œuvre ? ;)
Le code fait un peu ‘barbu’, mais en lisant la datasheet du composant et la doc de la lib et ça devrait passer tout seul. Ca permet de démontrer que l'on peut aussi coder du javascript en utilisant une syntaxe de bas niveau très proche de C

Pour test, J’ai câblé toutes les entrées de mon 3208 au – , sauf la 1 qui est au + et la 0 qui est connectée à un générateur de fonction et qui me génère une tension variable de 0 à 3.3 v et ça donne ca :

{"adc":[2745,4095,0,0,0,0,0,0]}
{"adc":[531,4095,0,0,0,0,0,0]}
{"adc":[4040,4095,0,0,0,0,0,0]}


Avec un peu d’imagination vous devriez facilement pouvoir transformer ça en valeurs 'volts' ou valeurs réelles de capteurs analogiques et en vue graphique dynamique. A l’occase, je ferais peut être une nouvelle version de la leçon ‘oscilloscope’ pour utiliser la valeur réelle d’une tension analogique plutôt que d’utiliser une tension virtuelle générée par le serveur.

***********Edit**************
Comme je suis repassé pour corriger quelques fote dortografe, j'ajoute un petit +
//vous devriez facilement pouvoir transformer ça en valeurs 'volts' . C'est ballot, mais c'est la première chose qu'on m'a demandé. Le composant fait une conversion de la tension sur 12 bits, donc pour avoir directement la tension appliquée sur une entrée :
volt = (Uref / (2^12 -1)) * data . Ou Uref est la tension de référence (3.3 volt si on suit le schéma) et data est la valeur numérique retournée par l'ADC. Si on prend l'exemple de valeur sur le cannal 0 de {"adc":[2745,4095,0,0,0,0,0,0]}, cela donne : (3.3/4095)*2745 = 2.212087912 volts (précis hein :lol: ).
Donc pour avoir directement des valeurs en volts avec 3 décimales dans le tableau json il suffit de remplacer la ligne :
x.adc[i] = ((b[1]&0x0F)<<8)+ b[2];
par
x.adc[i] = ((3.3/4095) * ((b[1]&0x0F)<<8)+ b[2]).toFixed(3);
toFixed(3) c'est pour limiter a 3 décimales.

Bud Spencer
Raspinaute
Messages : 292
Enregistré le : lun. 15 août 2016 21:38

Re: [TUTO] Application web dynamique

Messagepar Bud Spencer » ven. 14 avr. 2017 19:27

Bon ce n’est pas le tout, mais on a dépassé les 5000 vues et ça continu de monter doucement (en tout cas, suffisamment vite pour que je prenne du retard sur les anniversaires de comptages ...). Pour fêter ça, j’ai un peu la flemme d’écrire une nouvelle leçon aujourd’hui (mais vous ne perdez rien pour attendre :mrgreen: ), mais nous n’allons pas rester sans rien faire pour autant. Si vous utilisez nodeJS, vous aimeriez sans doute profiter des dernières versions. Voyons donc comment mettre tout ca à jours.

Déjà connaitre votre version de nodeJS. Pour ça, une simple commande : node –v vous en dira plus.

Sur la SD du PI que j'utilise pour les dev. linux, j’étais déjà en version 4.0.0, mais si vous vous contentez des packs d’update raspbian vous devez encore en être à une version préhistorique genre 0.1x.x.

Allons donc voir chez nodejs ou cela en est : https://nodejs.org/

Woww … la dernière ‘recommandée’ est la 6.10.2. Installons-la avec cette petite liste de commandes somme toute très classique :

Code : Tout sélectionner

wget https://nodejs.org/dist/v6.10.2/node-v6.10.2-linux-armv7l.tar.gz
tar -xvf node-v6.10.2-linux-armv7l.tar.gz
cd node-v6.10.2-linux-armv7l
sudo cp -R * /usr/local/
cd ..
rm -r node-v6.10.2-linux-armv7l
rm node-v6.10.2-linux-armv7l.tar.gz


Une petite commande node –v pour contrôler, on est bien passé en 6.10.2

Reste à mettre jour npm : sudo npm install -g npm
On contrôle avec npm –v (à aujourd'hui, version 4.5.0)

Fini :)


!!! Attention, si vous utilisez un PI à base arm6, remplacez armv7l par armv6l dans toutes les commandes !!!
(commande
cat /proc/cpuinfo si vous avez un doute ;) )




********************* Edit 27/05/2017 ****************************
!!! Une fois nodejs ou npm mis à jour, vous pouvez saisir la commande npm update depuis la racine de votre projet web. Cela va avoir pour effet de mettre à jour les packages qui se trouvent dans node_modules en fonction de vos nouvelle version (c'est même parfois indispensable) !!!
********************************************************************
Modifié en dernier par Bud Spencer le sam. 27 mai 2017 09:21, modifié 7 fois.

drean
Messages : 12
Enregistré le : lun. 1 févr. 2016 20:17

Re: [TUTO] Application web dynamique

Messagepar drean » jeu. 4 mai 2017 16:48

bonjour
encore merci pour ton tuto, j'avance dans mon projet, c'est laborieux mais j'avance.
j'ai mis à jour nodejs et npm, l'installation c'est bien passé mais quand j'ai fait l'essai des leçons j'ai eu un pb quand on utilise wiring-pi ça ne marchait pas.
si ça peut rendre service après une réinstallation de wiring-pi tout est ok.
bonne journée

André

Bud Spencer
Raspinaute
Messages : 292
Enregistré le : lun. 15 août 2016 21:38

Re: [TUTO] Application web dynamique

Messagepar Bud Spencer » sam. 6 mai 2017 12:02

Merci pour le retour André. Je ne souviens pas avoir eus ce genre de soucis mais si tu l’as rencontré, c’est qu’il existe. Pour ma part, je devais déjà sans doute utiliser une version NodeJs plus fraiche que celle installée avec Raspbian quand j’avais fait ces lecons.

guillaume9344
Raspinaute
Messages : 613
Enregistré le : mar. 6 janv. 2015 20:44
Localisation : finistere

Re: [TUTO] Application web dynamique

Messagepar guillaume9344 » jeu. 25 mai 2017 19:39

Bonsoir Bud , pour pouvoir faire une petite démonstration des "pouvoirs " d'un pi , j'ai repris la leçon 6 du tuto .
Malheureusement, la page se charge que jusque au début du tableau , mais l'envoi des données de celui-ci échoue et dans la console de fire fox , j'ai une erreur type mime:

Code : Tout sélectionner

La ressource à l’adresse « http://192.168.1.21:8080/socketio/socket.io.js » a été bloquée en raison d’un type MIME incorrect (X-Content-Type-Options: nosniff).[En savoir plus]  192.168.1.21:8080

J'ai reparcouru le tutos en vitesse et chargé la leçon 3 (oscillo du pauvre ;) ) et celle-ci fonctionne niquelle , je ne comprend pas pourquoi socket.io est bloqué dans la 6.
Pour info:
node -v :6.10.2
npm -v :3.10.10
jessie pixel


@+
rpi b+ ,osmc, motioneyes
rpi 2 raspbian , server minecraft 24h/24 , utilisation gpio
orange pi pc debian ,utilisation gpio, motion cam

Bud Spencer
Raspinaute
Messages : 292
Enregistré le : lun. 15 août 2016 21:38

Re: [TUTO] Application web dynamique

Messagepar Bud Spencer » ven. 26 mai 2017 08:46

Salut Guillaume.

Il faut contrôler que le chemin de la ligne 'app.use('socketio',express.static (....' est conforme avec ton arborescence. Suivant les versions (de socket.io ou npm) , l’arborescence diffère et le client ne télécharge pas le bon fichier socket.io.js ou ne le trouve pas. ‘drean’ a eu ce genre problème ou il avait du modifier son path static en ajoutant ‘/dist’ au bout de sa ligne (voir la page page précédente du tuto).

En fait je me suis aussi rendu compte que pour installer correctement socket.io localement depuis la racine du projet, il fallait faire attention de bien utiliser la commande npm install socket.io et non pas npm install socketio (bien mettre le ‘.’ de socket.io).

Ce que je te conseille, c’est de supprimer le répertoire complet socket.io (ou socketio) dans node_modules et de refaire l’install avec la bonne commande (npm install socket.io ) depuis le répertoire racine de ton projet. A ce moment la ligne de chemin static devrait plutôt ressembler à ca :

app.use('socketio',express.static(__dirname + '/node_modules/socket.io-client/dist/));

guillaume9344
Raspinaute
Messages : 613
Enregistré le : mar. 6 janv. 2015 20:44
Localisation : finistere

Re: [TUTO] Application web dynamique

Messagepar guillaume9344 » sam. 27 mai 2017 08:12

Bonjour, j' avais bien installé socket.io , mais c'était bien un problème de chemin de la ligne 'app.use('socketio',express.static .... j'ai du ajouter &galement /dist à la fin
et le chemin était bizard ,avec plusieurs fois node_modules.
Après ces modif j'ai vue la page s'afficher correctement mais entre temps j'avais fin un update upgrade et du coups j'ai eu une erreur avec wiring pi . bon ok ca j'ai déjà vu.je reinstall wiring-pi mais pas de résultat et en même temps la lib wiringpi avait aussi des problémes.
je sort la carte sd et refait une install propre de jessie (pixel 217-04-10) mais toujours un probleme avec wiring-pi :

Code : Tout sélectionner

pi@raspberrypi:~/projects_node/myweb $ sudo node myweb.js
Unable to determine hardware version. I see: Hardware   : BCM2835
,
 - expecting BCM2708 or BCM2709. Please report this to projects@drogon.net
pi@raspberrypi:~/projects_node/myweb $

je comprend bien qu'il y a un probléme de définition du cpu ........ je pense que le probléme et venu avec le update upgrade .
Des pistes ?
@+
rpi b+ ,osmc, motioneyes
rpi 2 raspbian , server minecraft 24h/24 , utilisation gpio
orange pi pc debian ,utilisation gpio, motion cam

Bud Spencer
Raspinaute
Messages : 292
Enregistré le : lun. 15 août 2016 21:38

Re: [TUTO] Application web dynamique

Messagepar Bud Spencer » sam. 27 mai 2017 08:59

J'ai mis à jour le fichier zip de la lecon 6 (voir page 2 du tuto). Elle contient désormais un fichier de package pour simplifier l'install.

Important : Quand tu fais des mises à jours (surtout de nodejs ou npm), il faut entrer la commande npm update depuis la racine de ton projet web. Cela met à jour les package locaux en fonction de tes versions. Si tu n'a pas créé de fichier package.json (voir info sur npm init en page 4 du tuto), tu vas logiquement avoir des warm te le disant, mais tes packages seront mis à jour quand même. Juste un peu plus haut, drean nous signalait avoir eu un problème avec le package wiring-pi qu'il avait du réinstaller. un simple npm update aurait sans doute corrigé le problème. Je n'avais pas pensé à parler de ca quand j'ai écrit le petit post sur l'update de nodejs et npm, mais c'est désormais corrigé.


Retourner vers « Tutoriels »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité