Lecteur RFID mobile - un projet Maker Kit utilisant Particle & Ubidots
Au cours des dernières années, Ubidots s'est associé à Particle pour atteindre un objectif ultime : permettant une création rapide, facile et efficace de solutions IoT
Avance rapide jusqu'à nos jours et nous sommes fiers d'affirmer que les deux produits sont utilisés pour accélérer IoT au niveau mondial . Des entrepreneurs et start-ups aux grandes et petites entreprises, nous aidons les entreprises à créer un avenir axé sur les données.
Récemment, Friedl a relevé le défi de créer un IoT à partir de zéro. Dès le départ, les connaissances de Friedl sur le sujet étaient limitées. Cependant, grâce aux recherches qu’il a menées – et aux nombreuses vidéos Youtube –, il a acquis une certaine confiance dans l’utilisation de divers outils pour concrétiser son objectif ; Créer un lecteur RFID mobile sans être un IoT .
Après avoir obtenu ce résultat étonnant, nous avons contacté Friedl pour le féliciter de son succès et tirer les leçons de sa réussite. Nous voulions également partager cette histoire avec la communauté Ubidots car nous pensons qu'elle est une source d'inspiration et d'apprentissage.
À la lumière de ces grandes réalisations, mon entretien explorera le processus de développement de Friedl, les techniques qu'il a utilisées pour atteindre son objectif, ainsi que d'autres enseignements précieux.
Le message original peut être trouvé sur le site de Particle Community . Friedl l'a également aimablement partagé avec Ubidots .
Écrit par : friedl_1977
Dans le cadre de mon premier projet, j'ai décidé de créer un lecteur RFID mobile publiant des données en direct sur MySQL, Google Sheets ou Ubidots via des Webhooks.
- crédit photo : Migal Vanas
Note:
Il ne s'agit pas d'un tutoriel en tant que tel, mais plutôt d'une présentation du produit. Comme j'ai reçu beaucoup d'aide du Particle Forum, j'ai décidé de publier mes fichiers et mon code Eagle pour les mettre à la disposition de toute personne susceptible de vouloir les utiliser.
Je suppose que vous avez des connaissances de base de l'environnement Particle, des webhooks et que vous avez configuré votre compte et vos appareils dans Particle Console. Si ce n'est pas le cas, veuillez le faire avant d'essayer cette version.
Le brief :
Construire un scanner RFID véritablement sans fil (mobile) dans le but de numériser les cartes RFID, de capturer les UID de ces cartes et de les publier sur l'un ou l'autre ;
Nomenclature :
- Module lecteur de cartes MFRC522 3
- Batterie LiPo 1 3,7 V 1
- de la batterie 1 module
- LM394N1
- Faisceau de LED 0603 pour indicateur de batterie
- 2 x LED RVB pour l'état du système et l'état de lecture de la carte
- Photons de particules
- Interrupteur à glissière - Alimentation principale
- Incliner 1 interrupteur
- PCB de conception personnalisée (de PCBWAY ou similaire )
- Boîtier de conception personnalisée
- Diverses résistances 0603
- Ferrite 2 !!!
Tout d’abord :
Si vous êtes comme moi, un simple prototype générique ne suffira pas, alors j'ai fait un petit effort supplémentaire, j'ai appris à connaître Rhinoceros et j'ai conçu un boîtier simple mais élégant (ou du moins je le pensais) qui mettrait en valeur le photon de particules et quelques autres composants.
En plus de cela, j'ai décidé de ne pas opter pour une carte proto générique car je DÉTESTE absolument les fils. J'ai inclus une image de ma tentative initiale de créer une « jolie » carte en utilisant une carte proto et des câbles de liaison, mais après quelques heures, j'ai réalisé que cela ne suffirait tout simplement pas. Encore une autre courbe d'apprentissage, j'ai utilisé Google, j'ai passé quelques heures sur YouTube et j'ai réussi à me repérer dans Autodesk Eagle. Cela vaut chaque minute passée.
***La dernière image indiquant le PCB entièrement assemblé avec LED d'état indiquant « OK » ainsi que le LM3914N en action indiquant une batterie chargée à ± 90 %. (7 sur 8 LED)
J'ai soumis les fichiers Gerber à PCBWAY et en moins d'une semaine, mes tout nouveaux PCB personnalisés étaient prêts à être assemblés.
Les choses importantes :
Maintenant, le codage, c'est la partie avec laquelle j'ai le plus de mal, mais grâce à un monsieur serviable sur les forums Particle et Hackster, j'ai trouvé le code ci-dessous. Maintenant, ce n'est probablement pas le code le plus propre jamais écrit, mais il fonctionne, alors n'hésitez pas à l'utiliser et à l'améliorer si vous le souhaitez.
// Projet : Registre de présence RFID mobile // Un projet de FireFli (PTY) LTD // Date : juillet 2019 // Compilé par : Friedl Basson // Détails : Rechercher les UID à partir de cartes RFID et les publier via des webhooks vers UbiDots , mySQL DB ou Google Sheets // Crédits : Un merci spécial à la communauté Particle pour son aide et avoir rendu ce projet possible ! // Firmware : V2.1.1 //Mode système// - indiquez si vous configurez le WiFi via l'application Particle et n'avez pas besoin de vous connecter à un autre réseau sans fil après coup //SYSTEM_MODE(SEMI_AUTOMATIC) ; // Cette instruction #include a été automatiquement ajoutée par l'IDE Particle. #include "RFID.h" #include < Ubidots .h> /* Définir les broches utilisées pour les broches SS (SDA) et RST (réinitialisation) pour le matériel et le logiciel SPI */ #define SS_PIN A2 #define RST_PIN D2 /* Définissez les broches utilisées pour les broches DATA OUT (MOSI), DATA IN (MISO) et CLOCK (SCK) pour LOGICIEL SPI UNIQUEMENT */ #define MOSI_PIN D3 #define MISO_PIN D4 #define SCK_PIN D5 //Initialisation RGB START - RGB LED et le buzzer est utilisé comme indicateur d'état du système int redPin = D6 ; int greenPin = D1; int bluePin = D0; int buzzPin = D7; //Initialisation de RGB END /* Créer une instance de la bibliothèque RFID */ #if défini(_USE_SOFT_SPI_) RFID RC522(SS_PIN, RST_PIN, MOSI_PIN, MISO_PIN, SCK_PIN); // Logiciel SPI #else RFID RC522(SS_PIN, RST_PIN); // Matériel SPI #endif //const char* WEBHOOK_NAME = "rfid_uid"; const char* WEBHOOK_NAME = " Ubidots "; Ubidots ubidots ("webhook", UBI_PARTICLE) ; void setup() { Serial.begin(9600); // WiFi.écouter(); pinMode(redPin, SORTIE); pinMode(greenPin, SORTIE); pinMode(bluePin, SORTIE); pinMode(buzzPin, SORTIE); // Définition des informations d'identification pour une nouvelle connexion WiFi /* Cette section n'est nécessaire que si vous souhaitez vous connecter à un nouveau réseau WiFi après la configuration initiale. Cela ne fonctionnera que si les informations d'identification WiFi actuelles ont été effacées. Le code s'exécutera UNE SEULE FOIS au démarrage et définira les nouvelles informations d'identification spécifiées. Une fois les nouvelles informations d’identification définies, ce code ne s’exécutera plus. */ WiFi.on(); if (!WiFi.hasCredentials()) { WiFi.setCredentials("SSID", "PASSWORD", WPA2, WLAN_CIPHER_AES); } WiFi.connect(); attendre jusqu'à (WiFi.ready); Particule.connect(); #if !défini(_USE_SOFT_SPI_) /* Activer l'interface matérielle SPI */ SPI.setDataMode(SPI_MODE0); SPI.setBitOrder(MSBFIRST); SPI.setClockDivider(SPI_CLOCK_DIV8); SPI.begin(); #endif /* Initialiser le lecteur RFID */ RC522.init(); retard (5000); digitalWrite(bluePin, ÉLEVÉ); digitalWrite (greenPin, ÉLEVÉ); digitalWrite(redPin, FAIBLE); } void loop() { /* Compteur de boucle temporaire */ uint8_t i; /* Une carte a-t-elle été détectée ? */ if (RC522.isCard()) { /* Si c'est le cas, obtenez son numéro de série */ RC522.readCardSerial(); char str[16]; snprintf(str, sizeof(str) , "%02X %02X %02X %02X" , RC522.serNum[0] , RC522.serNum[1] , RC522.serNum[2] , RC522.serNum[3] ); // Webhooks// /* RFID_WP = votre nom de webhook str = vos données que vous souhaitez publier PRIVÉES ou PUBLIQUES */ // Particle.publish("RFID_WP", str, PRIVATE); //Publier les données dans la base de données Wordpress // Particle.publish("XLS", str, PRIVATE); // Publier des données sur Google Sheets Serial.print(str); /* Ajoute des paires clé-valeur de contexte */ ubidots .addContext("UID", str); char* contexte = (char *) malloc(sizeof(char) * 60); /* Construit le contexte avec le tableau ci-dessus à envoyer à Ubidots */ ubidots .getContext(context); ubidots .add("UID", 1, contexte); // Modification du nom de votre variable bool bufferSent = false; bufferSent = ubidots .send(WEBHOOK_NAME, PUBLIC); // Utilisera des webhooks de particules pour envoyer des données //} // - ESSAYEZ Ubidots - // // digitalWrite(buzzPin, HIGH); retard (500); digitalWrite(buzzPin, FAIBLE); digitalWrite (bluePin, FAIBLE); retard (750); digitalWrite(bluePin, ÉLEVÉ); } sinon if (RC522.isCard()) { RC522.readCardSerial(); char str[16]; snprintf(str, sizeof(str) , "%02X %02X %02X %02X" , RC522.serNum[0] , RC522.serNum[1] , RC522.serNum[2] , RC522.serNum[3] ); digitalWrite (bluePin, FAIBLE); digitalWrite (greenPin, FAIBLE); digitalWrite(redPin, ÉLEVÉ); // digitalWrite(buzzPin, HAUT); retard (1000); digitalWrite(bluePin, ÉLEVÉ); digitalWrite (greenPin, ÉLEVÉ); digitalWrite(redPin, FAIBLE); digitalWrite(buzzPin, FAIBLE); } délai (500); }
Frontaux :
Grâce à la fonction webhook de la console Particle, j'ai pu publier le code de manière transparente à peu près n'importe où. Maintenant, si vous connaissez assez bien PHP et MySQL, vous pourrez peut-être écrire votre propre script côté serveur, mais pour ceux qui sont nouveaux dans ce domaine comme moi, je recommanderais les deux services suivants :
Ils diffèrent considérablement, vous devez donc examiner les deux pour déterminer lequel est le plus adapté à votre utilisation. En fin de compte, si vous souhaitez que les données soient publiées en direct vers un emplacement de votre choix, Zapier (ou quelque chose de similaire) est la voie à suivre. Si cela ne vous dérange pas de stocker des données sur le serveur de quelqu'un d'autre, Ubidots est une solution beaucoup plus rentable (coût par point de données) et présente l'avantage supplémentaire de quelques widgets astucieux pour présenter vos données de manière graphique. J'ai joint une capture d'écran d'un exemple Dashboard que j'ai créé dans Ubidots .
- crédit photo : Migal Vanas
Avec le recul :
Au départ, je pensais que construire un indicateur de batterie qui fonctionne en dehors du microcontrôleur était la meilleure idée car il fonctionnerait indépendamment et libérerait des broches numériques indispensables, mais le compromis est que sans qu'une entrée analogique ne soit envoyée au MC. , vous n'êtes pas en mesure d'afficher l'autonomie de la batterie sur un dashboard . Le LM3914N nécessite également quelques calculs pour définir les volutes de référence et déterminer les résistances à utiliser en fonction de votre différence de tension entre l'état « complètement chargé » et « épuisé ». Gardez à l'esprit que pour toutes les raisons pratiques, vous devez travailler avec 3,1 V sur la batterie aussi épuisée que la plupart des composants ne fonctionneront pas en dessous de 3 V ou commenceront à se comporter sporadiquement. Six d'entre eux, je suppose.
Je n'utiliserais pas non plus l'interrupteur d'inclinaison pour déclencher l'indicateur de batterie car il est trop sensible et provoque un « scintillement ». Un simple interrupteur tactile semble être une bien meilleure idée… juste une réflexion.
Un incontournable :
La plus grande courbe d'apprentissage ici pour moi a été l'effet qu'aurait tout métal ou circuit et un lecteur RFID. J'ai conçu, construit et testé l'ensemble de l'unité d'abord connectée à une alimentation constante. En raison de la conception compacte de l'unité, la batterie a été installée à proximité immédiate du module lecteur RFID. La conséquence…. Aucun scan 😲 À titre temporaire, j'ai enveloppé la batterie dans du ruban isolant électrique qui a fait un « bon » travail. J'ai commandé de la ferrite sur Amazon en guise de Je vous salue Marie et, comme par magie, l'interférence appartenait au passé.
Merci à tous ceux qui ont contribué au projet d'une manière ou d'une autre, @ScruffR pour avoir compris que nous devions tous commencer quelque part et faire preuve d'une extrême patience 🙂 Un immense merci également à @Joe de Particle pour les superbes kits Maker. J'attends avec impatience d'autres projets !!!
Fichiers :
Schéma Eagle - TÉLÉCHARGER
Fichier de tableau Eagle - TÉLÉCHARGER
Génial, non ? Maintenant, comme promis... Vous trouverez ici quelques-unes des questions auxquelles Friedl a aimablement répondu.
Q/ Qu’est-ce qui vous a poussé à vous lancer dans l’écosystème IoT ?
A/ J'ai toujours été passionné de technologie et mon envie de créer de nouvelles choses s'inscrit parfaitement dans le secteur de IoT . Développer de nouvelles choses qui peuvent améliorer la vie est ce que j'aime le plus.
Q/ Pourquoi avez-vous essayé plusieurs plateformes ?
A/ Comme je suis complètement nouveau dans IoT et que je n'aime pas particulièrement le codage, je recherchais une plateforme facile à utiliser et également rentable plutôt que d'écrire la mienne. J'ai trouvé que la plupart des plates-formes étaient conçues en gardant à l'esprit les utilisateurs expérimentés, ce qui rend la tâche très difficile pour quelqu'un qui découvre IoT . Même certains utilisateurs expérimentés risquent de passer trop de temps à configurer un système inutilement compliqué. Comme je me concentre principalement sur le développement de produits, la conception de produits et de PCB, il était impératif que je trouve une solution que je puisse rapidement comprendre et commencer à utiliser.
Q/ Qu’avez-vous appris de chacun d’eux ?
A/ La plupart des plateformes semblent intimidantes à apprendre et très coûteuses si l’on n’y prend pas garde. De faibles coûts initiaux ou des versions « gratuites » peuvent facilement vous inciter à utiliser le produit, mais dès que vous commencerez à diffuser des données en direct, cela s'avérera assez coûteux.
Q/ Pourquoi avez-vous décidé de partir avec Ubidots ?
A/ Ubidots s'est avéré être le meilleur des deux, facile à apprendre, assez peu coûteux et avec une politique d'utilisation équitable des données. En plus de cela, le soutien a été formidable ! L'interface graphique est assez simple à comprendre et l'option d'étiquette personnalisée est intéressante, même si elle est un peu chère.
J'espère vraiment que cette histoire vous incitera à commencer à construire et à bricoler vos propres projets IoT Ubidots pour tirer parti de vos meilleurs efforts pour activer votre processus.