Проблема «Не найдена плата PN53x» Считыватель карт Arduino NFC
Я использую RFID-модуль elechouse PN532 с Wemos D1 mini в Arduino IDE. Я использую пример ISO1443a_uid из библиотеки elechouse. Все работает нормально, если я подключаю USB-кабель к wemos и демо-версия запускается. Но если я нажму кнопку сброса на Wemos D1 mini, серийный номер выведет этот вывод:
load 0x4010f000, len 1384, room 16
tail 8
chksum 0x2d
csum 0x2d
v0fd86a07
~ld
Hello!
Didn't find PN53x board
Иногда все работает нормально, но в основном возникает эта ошибка.
Вот пример кода (я использую режим I2C):
* When the number after #if set as 1, it will be switch to SPI Mode*/
if 0
#include <SPI.h>
#include <PN532_SPI.h>
#include "PN532.h"
PN532_SPI pn532spi(SPI, 10);
PN532 nfc(pn532spi);
* When the number after #elif set as 1, it will be switch to HSU Mode*/
elif 0
#include <PN532_HSU.h>
#include <PN532.h>
PN532_HSU pn532hsu(Serial1);
PN532 nfc(pn532hsu);
* When the number after #if & #elif set as 0, it will be switch to I2C Mode*/
else
#include <Wire.h>
#include <PN532_I2C.h>
#include <PN532.h>
#include <NfcAdapter.h>
PN532_I2C pn532i2c(Wire);
PN532 nfc(pn532i2c);
endif
oid setup(void) {
Serial.begin(115200);
Serial.println("Hello!");
pinMode(D2,INPUT_PULLUP);
pinMode(D1,INPUT_PULLUP);
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();
Serial.println("Waiting for an ISO14443A card");
oid loop(void) {
boolean success;
uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Буфер для хранения возвращенного UID
uint8_t uidLength; // Длина UID (4 или 7 байт в зависимости от типа карты ISO14443A)
// Ждем карты типа ISO14443A (Mifare и т.п.). Когда один найден
// 'uid' будет заполнен UID, а uidLength будет указывать
// если uid равен 4 байтам (Mifare Classic) или 7 байтам (Mifare Ultralight)
success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0], &uidLength);
if (success) {
Serial.println("Found a 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(" 0x");Serial.print(uid[i], HEX);
}
Serial.println("");
// Подождите 1 секунду, прежде чем продолжить
delay(1000);
}
else
{
// PN532, вероятно, истекло время ожидания карты
Serial.println("Timed out waiting for a card");
}
Что не так? почему не всегда работает после сброса?
@user53213, 👍0
Обсуждение1 ответ
ИЗМЕНИТЬ: Попробуйте использовать библиотеку Elechouse, у меня сработало лучше.
Это может быть неактуально, но я хотел поделиться.
У меня была похожая проблема, не связанная с кодом скетча.
Поэтому убедитесь:
Подключите провода к модулю NFC под углом 90 градусов – должны быть включены угловые разъемы. Также провода должны быть над антенной - белая полоса.
Под модулем NFC не должно быть проводов или они должны находиться на значительном расстоянии.
Припаянные провода лучше работают с модулем NFC.
- Как читать и записывать EEPROM в ESP8266
- Как исправить: Invalid conversion from 'const char*' to 'char*' [-fpermissive]
- ошибка: espcomm_upload_mem failed при загрузке скетча
- Как определить размер Flash?
- Несколько клиентских серверов через Wi-Fi
- Передача функции-члена класса в качестве аргумента
- В ESP-12E NodeMCU, какой выход PIN A0?
- Esp8266 Vin контакт
У меня был один из тех
elechouse
PN532, который сидел в ящике стола и ждал, пока появится нужный проект – вау!! они точно ненадежны в режиме I2C - немного меньше, когда я добавил подтягивающие резисторы к SCL и SDA - но в лучшем случае 50/50 - никогда не было проблем с этим в режиме SPI, @Jaromanda XI2C на PN532, по крайней мере, с использованием библиотеки, которую вы используете, не очень надежен - даже с библиотекой adafruit и использованием контактов IRQ и RESET вероятность обнаружения платы составляет 50/50. Я перепробовал много вещей, чтобы заставить свою работать, и пришел к выводу, что мне следует использовать либо режим SPI, либо режим HSU — они на 100% надежны — и, поскольку мне когда-либо нужно будет только читать теги NFC, я думаю, что я буду придерживаться MFRC522, @Jaromanda X