Подключение ESP8266 и PN532

Я пробую пример Android Hce в этой библиотеке PN532. Я не могу найти в коде, как установить адреса SDA и SCL, поэтому я попытался подключить их к контактам CLK и SD0. Серийный монитор выдает мне «Не найдена плата PN53x». Кто-нибудь может мне помочь?

    #if 0
      #include <SPI.h>
      #include <PN532_SPI.h>
      #include "PN532.h"

      PN532_SPI pn532spi(SPI, 10);
      PN532 nfc(pn532spi);
    #elif 1
      #include <PN532_HSU.h>
      #include <PN532.h>

      PN532_HSU pn532hsu(Serial1);
      PN532 nfc(pn532hsu);
    #else 
      #include <Wire.h>
      #include <PN532_I2C.h>
      #include <PN532.h>
    #endif

    void setup()
    {    
        Serial.begin(115200);
        Serial.println("-------Peer to Peer HCE--------");

        nfc.begin();

        uint32_t versiondata = nfc.getFirmwareVersion();
        if (! versiondata) {
          Serial.print("Didn't find PN53x board");
          while (1); // остановка
        }

        // Данные в порядке, распечатайте их!
        Serial.print("Found chip PN5"); Serial.println((versiondata>>24) & 0xFF, HEX); 
        Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC); 
        Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC);

        // Установить максимальное количество повторных попыток чтения с карты
        // Это предотвратит вечное ожидание карты, которая
        // поведение PN532 по умолчанию.
        //nfc.setPassiveActivationRetries(0xFF);

        // настроить плату для чтения RFID-меток
        nfc.SAMConfig();
    }

    void loop()
    {
      bool success;

      uint8_t responseLength = 32;

      Serial.println("Waiting for an ISO14443A card");

      // устанавливаем щит в inListPassiveTarget
      success = nfc.inListPassiveTarget();

      if(success) {

         Serial.println("Found something!");

        uint8_t selectApdu[] = { 0x00, /* CLA */
                                  0xA4, /* INS */
                                  0x04, /* P1  */
                                  0x00, /* P2  */
                                  0x07, /* Length of AID  */
                                  0xF0, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, /* AID defined on Android App */
                                  0x00  /* Le  */ };

        uint8_t response[32];  

        success = nfc.inDataExchange(selectApdu, sizeof(selectApdu), response, &responseLength);

        if(success) {

          Serial.print("responseLength: "); Serial.println(responseLength);

          nfc.PrintHexChar(response, responseLength);

          do {
            uint8_t apdu[] = "Hello from Arduino";
            uint8_t back[32];
            uint8_t length = 32; 

            success = nfc.inDataExchange(apdu, sizeof(apdu), back, &length);

            if(success) {

              Serial.print("responseLength: "); Serial.println(length);

              nfc.PrintHexChar(back, length);
            }
            else {

              Serial.println("Broken connection?"); 
            }
          }
          while(success);
        }
        else {

          Serial.println("Failed sending SELECT AID"); 
        }
      }
      else {

        Serial.println("Didn't find anything!");
      }

      delay(1000);
    }

    void printResponse(uint8_t *response, uint8_t responseLength) {

       String respBuffer;

        for (int i = 0; i < responseLength; i++) {

          if (response[i] < 0x10) 
            respBuffer = respBuffer + "0"; //Добавляет ведущие нули, если шестнадцатеричное значение меньше 0x10

          respBuffer = respBuffer + String(response[i], HEX) + " ";                        
        }

        Serial.print("response: "); Serial.println(respBuffer);
    }

    void setupNFC() {

      nfc.begin();

      uint32_t versiondata = nfc.getFirmwareVersion();
      if (! versiondata) {
        Serial.print("Didn't find PN53x board");
        while (1); // остановка
      }

      // Данные в порядке, распечатайте их!
      Serial.print("Found chip PN5"); Serial.println((versiondata>>24) & 0xFF, HEX); 
      Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC); 
      Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC);

      // настроить плату для чтения RFID-меток
      nfc.SAMConfig(); 
    } 

, 👍0

Обсуждение

Для I2C по умолчанию используются контакты, определенные в конфигурации вашей платы — возможно, контакты 4 и 5 (для зеркалирования A4 и A5 на Uno). Однако ваш код настроен на использование серийного номера, а не I2C., @Majenko

Я так сомневался, не могли бы вы сказать мне точную проводку для серийного номера? (Или для чего угодно, чтобы этот код работал). Я хотел бы даже знать, как получить эту информацию, обычно я нахожу распиновку в разделе определения (как это сделать), @Maray97

Для последовательного подключения подключите его к контактам UART1 TX и RX. Где они находятся, зависит от того, какой у вас модуль., @Majenko

Я подключил SCK к CLK (на ESP8266), MSO и MOSI подключил к D6 и D7. Как мне настроить это в коде? Я пытался изменить SPI, но это не сработало., @Maray97

Что и куда вы подключаете и какой код используете, зависит от того, какой у вас модуль PN532 и какой у вас модуль ESP8266., @Majenko

У меня есть модуль Elechouse PN532 V3 и NodeMCU., @Maray97

[Этот?](https://www.elechouse.com/elechouse/index.php?main_page=product_info&cPath=90_93&products_id=2205), @Majenko


1 ответ


Лучший ответ:

1

Решено. Установите #if 1 и #elif 0. Связанный: ССК на D5 МИСО до D6 МОСИ к D7 SS на D0 (и установите его на pn532spi)

,