Lecteur RFID mobile - un projet Maker Kit utilisant Particle et Ubidots

Ces dernières années, Ubidots s'est associé à Particle pour atteindre un objectif ultime : permettre la création rapide, facile et efficace de IoT .

Aujourd'hui, nous sommes fiers d'affirmer que nos deux produits contribuent à accélérer le déploiement IoT à l'échelle mondiale . Des entrepreneurs aux start-ups, en passant par les grandes et petites entreprises, nous les aidons à bâtir un avenir axé sur les données.

Récemment, Friedl s'est lancé le défi de créer un IoT de A à Z. Au départ, ses connaissances edge le sujet étaient limitées. Cependant, grâce aux recherches qu'il a menées – et à de nombreuses vidéos YouTube –, il a acquis la confiance nécessaire pour utiliser divers outils et concrétiser son objectif : créer un lecteur RFID mobile sans être un expert IoT

Après avoir obtenu ce résultat exceptionnel, nous avons contacté Friedl pour le féliciter et tirer des enseignements de son expérience. Nous souhaitions également partager cette histoire avec la communauté Ubidots , car nous pensons qu'elle est source d'inspiration et d'apprentissage.

À la lumière de ces remarquables réalisations, mon entretien explorera le processus de développement de Friedl, les techniques qu'il a utilisées pour atteindre son objectif, et d'autres leçons précieuses.

L' article original se trouve sur Particle Community . Friedl l'a également partagé avec Ubidots .

Écrit par : friedl_1977

Pour mon premier projet, j'ai entrepris de construire un lecteur RFID mobile envoyant des données en direct vers MySQL, Google Sheets ou Ubidots via des webhooks.

Note:

Il ne s'agit pas d'un tutoriel à proprement parler, mais plutôt d'une présentation du produit. Ayant bénéficié d'une aide précieuse sur le forum Particle , j'ai décidé de publier mes fichiers Eagle et mon code afin de les rendre accessibles à tous ceux qui souhaiteraient les utiliser.

Je suppose que vous possédezedge connaissances de base de l'environnement Particle et des webhooks, et que vous avez configuré votre compte et vos appareils dans la console Particle . Dans le cas contraire, veuillez le faire avant de tenter cette compilation.

Le résumé :

Conception d'un scanner RFID véritablement sans fil (mobile) destiné à scanner des cartes RFID, à capturer les UID de ces cartes et à les envoyer soit ;

Nomenclature des matériaux :

  1. Module lecteur de cartes MFRC522 à 3 emplacements
  2. Batterie LiPo 3,7 V 1
  3. Module de batterie 1
  4. LM394N 1
  5. Lot de LED 0603 pour indicateur de batterie
  6. 2 LED RVB pour l'état du système et l'état de lecture de la carte
  7. Particle Photon
  8. Interrupteur à glissière - Alimentation principale
  9. d' inclinaison 1
  10. Circuit imprimé sur mesure (de PCBWAY ou similaire )
  11. Boîtier sur mesure
  12. Diverses résistances 0603
  13. Ferrite 2 !!!

Avant toute chose :

Si vous êtes comme moi, un simple boîtier prototype générique ne suffira pas. J'ai donc fait un petit effort supplémentaire, j'ai appris à maîtriser Rhinoceros et j'ai conçu un boîtier simple, mais élégant (du moins, c'est ce que je pensais), qui mettrait en valeur le Particle Photon et quelques autres composants.

De plus, j'ai décidé de ne pas utiliser de plaque d'essai standard car je déteste les fils. J'ai inclus une photo de ma première tentative de création d'un circuit imprimé « esthétique » avec une plaque d'essai et des fils de connexion, mais après quelques heures, j'ai compris que ça ne fonctionnerait pas. Nouvelle étape d'apprentissage : j'ai fait des recherches sur Google et passé quelques heures sur YouTube pour finalement me familiariser avec Autodesk Eagle. Ça valait vraiment le coup.

***La dernière image montre le circuit imprimé entièrement assemblé, la LED d'état indiquant « OK », ainsi que le LM3914N en fonctionnement, indiquant une batterie chargée à environ 90 % (7 LED sur 8).

J'ai soumis les fichiers Gerber à PCBWAY et en moins d'une semaine, mes nouveaux circuits imprimés personnalisés étaient prêts pour l'assemblage.

L'essentiel :

Maintenant, le codage : c'est la partie qui me pose le plus de problèmes, mais grâce à l'aide précieuse de quelques personnes sur les forums Particle et Hackster, j'ai pu élaborer le code ci-dessous. Ce n'est sans doute pas le code le plus élégant qui soit, mais il fonctionne. N'hésitez donc 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 : Lecture des UID à partir de cartes RFID et envoi via webhooks vers UbiDots, une base de données MySQL ou Google Sheets // Remerciements : Un grand merci à la communauté Particle pour son aide précieuse qui a rendu ce projet possible ! // Firmware : V2.1.1 //Mode système// - Commentez cette ligne si vous configurez le Wi-Fi via l'application Particle et n'avez pas besoin de vous connecter à un autre réseau sans fil par la suite. //SYSTEM_MODE(SEMI_AUTOMATIC); // Cette instruction #include a été ajoutée automatiquement par l'IDE Particle . #include "RFID.h" #include <Ubidots.h> /* Définition des broches utilisées pour les broches SS (SDA) et RST (réinitialisation) pour le SPI matériel et logiciel */ #define SS_PIN A2 #define RST_PIN D2 /* Définition des broches utilisées pour les broches DATA OUT (MOSI), DATA IN (MISO) et CLOCK (SCK) pour le SPI logiciel uniquement */ #define MOSI_PIN D3 #define MISO_PIN D4 #define SCK_PIN D5 // Initialisation du démarrage RGB - La LED RGB et le buzzer sont utilisés comme indicateurs d'état du système int redPin = D6; int greenPin = D1; int bluePin = D0; int buzzPin = D7; // Initialisation RGB END /* Création d'une instance de la bibliothèque RFID */ #if defined(_USE_SOFT_SPI_) RFID RC522(SS_PIN, RST_PIN, MOSI_PIN, MISO_PIN, SCK_PIN); // SPI logiciel #else RFID RC522(SS_PIN, RST_PIN); // SPI matériel #endif //const char* WEBHOOK_NAME = "rfid_uid"; const char* WEBHOOK_NAME = "Ubidots"; Ubidots ubidots("webhook", UBI_PARTICLE); void setup() { Serial.begin(9600); // WiFi.listen(); pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); pinMode(buzzPin, OUTPUT); // Configuration des identifiants pour une nouvelle connexion WiFi /* Cette section est nécessaire uniquement si vous souhaitez vous connecter à un nouveau réseau WiFi après la configuration initiale. Cela ne fonctionnera que si les identifiants WiFi actuels ont été effacés. Le code s'exécutera UNE SEULE FOIS au démarrage et définira les nouveaux identifiants spécifiés. Une fois les nouveaux identifiants définis, ce code ne s'exécutera plus. */ WiFi.on(); if (!WiFi.hasCredentials()) { WiFi.setCredentials("SSID", "PASSWORD", WPA2, WLAN_CIPHER_AES); } WiFi.connect(); waitUntil(WiFi.ready); Particle.connect(); #if !defined(_USE_SOFT_SPI_) /* Activer l'interface SPI matérielle */ SPI.setDataMode(SPI_MODE0); SPI.setBitOrder(MSBFIRST); SPI.setClockDivider(SPI_CLOCK_DIV8); SPI.begin(); #endif /* Initialisation du lecteur RFID */ RC522.init(); delay(5000); digitalWrite(bluePin, HIGH); digitalWrite(greenPin, HIGH); digitalWrite(redPin, LOW); } void loop() { /* Compteur de boucle temporaire */ uint8_t i; /* Une carte a-t-elle été détectée ? */ if (RC522.isCard()) { /* Si oui, récupérer 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 = le nom de votre webhook str = les données que vous souhaitez publier PRIVÉ ou PUBLIC */ // Particle("RFID_WP", str, PRIVATE); // Publier les données dans la base de données WordPress // Particle("XLS", str, PRIVATE); // Publier les données dans Google Sheets Serial.print(str); /* Ajoute des paires clé-valeur de contexte */ ubidots("UID", str); char* context = (char *) malloc(sizeof(char) * 60); /* Construit le contexte avec le tableau ci-dessus à envoyer à Ubidots */ ubidots(context); ubidots("UID", 1, context); // À modifier selon votre nom de variable bool bufferSent = false; bufferSent = ubidots(WEBHOOK_NAME, PUBLIC); // Utilisera les webhooks particle pour envoyer des données //} // - ESSAYER Ubidots - // // digitalWrite(buzzPin, HIGH); delay(500); digitalWrite(buzzPin, LOW); digitalWrite(bluePin, LOW); delay(750); digitalWrite(bluePin, HIGH); } else 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, LOW); digitalWrite(greenPin, LOW); digitalWrite(redPin, HIGH); // digitalWrite(buzzPin, HIGH); delay(1000); digitalWrite(bluePin, HIGH); digitalWrite(greenPin, HIGH); digitalWrite(redPin, LOW); digitalWrite(buzzPin, LOW); } delay(500); }

Faces avant :

Grâce à la fonction webhook de la console Particle , j'ai pu diffuser le code sans problème quasiment partout. Si vous maîtrisez PHP et MySQL, vous pouvez écrire votre propre script côté serveur, mais pour les débutants comme moi, je recommande les deux services suivants :

Ces deux solutions diffèrent considérablement ; il est donc conseillé de les examiner toutes les deux afin de déterminer laquelle convient le mieux à vos besoins. En résumé, si vous souhaitez que vos données soient publiées en direct à l'emplacement de votre choix, Zapier (ou un service similaire) est la solution idéale. Si le stockage des données sur un serveur tiers ne vous pose pas de problème, Ubidots est une option beaucoup plus économique (coût par point de données) et offre en plus des widgets pratiques pour présenter vos données graphiquement. Vous trouverez ci-joint une capture d'écran d'un exemple Dashboard que j'ai créé avec Ubidots .

Avec le recul :

Au départ, je pensais que la meilleure solution était de concevoir un indicateur de batterie externe au microcontrôleur, car il fonctionnerait indépendamment et libérerait des broches numériques précieuses. Cependant, l'inconvénient est que, sans signal analogique envoyé au microcontrôleur, il est impossible d'afficher l'autonomie de la batterie sur un dashboard. Le LM3914N nécessite également des calculs pour définir les tensions de référence et déterminer les résistances à utiliser en fonction de la différence de tension entre l'état « chargé » et l'état « déchargé ». Il est important de noter que, pour des raisons pratiques, il est préférable de travailler avec une tension de 3,1 V lorsque la batterie est déchargée, car la plupart des composants ne fonctionnent pas en dessous de 3 V ou présentent un comportement erratique. C'est un peu comme dire : « Six contre un ».

Je n'utiliserais plus non plus le commutateur d'inclinaison pour activer l'indicateur de batterie, car il est trop sensible et provoque un scintillement. Un simple interrupteur tactile me semble bien plus judicieux… c'est juste une suggestion.

Incontournable :

La principale difficulté que j'ai rencontrée ici a été de comprendre l'influence de tout métal ou circuit sur un lecteur RFID. J'ai conçu, construit et testé l'ensemble du dispositif, d'abord branché sur une alimentation continue. Du fait de sa conception compacte, la batterie était installée très près du module lecteur RFID. Résultat : aucune lecture 😲. En attendant, j'ai enveloppé la batterie dans du ruban isolant, ce qui a fonctionné à peu près correctement. J'ai ensuite commandé de la ferrite sur Amazon, en dernier recours, et comme par magie, les interférences ont disparu.

Merci à tous ceux qui ont contribué au projet de près ou de loin, et à @ScruffR pour sa compréhension (nous avons tous dû commencer quelque part) et son immense patience 🙂 Un grand merci également à @Joe de Particle pour les superbes kits de création. Vivement les prochains projets !

Fichiers :

Schéma Eagle - TÉLÉCHARGER

Fichier Eagle Board - TÉLÉCHARGER


Génial, non ? Bon, comme promis… Vous trouverez ici quelques-unes des questions auxquelles Friedl a gentiment répondu.

Q/ Qu'est-ce qui vous a poussé à vous lancer dans l'écosystème IoT ?

A/ J'ai toujours été passionné par la technologie et mon désir de créer de nouvelles choses s'inscrit parfaitement dans le secteur IoT . Ce qui me plaît le plus, c'est de développer des solutions qui améliorent la vie.

Q/ Pourquoi avez-vous essayé plusieurs plateformes ?

Étant totalement novice en matière d' IoT et peu à l'aise avec la programmation, je recherchais une plateforme simple d'utilisation et économique, plutôt que de développer ma propre solution. J'ai constaté que la plupart des plateformes étaient conçues pour des utilisateurs expérimentés, ce qui les rend très difficiles à appréhender pour un IoT. Même certains utilisateurs expérimentés peuvent trouver la configuration de systèmes inutilement complexes trop chronophage. Mon activité principale étant le développement de produits, la conception de produits et de circuits imprimés, il était essentiel pour moi de trouver une solution que je puisse comprendre et utiliser rapidement.

Q/ Qu'avez-vous appris de chacun d'eux ?

A/ La plupart des plateformes semblent complexes à appréhender et très coûteuses si l'on n'y prend pas garde. Leurs faibles coûts initiaux ou leurs versions « gratuites » peuvent facilement vous inciter à utiliser le produit, mais dès que vous commencez à diffuser des données en direct, cela s'avère très onéreux.

Q/ Pourquoi avez-vous décidé de choisir Ubidots?

A/ Ubidots s'est avéré être le meilleur des deux mondes : facile à prendre en main, peu coûteux et avec une politique d'utilisation des données respectueuse de l'environnement. De plus, le support était excellent ! L'interface graphique est intuitive et l'option de personnalisation des étiquettes est intéressante, même si elle est un peu onéreuse.


J'espère sincèrement que cette histoire vous inspirera à commencer à construire et à expérimenter vos propres IoT de différents types, et mieux encore, nous espérons que vous utiliserez Ubidots pour optimiser vos efforts et faciliter votre processus.