J'ai réussi à contrôler avec succès un relais à l'aide de My Raspberry Pi et de mon noeud JS avec le code suivant; Cependant, je me suis battu pour que le relais ne se soit activer Si c'est éteint, et ne s'éteint que si c'est sur. p> J'ai essayé le code suivant en vain; p> Quand j'essaie de tourner le relais En accédant à MyIP: 3000 / ON, cela fonctionne comme le premier code que j'ai utilisé, cependant, lorsque j'essaie de tourner le relais en accédant à MyIP: 3000 / OFF, j'ai donné l'erreur P> ne peut pas obtenir / désactiver p>
BlockQuote> Je ne suis pas sûr que cela soit peut-être quelque chose à voir avec la portée locale ne mettant pas à jour la variable globale. P> P>
3 Réponses :
const express = require("express"); const Gpio = require("onoff").Gpio; const app = express(); const port = 3000; const REL = new Gpio(21, "out"); let status = 0; app.get("/toggle", (req, res) => { if(status){ REL.writeSync(0); res.send("REL is off"); status = 0; }else{ REL.writeSync(1); res.send("REL is on"); status = 1; } });
Ce que vous faites est bizarre. P>
Vous essayez d'exposer des itinéraires différents pendant que une variable change. P>
Vous ne pouvez pas faire cela, à la place, vous devez exposer une route par exemple le fichier, et dans le paramètre de requête de la demande, passez-le activé / désactivé (je pense aussi que vous devriez utiliser POST au lieu de vous rendre ici et de le transmettre dans le corps) . p>
Si vous avez besoin d'une explication plus loin, écrivez-moi! P>
Enregistrement des points d'extrémité et la manipulation des demandes entrantes sont deux activités distinctes.
pense comme l'enregistrement des points d'extrémité (en appelant Ensuite, lorsque l'application est en cours d'exécution, Express essaie de correspondre aux demandes entrantes avec les gestionnaires de points d'extrémité enregistrés pour un traitement ultérieur. P> Si Express ne trouvera pas de points d'extrémité correspondants. Comportement par défaut et affiche une page avec des informations d'erreur, par exemple: Votre code actuel, vous enregistrez des points de terminaison conditionnellement. Lorsque vous démarrez votre application, seul le noeud final app.get (chemin, rappel) code>) se passe avant que l'application commence à écouter des demandes. p>
Impossible d'obtenir /offock
. / on code> est enregistré. Pour résoudre ce problème, déplacer
si code> bloque sur les gestionnaires de point final ou modifiez le code comme @LFARUKI conseillé. Remeber pour ajouter
else code> blocks ou ajouter
suivant () code> appelle pour empêcher votre application de suspendre. P>
const express = require("express");
const Gpio = require("onoff").Gpio;
const app = express();
const port = 3000;
const REL = new Gpio(21, "out");
var x = 0;
app.get("/on", (req, res) => {
if (x === 0) {
REL.writeSync(1);
res.send("Relay is on");
x = 1;
}
else {
res.send("Relay is already running");
}
});
app.get("/off", (req, res) => {
if (x === 1) {
REL.writeSync(0);
res.send("Relay is off");
x = 0;
}
else {
res.send("Relay is already turned off");
}
});
Votre conditionnel est au mauvais endroit - vous voulez toujours que le point de terminaison OFF OFF OFF> Existe i> Même si le relais est initialement éteint.