Stap 2: Lezen van RFID-Tags
Nu moeten we onze Arduino instellen om te lezen van RFID-tags. Als u geen Arduino voordat hebt gebruikt of u problemen ondervindt langs de weg, is de officiële introductie pagina erg handig. Je Arduino verbinden met uw computer met een USB-kabel. Als u niet reeds hebt, moet u downloaden en installeren de Arduino ontwikkelen omgeving.We zullen ook willen intall sommige bibliotheken om deze codering minder vervelend. Hebt u Lady AdaFruit van boord, download het hier en hebt u het bestuur van Sparkfun, download de bibliotheek hier opslaan in de omslag van de bibliotheken van uw Arduino (op OSX, zou de standaardmap ~/Documents/Arduino/libraries/ en op Windows, het zou mijn Documents\Arduino\libraries\) (als je problemen met dit hebt, check out Lady AdaFruit van advies. Als u reeds de Arduino omgeving openen voordat het plaatsen van de code in de omslag van Bibliotheken, het nu opnieuw opstarten.
Plaats het RFID-schild op de top van de Arduino. Nu kunnen we aan de code. Alle code u moet kan worden gevonden hier in onze Github repo.
Een nieuwe Arduino schets maken door de toepassing van de Arduino te selecteren en te klikken op het pictogram van de ezelsoren papier, kopieer de code van de link rechtsboven in, en sla het op in je projectmap. Alles wat je hoeft te doen is nu uncomment drie lijnen boven aan het bestand afhankelijk van welke RDID lezer hebt.
Hebt u het bestuur van Sparkfun sm130 RFID, uncomment deze drie blokken:
// #include <SoftwareSerial.h> // #include <sm130.h> // NFCReader rfid(7, 8);
En hebt u het bord Lady Adafruit RFID, uncomment deze drie blokken:
//#include <Wire.h> //#include <Adafruit_NFCShield_I2C.h> //Adafruit_NFCShield_I2C rfid(2, 3);
De rest van de schets is hetzelfde voor beide boards omdat we de sm130 bibliotheek schreven zodat deze overeenkomen met die van de Lady Adafruit bibliotheek. Klik nu op de naar rechts wijzende pijl op de schets voor het laden van de code op de Arduino en begint het te lopen. Om te zien de output, open de seriële monitor door naar bestand -> Hulpmiddelen -> seriële Monitor dan zorg ervoor dat uw baud-rate is ingesteld op 9600 (de vervolgkeuzelijst op de rechterbenedenhoek van de seriële monitor).
Nu, als u uw RFID-kaart op de lezer onttrekt, moet het uitprinten de unieke ID! Awesome.
Ik zal nu de code regel voor regel uitgelegd als je geïnteresseerd bent, of anders u kunt verdergaan met de sectie "Verzenden UUID naar de lokale Server". Laten we beginnen met de invoer code:
Uncomment deze drie regels voor het gebruik van het schild van Sparkfun RFID // Uncomment these three lines to use the Sparkfun RFID shield // #include <SoftwareSerial.h> // #include <sm130.h> // NFCReader rfid(7, 8); // Uncomment these three lines to use the AdaFruit RFID shield //#include <Wire.h> //#include <Adafruit_NFCShield_I2C.h> //Adafruit_NFCShield_I2C rfid(2, 3); // The number of seconds to wait before accepting another tag const uint8_t TIME_DELAY = 2; // Var to keep track of time between tags long lastReadTime = 0; Uncomment deze drie regels voor het gebruik van het schild van AdaFruit RFID // Setup method is called once every time Arduino is restarted void setup(void) { // Start communication with our serial monitor Serial.begin(9600); // Start running the RFID shield rfid.begin(); // Print out a message to make sure Serial is working Serial.println("Initialized!"); Serial.println("Requesting Firmware Version to make sure comm is working..."); // Grab the firmware version uint32_t versiondata = rfid.getFirmwareVersion(); // If nothing is returned, it didn't work. Loop forever if (!versiondata) { Serial.print("Didn't find RFID Shield. Check your connection to the Arduino board."); while (1); } // Got ok data, good enough! Serial.println("Found Version Data. Comm is working."); // Let us know RFID shield is waiting for a tag Serial.println("Waiting for an RFID Card ..."); }
In dit stuk importeert we de Sparkfun bibliotheek of de bibliotheek van de Lady AdaFruit afhankelijk van welke één u uncomment. Van Sparkfun bestuur gebruikt de Software Serial (alias UART) voor communicatie, terwijl de Lady AdaFruit bestuur de draad (A.K.A I2C gebruikt). Vervolgens maken we naar globale variabelen voor het bijhouden van de tijd tussen de tags voor later (om ervoor te zorgen dat het niet houden rapportage uw tag over en als je het dicht bij de lezer houdt). Nu laten we eens kijken naar de installatiemethode:
void loop() { // We will store the results of our tag reading in these vars uint8_t success; uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID uint8_t uidLength; // Length of the UID (4 or 7 bytes depending on ISO14443A card type) // Wait for an ISO14443A type cards (Mifare, etc.). When one is found // 'uid' will be populated with the UID, and uidLength will indicate the length success = rfid.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength); // If we succesfully received a tag and it has been greater than the time delay (in seconds) if (success && (millis() - lastReadTime > (TIME_DELAY * 1000))) { Serial.println("Got a tag!"); // Print out the length Serial.print("Length: "); Serial.print(uidLength, HEX); Serial.print(", ID: "); // Print the ID in hex format rfid.PrintHex(uid, uidLength); Serial.println(""); // Same the last read time lastReadTime = millis(); } }
In dit eerste blok van code voegen we de 'setup'-methode, die een speciale methode die alleen wordt aangeroepen is zodra everytime de Arduino opnieuw is gestart. Bij deze methode beginnen we met Serial die een communicatieprotocol is. We beginnen dan de RFID schild bibliotheek zelf uitgevoerd. Vervolgens, grijpen wij de firmware-versie alleen maar om ervoor te zorgen dat onze Kommunikasie met de Raad van bestuur werkt effectief - zoniet, we gewoon eeuwig. Nu de looping methode:
#include <WiFlyHQ.h> #include <Lifegraph.h> // Wifi Serial connection SoftwareSerial wifiSerial(9,10); // API we'll use to talk to the internet JSONAPI api; /* Change these to match your WiFi network */ const char mySSID[] = "YOUR_NETWORK_NAME"; const char myPassword[] = "YOUR_NETWORK_PASSWORD"; // The host server that handles our request const char host[] = "musicparty.herokuapp.com"; // Unique ID of this Music Party Streaming Device char deviceId[] = "YOUR_OWN_DEVICE_ID_HERE";
De lus methode heet over en weer door de Arduino. Zodra de code is voltooid, begint het opnieuw. In onze methode lus maken we het succes, uid en uidLength variabelen voor het opslaan van de resultaten van een ontdekte tag. Wij vervolgens probeert te lezen van een tag, en als we dat doen, de uid zal worden opgeslagen in de variabele van de uid en de lengte van dat uid zal winkel in uidLength. We gewoon drukt het uit, en nota hoe laat het was uitgeprint om ervoor te zorgen het niet steeds opnieuw afgedrukt.