[PYTHON] J'ai fait un package npm pour obtenir l'ID de la carte IC avec Raspberry Pi et PaSoRi

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).

Python-to-Nodejs.png

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).

npm-node-nfcpy-id.png

Environnement d'exploitation

Côté Raspberry Pi

Lecteur de carte IC

P6110607.jpg

À propos de l'ID et du type de carte

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».

Installation

Installez Node.js

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.

Paramètres d'utilisation de nfcpy et PaSoRi

La 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.

comment utiliser

Description de fonctionnalité

importer

À 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';

Initialisation (spécifier le mode)

Vous pouvez spécifier le mode de fonctionnement lors de l'initialisation

mode 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

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'});

mode 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'});

Méthode

Méthode 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();

Méthode pause ()

Arrête la lecture du lecteur de carte

nfc.pause();

un événement

Vous pouvez enregistrer des événements sous la forme d'EventEmitter.

événement 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);
});

événement touchend

Se produit lorsque la carte quitte le lecteur de carte (non disponible en mode `` fin non tactile '')

Getter

Propriété ʻIsRunning`

Renvoie ture si le lecteur de carte est en cours d'exécution, sinon il renvoie false.

console.log(nfc.isRunning); // true or false

À la fin de Node.js

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.

Illustration de chaque événement de méthode de mode

node-nfcpy-id-modes.gif

échantillon

Exemple de mode 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');
});

Exemple d'exécution

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

Exemple de mode "fin non tactile"

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');
});

Problèmes connus

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.

Annonce LT

À 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) wejs-slide-1.png

Essayez de créer un package npm

―― 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.

KP-NFLEW2

Site de référence

Utilisez PaSoRi USB Felica Reader (RC-S380) avec Raspberry pi Module Npm qui peut être réalisé en 3 minutes

Recommended Posts

J'ai fait un package npm pour obtenir l'ID de la carte IC avec Raspberry Pi et PaSoRi
J'ai essayé d'automatiser l'arrosage du pot avec Raspberry Pi
J'ai tweeté l'éclairement de la pièce avec Raspberry Pi, Arduino et un capteur optique
J'ai essayé de créer un environnement Ubuntu 20.04 LTS + ROS2 avec Raspberry Pi 4
J'ai envoyé les données de Raspberry Pi à GCP (gratuit)
Comment obtenir l'ID de Type2Tag NXP NTAG213 avec nfcpy
J'ai créé un serveur Web avec Razpai pour regarder des anime
J'ai essayé d'obtenir les informations sur le film de l'API TMDb avec Python
J'ai essayé d'obtenir et d'analyser les données statistiques de la nouvelle Corona avec Python: données de l'Université John's Hopkins
Lisez les données du lecteur NFC connecté à Raspberry Pi 3 avec Python et envoyez-les à openFrameworks avec OSC
Connectez-vous à la console Raspberry PI et affichez les informations IP et SD locales
Je t'ai fait exprimer la fin de l'adresse IP avec L Chika
J'ai créé une commande appdo pour exécuter des commandes dans le contexte de l'application
Avec LINEBot, j'ai fait une application qui m'informe de "l'heure du bus"
Obtenez des informations sur le processeur de Raspberry Pi avec Python
[Pour les débutants] J'ai fait un capteur humain avec Raspberry Pi et notifié LINE!
Essayez de détecter un objet avec RaspberryPi ~ Partie 1: Comparaison de la vitesse de détection ~
Obtenez la température et l'humidité avec DHT11 et Raspberry Pi
Les clés de bureau WeWork peuvent maintenant être déverrouillées / verrouillées avec une carte IC en utilisant la serrure intelligente «SESAME mini» et Raspberry Pi Zero WH.
J'ai créé un système avec Raspberry Pi qui mesure périodiquement l'indice d'inconfort de la pièce et envoie une notification LINE s'il s'agit d'une valeur dangereuse
Une introduction au logiciel d'interface graphique de la plate-forme de classe fait avec Python / Tkinter! (Et de nombreux Try and Error)! (Au milieu de l'écriture)
[Blender] Comment obtenir l'ordre de sélection des sommets, des côtés et des faces d'un objet
Quand j'ai essayé de faire une communication socket avec Raspberry Pi, le protocole était différent
J'ai essayé d'automatiser la mise à jour de l'article du blog Livedoor avec Python et sélénium.
Je voulais juste extraire les données de la date et de l'heure souhaitées avec Django
J'ai essayé de comparer la vitesse de traitement avec dplyr de R et pandas de Python
Je souhaite être informé de l'environnement de connexion lorsque RaspberryPi se connecte au réseau
IoT facile pour démarrer avec Raspeye et MESH
Visualisons la pièce avec tarte aux râpes, partie 1
Changer les valeurs du thermo-hygromètre Bot avec Raspberry Pi
Essayez d'obtenir le contenu de Word avec Golang
Une histoire à laquelle j'ai pensé en essayant d'identifier les informations de plénitude du parking en utilisant l'image obtenue par la caméra Web et Razpai et le deep learning.
Je n'aime pas être frustré par la sortie de Pokemon Go, j'ai donc créé un script pour détecter la sortie et le tweeter
J'ai essayé de publier automatiquement sur ChatWork au moment du déploiement avec Fabric et ChatWork Api
Je voulais faire fonctionner le moteur avec une tarte à la râpe, alors j'ai essayé d'utiliser la carte de commande du moteur de Waveshare
J'ai créé un outil pour obtenir les liens de réponse d'OpenAI Gym en même temps
Notez ce que vous voulez faire à l'avenir avec Razpai
J'ai créé une classe pour obtenir le résultat de l'analyse par MeCab dans ndarray avec python
J'ai créé une API avec Docker qui renvoie la valeur prédite du modèle d'apprentissage automatique
Introduction facile au piratage domestique avec Raspberry Pi et discord.py
J'ai essayé de trouver l'entropie de l'image avec python
Essayez d'obtenir la liste des fonctions du paquet Python> os
J'ai essayé d'obtenir les informations de localisation du bus Odakyu
Obtenez l'identifiant d'un GPU avec une faible utilisation de la mémoire
J'ai créé un package pour filtrer les séries chronologiques avec python
J'ai essayé d'exécuter Movidius NCS avec python de Raspberry Pi3
Créez des jeux LCD (16x2) avec Raspberry Pi et Python
Obtenez la version du package pour vous inscrire à PyPI à partir de Git
Je veux obtenir des informations sur le fonctionnement de Yahoo Route
Production de système de contrôle de température avec tarte aux framboises et ESP32 (1)
J'ai fait une fonction pour vérifier le modèle de DCGAN
J'ai créé un moniteur de ressources pour Raspberry Pi avec une feuille de calcul
Je veux connaître la nature de Python et pip
J'ai fait une caméra de surveillance avec Raspberry PI pour la première fois.
Keras Je veux obtenir la sortie de n'importe quelle couche !!
Obtenez la météo en utilisant l'API et laissez Raspberry Pi parler!
Récupérez la source de la page à charger indéfiniment avec python.
J'ai créé un robot Line qui devine le sexe et l'âge d'une personne à partir de l'image