• Login
    • Search
    • [[global:header.recent]]
    • [[global:header.tags]]
    • [[global:header.popular]]
    • [[global:header.groups]]
    • [[global:header.search]]

    Elechouse PN532 NFC Module V3 for Arduino etc.

    Ideas for using NFC Rings
    26
    113
    235989
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      shagun_8 last edited by

      yeah..the power light is on...i connected vcc --> 5v ; gnd --> gnd ; sda --> A4 ; scl --> A5

      1 Reply Last reply Reply Quote 0
      • Lokki
        Lokki Community Helper last edited by

        That does seem like it should be right, sometimes if sda and scl are swapped you'll get nothing.
        Is your sketch set up for using IIC correctly?

        S 1 Reply Last reply Reply Quote 0
        • S
          shagun_8 @Lokki last edited by

          @Lokki Yeah..i'm using the example of the library provided by elechouse

          1 Reply Last reply Reply Quote 0
          • S
            shagun_8 last edited by

            Still can u send me any of your code..!?

            1 Reply Last reply Reply Quote 0
            • Lokki
              Lokki Community Helper last edited by

              Search the forums, I've left bits and pieces of horrendous code around here before.
              It would actually be better if you show us your code. From a troubleshooting point of view, like.

              1 Reply Last reply Reply Quote 1
              • S
                shagun_8 last edited by Andreas

                #if 0
                #include <SPI.h>
                #include <PN532_SPI.h>
                #include <PN532.h>
                #include <NfcAdapter.h>
                
                PN532_SPI pn532spi(SPI, 10);
                NfcAdapter nfc = NfcAdapter(pn532spi);
                #else
                
                #include <Wire.h>
                #include <PN532_I2C.h>
                #include <PN532.h>
                #include <NfcAdapter.h>
                
                PN532_I2C pn532_i2c(Wire);
                NfcAdapter nfc = NfcAdapter(pn532_i2c);
                #endif
                
                void setup(void) {
                    Serial.begin(9600);
                    Serial.println("NDEF Reader");
                    nfc.begin();
                }
                
                void loop(void) {
                    Serial.println("\nScan a NFC tag\n");
                    if (nfc.tagPresent())
                    {
                        NfcTag tag = nfc.read();
                        tag.print();
                    }
                    delay(5000);
                }
                
                1 Reply Last reply Reply Quote 0
                • Lokki
                  Lokki Community Helper last edited by

                  Okay, for comparison I'm going to copypasta my crappy car starter sketch:

                  int triggerPin1 = 2;
                  int triggerPin2 = 3;
                  int triggerPin3 = 4;
                  int indicatorPin1 = 5;
                  int indicatorPin2 = 6;
                  int indicatorPin3 = 7;
                  int indicatorPin4 = 8;
                  int handbrakePin1 = 9;
                  int carRunState = 0;
                  int handbrakeState = 0;
                   
                    #include <Wire.h>
                    #include <PN532_I2C.h>
                    #include <PN532.h>
                  
                    PN532_I2C pn532i2c(Wire);
                    PN532 nfc(pn532i2c);
                   
                  void setup(void) {
                    pinMode(triggerPin1, OUTPUT);
                    pinMode(triggerPin2, OUTPUT);
                    pinMode(triggerPin3, OUTPUT);
                    pinMode(indicatorPin1, OUTPUT);
                    pinMode(indicatorPin2, OUTPUT);
                    pinMode(indicatorPin3, OUTPUT);
                    pinMode(indicatorPin4, OUTPUT);
                    pinMode(handbrakePin1, INPUT);
                    Serial.begin(115200);
                    Serial.println("Hello! I'm a Car!");
                  
                    nfc.begin();
                  
                    uint32_t versiondata = nfc.getFirmwareVersion();
                    if (! versiondata) {
                      Serial.print(versiondata);
                      Serial.print("PN53x key scanner board not online");
                      while (1); // halt
                    }
                    
                    // Got ok data, report state
                    Serial.print("Reader Online, ");
                   
                    
                    // Set the max number of retry attempts to read from a card
                    // This prevents us from waiting forever for a card, which is
                    // the default behaviour of the PN532.
                    nfc.setPassiveActivationRetries(0xFF);
                    
                    // configure board to read NFC tags
                    nfc.SAMConfig();
                      
                    Serial.println("Waiting for a valid key");
                  }
                  
                  void loop(void) {
                    String ringUid;
                    boolean 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 (NFC Ring, Mifare, etc.).  When one is found
                    // 'uid' will be populated with the UID, and uidLength will indicate
                    // if the uid is 4 bytes (Mifare Classic) or 7 bytes (NFC Ring or Mifare Ultralight)
                    success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0], &uidLength);
                    
                    if (success) {
                      // Display some basic information about the card
                      
                  //    Serial.print("  UID Length: "); Serial.print(uidLength, DEC); Serial.println(" bytes");
                      Serial.print("  UID Value: ");
                      for (uint8_t i = 0; i < uidLength; i++)
                      {
                        Serial.print("..");
                        Serial.print(uid[i], HEX);
                        ringUid += String(uid[i], HEX);
                  
                      }
                      Serial.println(ringUid + "\n");
                      if (ringUid == "xxxxxxxxxxxxxx" || ringUid == "xxxxxxxxxxxxxx" || ringUid == "xxxxxxxxxxxxxx" || ringUid == "xxxxxxxxxxxxxx"){
                        Serial.println("Key accepted!");
                    }
                      
                      
                      if ((ringUid == "xxxxxxxxxxxxxx" || ringUid == "xxxxxxxxxxxxxx" || ringUid == "xxxxxxxxxxxxxx" || ringUid == "xxxxxxxxxxxxxx") && (carRunState == 0)){
                        Serial.println("PERMISSION GRANTED, SYSTEMS ON");
                        digitalWrite(triggerPin3, HIGH);   // sets latching relay trigger on for ignition mode in car to allow start
                        digitalWrite(indicatorPin2, HIGH); //show state, second LED
                        delay(200);                  // waits briefly
                        digitalWrite(triggerPin3, LOW);    // removes latching relay trigger
                        carRunState = carRunState++;
                      }
                      else if ((ringUid == "xxxxxxxxxxxxxx" || ringUid == "xxxxxxxxxxxxxx" || ringUid == "xxxxxxxxxxxxxx" || ringUid == "xxxxxxxxxxxxxx") && (carRunState == 1)){
                        handbrakeState = digitalRead(handbrakePin1); //check if handbrake is on or off
                        if (handbrakeState = 0){//if handbrake is on then safe to crank car, if not then skip this mode entirely
                          Serial.println("ENGINE CRANKING");
                          digitalWrite(triggerPin1, HIGH);   // triggers output for engine starting
                          digitalWrite(indicatorPin3, HIGH); //show state, third LED
                          delay(2000);                  // waits for a second
                          digitalWrite(triggerPin1, LOW);    // removes triggered output 
                          Serial.println("ENGINE CRANKING COMPLETE");
                        }
                        carRunState = carRunState++;     
                      }
                      else if ((ringUid == "xxxxxxxxxxxxxx" || ringUid == "xxxxxxxxxxxxxx" || ringUid == "xxxxxxxxxxxxxx" || ringUid == "xxxxxxxxxxxxxx") && (carRunState > 1)){
                        Serial.println("SYSTEM OFF, SLEEP TIME");
                        digitalWrite(triggerPin2, HIGH);   // Trigger latching relay to reset for vehicle OFF
                        digitalWrite(indicatorPin1, HIGH); //show state, LED1 on
                        digitalWrite(indicatorPin2, LOW); //LED2 off
                        digitalWrite(indicatorPin3, LOW); //LED3 off
                        delay(200);                  // waits briefly      
                      digitalWrite(triggerPin2, LOW);    // Removes latching relay reset trigger
                      delay(3000);
                      carRunState = 0;
                      digitalWrite(indicatorPin1, LOW); //LED1 off
                    }
                    }
                  }
                  
                  1 Reply Last reply Reply Quote 0
                  • Lokki
                    Lokki Community Helper last edited by

                    You see at the start where I just chopped out the mess and left it with the I2C stuff? Maybe try doing something like that and see what happens.

                    1 Reply Last reply Reply Quote 0
                    • S
                      shagun_8 last edited by

                      That's also not working...same error..!!

                      1 Reply Last reply Reply Quote 0
                      • Lokki
                        Lokki Community Helper last edited by

                        Ok, so the code definitely works, and definitely works on an UNO with a PN532 V3 set to I2C mode.
                        So, logically the only things that could be different in your case are the I2C wiring and the I2C mode setting on the board you have.
                        Double check that your board is set to function in I2C mode, then double check your wires, maybe try swapping the two data wires around to see if that helps.

                        1 Reply Last reply Reply Quote 0
                        • S
                          shagun_8 last edited by

                          No change..still no success....same error

                          1 Reply Last reply Reply Quote 0
                          • Lokki
                            Lokki Community Helper last edited by

                            Do you think you could take a picture of your setup?

                            S 1 Reply Last reply Reply Quote 0
                            • S
                              shagun_8 @Lokki last edited by

                              @Lokki
                              http://s33.postimg.org/l4ynraf7j/IMG_20160531_WA0004.jpg

                              1 Reply Last reply Reply Quote 0
                              • Lokki
                                Lokki Community Helper last edited by

                                Ah, there's your problem - it's not set to I2C mode.

                                See the little bank of two physical switches right near the I2C connection points? switch 1 needs to be in the UP position for on.

                                1 Reply Last reply Reply Quote 2
                                • Lokki
                                  Lokki Community Helper last edited by

                                  How'd you go, @shagun_8 ? Did that work for you?

                                  S M 2 Replies Last reply Reply Quote 0
                                  • S
                                    shagun_8 @Lokki last edited by

                                    @Lokki Thanks for your help...now its working

                                    1 Reply Last reply Reply Quote 1
                                    • johnyma22
                                      johnyma22 NFC Ring Team last edited by

                                      Great job @Lokki !! :)

                                      1 Reply Last reply Reply Quote 2
                                      • S
                                        shagun_8 last edited by

                                        One more thing...the module is not reading my nfc tags having Topaz 512 chip...can u please tell me the module is compatible with which nfc tags other than mifare?

                                        1 Reply Last reply Reply Quote 0
                                        • Lokki
                                          Lokki Community Helper last edited by

                                          No worries at all, dude. I like it best when things work!
                                          TBH I've only really used my gear with mifare classics and NTAG based tags/fobs/rings/etc. (I've never used a Topaz in any form.)

                                          From the manual it says this:

                                          RFID reader/writer mode support
                                           Mifare 1k, 4k, Ultralight, and DesFire cards
                                           ISO/IEC 14443-4 cards such as CD97BX, CD light, DesFire, P5CN072 (SMX)
                                           Innovision Jewel cards such as IRT5001 card
                                           FeliCa cards such as RCS_860 and RCS_854

                                          I have found though that your mileage may vary as to where and how well you read some things. You might need to play around with it a bit to get best results.

                                          1 Reply Last reply Reply Quote 1
                                          • S
                                            shagun_8 last edited by Andreas

                                            When I try to write on the mifare classic......the serial monitor shows....block authentication failed for 4..what to do?

                                            CODE:

                                            #include <Wire.h>
                                            #include <PN532_I2C.h>
                                            #include <PN532.h>   // The following files are included in the libraries Installed
                                            #include <NfcAdapter.h>
                                            
                                            PN532_I2C pn532_i2c(Wire);
                                            NfcAdapter nfc = NfcAdapter(pn532_i2c);  // Indicates the Shield you are using
                                            
                                            void setup() {
                                                Serial.begin(9600);
                                                Serial.println("NFC Tag Writer"); // Serial Monitor Message
                                                nfc.begin();
                                            }
                                            
                                            void loop() {
                                                Serial.println("\nPlace an NFC Tag that you want to Record these Messages on!"); // Command for the Serial Monitor
                                                if (nfc.tagPresent()) {
                                                    NdefMessage message = NdefMessage();
                                                    message.addTextRecord("Abc"); // Text Message you want to Record
                                                            boolean success = nfc.write(message);
                                                    if (success) {
                                                        Serial.println("Good Job, now read it with your phone!"); // if it works you will see this message 
                                                    } else {
                                                        Serial.println("Write failed"); // If the the rewrite failed you will see this message
                                                    }
                                                }
                                                delay(10000);
                                            }
                                            Yes you can wrap the code with 3 backticks.
                                            
                                            
                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post