Skocz do zawartości

ESP8266 + czytnik RFID PN532 + czytnik mikro SD - urządzenia nie pracują ze sobą razem


merinum

Pomocna odpowiedź

witam

szanowni Państwo,

Staram się połączyć na ESP8266 czytnik mikro SD oraz czytnika RFID PN532 po SPI i napotykam na nierozwiązywalny dla mnie problem - po zainstalowaniu wszystkich bibliotek zarówno dla czytnika SD jak i RFID wszystko się instaluje poprawnie: jest informacja o poprawnej inicjalizacji obu urządzeń, wtedy mogę bez problemu skanować i odczytywać dane z RFID skanując kartę, ale w momencie, w którym odznaczę zahaszowane pola dotyczące odczytu z karty pewnych danych ("pobieranie danych z karty SD") to odczyt z SD się realizuje, ale niestety później nie ma już opcji by czytnik RFID działał, czy możecie mnie naprowadzić jak rozwiązać ten problem bo walczę z tym już któryś dzień i nic sensownego nie wymyśliłem. z góry dziekuje za pomoc, poniżej kod:

#include <SPI.h>
#include <SD.h>
#include <PN532_SPI.h>
#include "PN532.h"
#define SD_PIN D3

PN532_SPI pn532spi(SPI, D4); //było 10
PN532 nfc(pn532spi);
File myFile;

char c[59];
int i = 0;
int znaki = 59;
char zerowanie;
String sd_server_token = "";
String server_token = "";

void setup() {
  // Inicjalizacja portu szeregowego
  Serial.begin(115200);
  delay(1000);
  // Inicjalizacja czytnika SD
  if (!SD.begin(SD_PIN)) {
    Serial.println("SD initialization failed!");
    while (1);
  }
  else {
    Serial.println("SD initialization done.");
  }
  // Inicjalizacja czytnika NFC
  nfc.begin();
  uint32_t versiondata = nfc.getFirmwareVersion();
  if (!versiondata)
  {
    Serial.print("PN532 initialization failed!");
    while (1);
  }
  else {
    Serial.println("PN532 initialization done.");
  }
  // Konfiguracja modulu do odczytu znacznikow RFID
  nfc.SAMConfig();

//    //pobieranie danych z karty SD
//    digitalWrite(SD_PIN, LOW);
//    if (SD.exists("server_token.txt")) {
//      myFile = SD.open("server_token.txt");
//      if (myFile) {
//        while (myFile.available()) {
//          c[i] = myFile.read();
//          i++;
//        }
//        myFile.close();
//        sd_server_token = c;
//        sd_server_token.trim();
//        server_token = sd_server_token;
//        Serial.print("sd_server_token: ");
//        Serial.println(sd_server_token);
//        for (int i = 0; i < znaki; i++) {
//          c[i] = zerowanie;
//        }
//        i = 0;
//      }
//    }
//    digitalWrite(SD_PIN, HIGH);
//    //pobieranie danych z karty SD

  Serial.println("Oczekiwanie na kartę RFID...");
}

void loop() {
  // Status
  uint8_t success;

  // Bufor przechowujacy unikatowy identyfikator
  uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 };

  // Dlugosc unikatowego identyfikatora.
  uint8_t uidLength;

  // Proba odczytania znacznika
  success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength);

  // Jesli sukces odczytu
  if (success) {

    // wyswietlenie unikatowego identyfikatora
    Serial.print("UID: ");
    nfc.PrintHex(uid, uidLength);

    // wyswietlenie typu znacznika
    if (uidLength == 4) {
      uint8_t keya[6] = { 0xD3, 0xF7, 0xD3, 0xF7, 0xD3, 0xF7 };
      int kod_int[] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
      String kod_string = "";
      int kod_length = 0;
      uint8_t data1[16];
      uint8_t data2[16];

      success = nfc.mifareclassic_AuthenticateBlock(uid, uidLength, 4, 0, keya);
      if (success) {
        success = nfc.mifareclassic_ReadDataBlock(4, data1);
        success = nfc.mifareclassic_AuthenticateBlock(uid, uidLength, 5, 0, keya);
        success = nfc.mifareclassic_ReadDataBlock(5, data2);

        for (int i = 11; i < 16; i++) {
          kod_int[i - 11] = data1[i] - 48;
        }
        for (int i = 0; i < 4; i++) {
          kod_int[i + 5] = data2[i] - 48;
        }
        for (int i = 0; i < 9; i++) {
          kod_string += kod_int[i];
        }

        kod_length = kod_string.length();
        if (kod_length == 9) {
          nfc.PrintHexChar(data1, 16);
          nfc.PrintHexChar(data2, 16);
          Serial.print("ilość znaków kodu: ");
          Serial.println(kod_length);
          Serial.print("numer karty NFC: ");
          Serial.println(kod_string);
        }
        else {
          Serial.println("karta ma niewłaściwy format");
        }
      }
      else {
        Serial.println("karta jest sformatowana");

      }
    }
  }
  delay(1000);
}

 

Edytowano przez merinum
Link do komentarza
Share on other sites

Zmień przy pinMode z D4 na 4 (estetyka). Nie widzę polecenia SD.close(); po każdej sesji odczytywania sesja z kartą musi być tym poleceniem zakończona. Sprawdź, czy karta SD działa( i lepiej jak jest sformatowana na fat) 

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.