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

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.