Dans l'article que j'ai écrit plus tôt Connectez Raspberry Pi et TV via HDMI et vérifiez TV ON / OFF, TV ON / OFF (STANDBY) Je vous ai dit que vous pouvez vérifier la situation à partir du Raspberry Pi, et si vous l'utilisez, vous pouvez créer un appareil de surveillance pour personnes âgées sans travail électronique.
Plus précisément, il existe un package appelé node-cec
dans npm, et si vous installez cela, Node.js produira des signaux HDMI-CEC. Il était possible d'envoyer et de recevoir.
Cependant, pour obtenir un identifiant de carte avec Raspberry Pi en utilisant le lecteur de carte IC de SONY PaSoRi (RC-S380), utilisez la bibliothèque Python nfcpy
. Il n'y a pas d'autre choix que de l'utiliser.
Pour utiliser PaSoRi (RC-S380) à partir de Node.js, il est nécessaire de lier Python et Node.js (comme recevoir JSON avec l'ID de la carte en utilisant l'entrée / sortie standard).
Même avec PaSoRi (RC-S380), connectez simplement le câble à HDMI et node-cec
et installez le paquet npm. J'aimerais pouvoir obtenir l'ID de la carte ... et inclure un script Python pour gérer nfcpy
[ node-nfcpy-id
](https://www.npmjs.com/package/ J'ai créé un package npm appelé node-nfcpy-id).
ssh
dans le répertoire racine de MicroSD.Les cartes NFC lisibles par PaSoRi (RC-S380) sont principalement les standards FeliCa et MIFARE.
Dans la norme FeliCa, l'ID de la carte s'appelle IDm et dans la norme MIFARE, l'ID de la carte s'appelle UID.
Avec node-nfcpy-id
, vous pouvez obtenir l'ID de la carte sous forme de chaîne (nombre hexadécimal alphabétique inférieur).
Le standard de la carte peut être obtenu avec les valeurs numériques suivantes («2», «3», «4») selon «nfcpy».
Installez la dernière version de Node.js et npm en vous reportant à Installation de la dernière version de Node.js et npm sur Raspberry Pi.
nfcpy
et PaSoRiLa série Python 2 étant installée en standard dans Raspbian, il n'est pas nécessaire d'installer Python lui-même.
Installez python-usb
et python-pip
avec apt-get
Raspbian
pi@raspberrypi:~ $ sudo apt-get install python-usb python-pip -y
Installez nfcpy-id-reader
(script Python qui fonctionne avec node-nfcpy-id
) avec pip.
nfcpy
est également installé lorsque vous installez nfcpy-id-reader
.
Raspbian
pi@raspberrypi:~ $ sudo pip install -U nfcpy-id-reader
Créez un fichier appelé / etc / udev / rules.d / nfcdev.rules
pour rendre PaSoRi disponible même avec des privilèges d'utilisateur.
Raspbian
pi@raspberrypi:~ $ cat << EOF | sudo tee /etc/udev/rules.d/nfcdev.rules
SUBSYSTEM=="usb", ACTION=="add", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="06c3", GROUP="plugdev"
EOF
Je vais redémarrer une fois
Raspbian
pi@raspberrypi:~ $ sudo reboot
Installez node-nfcpy-id
sur un répertoire de votre choix
Raspbian
pi@raspberrypi:~ $ npm install node-nfcpy-id --save
Si vous obtenez une erreur comme npm ERR! 404'types / node'n'est pas dans le registre npm.
pendant l'installation de npm
, il se peut que vous ayez une ancienne version de npm.
Reportez-vous à Installation de la dernière version de Node.js et npm sur Raspberry Pi pour installer la dernière version de npm.
À partir de la version 0.1.0, l'importation (require
-ing) dans CommonJS requiert default
comme indiqué ci-dessous.
const NfcpyId = require('node-nfcpy-id').default;
Cliquez ici si vous souhaitez utiliser l'instruction ʻimport` dans TypeScript, ECMAScript 2015 (en utilisant Babel)
import NfcpyId from 'node-nfcpy-id';
Vous pouvez spécifier le mode de fonctionnement lors de l'initialisation
boucle
Faites fonctionner le lecteur de cartes sans arrêter chaque carte afin que plusieurs cartes puissent être lues successivement. Vous pouvez obtenir l'événement lorsque la carte quitte le lecteur de carte. Il s'agit du mode par défaut lorsque rien n'est spécifié dans l'argument du constructeur.
// const nfc = new NfcpyId({mode: 'loop'});
const nfc = new NfcpyId(); // loop mode
non-boucle
Placez la carte sur le lecteur de carte et relâchez-la pour arrêter le lecteur de carte. Vous pouvez obtenir l'événement lorsque la carte quitte le lecteur de carte.
const nfc = new NfcpyId({mode: 'non-loop'});
fin non tactile
Une fois la carte placée sur le lecteur de carte, elle arrêtera le lecteur de carte. Je ne peux pas obtenir l'événement lorsque la carte quitte le lecteur de carte.
const nfc = new NfcpyId({mode: 'non-touchend'});
start ()
Commencez à lire la carte avec le lecteur de carte
nfc.start();
Vous pouvez également utiliser la méthode start ()
en même temps que l'initialisation
const nfc = new NfcpyId().start();
pause ()
Arrête la lecture du lecteur de carte
nfc.pause();
Vous pouvez enregistrer des événements sous la forme d'EventEmitter.
touchstart
Se produit lorsqu'une carte est placée sur un lecteur de carte. L'ID de la carte et le type de carte sont stockés dans l'argument de la fonction de rappel.
nfc.on('touchstart', (card) => {
console.log('touchstart', 'id:', card.id, 'type:', card.type);
});
touchend
Se produit lorsque la carte quitte le lecteur de carte (non disponible en mode `` fin non tactile '')
Renvoie ture
si le lecteur de carte est en cours d'exécution, sinon il renvoie false
.
console.log(nfc.isRunning); // true or false
Lors de la fin du processus Node.js (y compris contrôle + C etc.), en même temps, PaSoRi n'émettra pas d'ondes radio, puis Python mettra également fin au processus.
loop
Lorsque la carte est placée sur le lecteur de carte, elle imprime l'ID de la carte et le type de carte, et imprime «touchend» lorsque la carte quitte le lecteur de carte.
const NfcpyId = require('node-nfcpy-id').default;
const nfc = new NfcpyId().start();
nfc.on('touchstart', (card) => {
console.log('touchstart', 'id:', card.id, 'type:', card.type);
});
nfc.on('touchend', () => {
console.log('touchend');
});
nfc.on('error', (err) => {
// standard error output (color is red)
console.error('\u001b[31m', err, '\u001b[0m');
});
Raspbian
pi@raspberrypi:~ $ node app
touchstart id: aa7dxxxx type: 2
touchend
touchstart id: 0114b3fxxxxxxxxx type: 3
touchend
touchstart id: 01103f0xxxxxxxxx type: 3
touchend
touchstart id: 0114b3fxxxxxxxxx type: 3
touchend
touchstart id: 04192xxxxxxxxx type: 4
touchend
Lorsque la carte est placée sur le lecteur de carte, l'ID de la carte et le type de carte sont émis et la lecture par le lecteur de carte reprend après 5 secondes.
const NfcpyId = require('node-nfcpy-id').default;
const nfc = new NfcpyId({mode: 'non-touchend'}).start();
nfc.on('touchstart', (card) => {
console.log('touchstart:', card.id, 'type:', card.type);
console.log('Reprendre le chargement après 5 secondes');
setTimeout(() => {
nfc.start();
}, 5000);
});
nfc.on('error', (err) => {
// standard error output (color is red)
console.error('\u001b[31m', err, '\u001b[0m');
});
En mode boucle
ou en mode sans boucle
, si vous touchez certaines cartes MIFARE telles que Aime, l'événement touchend
se produira immédiatement après l'événement touchstart
, et dans le mode boucle
, cela sera répété. Un phénomène comme le bavardage se produit.
Le même phénomène se produit lorsque nfcpy
est utilisé uniquement en Python.
À propos de ce package npm, 2 jours de suite !! (1er jour) We Are JavaScripters! @ 8ème [Tournoi LT pour débutants] "Node.js + IoT facile avec Raspberry Pi "(Slide)
―― En pensant à le publier en tant que package npm et à l'utiliser, j'ai écrit un processus qui termine Node.js avec contrôle + C en même temps que Python.
nfcpy
et un exemple de code pour bien le signaler afin de l'éteindre.git diff
). Était décevant)Utilisez PaSoRi USB Felica Reader (RC-S380) avec Raspberry pi Module Npm qui peut être réalisé en 3 minutes
Recommended Posts