Данные из RC522 в базу данных Firebase в реальном времени

#include<ESP8266WiFi.h>
#include<SPI.h>
#include "MFRC522.h"
#define RST_PIN D3
#define SS_PIN D4
MFRC522 mfrc522(SS_PIN, RST_PIN);

void setup() {
  Serial.begin(9600);
  SPI.begin();
  mfrc522.PCD_Init();
}

void loop() {
  if ( !mfrc522.PICC_IsNewCardPresent() ) {
    delay(50);
    return;
  }

  if ( !mfrc522.PICC_ReadCardSerial() ) {
    delay(50);
    return;
  }

  Serial.print(F("Card UID: "));
  dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size);
  Serial.println();
}

void dump_byte_array(byte *buffer, byte bufferSize) {
  for ( byte i = 0; i< bufferSize; i++ ) {
    Serial.print(buffer[i] < 0x10 ? " 0" : " ");
    Serial.print(buffer[i], HEX);
  }
}

Я могу получить уникальный идентификатор RFID-метки & карта. Но теперь проблема в том, как я могу отправить уникальный идентификатор из ESP8266 в базу данных Firebase в реальном времени.

Являются ли генерируемые шестнадцатеричные значения уникальными? или они что-то другое? Потому что в некоторых видеороликах на YouTube я видел, как люди использовали только цифры в качестве уникального идентификатора от RFID, чтобы различать 2 карты или метки.

Соединение Wi-Fi и аутентификация firebase устанавливаются индивидуально, но проблема заключается в уникальном идентификационном номере.

, 👍0


1 ответ


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

0

"UID" карты должен быть уникальным. Большинство чипов RFID также имеют блоки пространства для чтения/записи, но некоторые системы используют только UID чипа в качестве полного идентификатора.

Возможно, вы столкнетесь с RFID-чипами, в которых в качестве UID используются случайные байты, и в этом случае существует вероятность дублирования. В зависимости от количества возможных карт, которые будут использоваться в вашей системе, это может или не может быть большим беспокойством для вас. Если это вызывает большое беспокойство, вы можете использовать реальную память на чипах RFID для хранения данных вашего идентификатора пользователя.

Относительно HEX и чисел. Шестнадцатеричный формат — это всего лишь один из способов представления чисел. Ваш код:

Serial.print(buffer[i], HEX);

указывает команде печати взять байт из buffer[i] и распечатать его значение в шестнадцатеричном формате. Вы можете заменить HEX на DEC, чтобы вместо этого увидеть значение с основанием 10 (десятичное). Фактические биты внизу будут такими же — это всего лишь один из способов отображения/представления базового числа.

Один байт (8 бит) данных может быть представлен в десятичном виде как числа от 0 до 255. Тот же байт может быть представлен в шестнадцатеричном формате как от 0x00 до 0xFF. («0x» — это один из способов обозначить, что нижеследующие являются шестнадцатеричными значениями.) Каждая «цифра» в шестнадцатеричном формате представляет 4 бита данных (0–15 в десятичном формате), поэтому 2 шестнадцатеричных цифры могут представлять 16 ^ 2 значения (256 десятичных) , следовательно, 0–255 — это 1-байтовый диапазон десятичных значений.

(Это объяснение предполагает неподписанные типы.)

,

После преобразования HEX в DEC в коде я получаю это значение 75 201 248 102. Так я могу передать это значение в базу данных и рассматривать как уникальное значение? Мой проект предназначен для образовательных целей. У меня есть 9 карт и 2 тега. Я хочу, чтобы у этих 10 была уникальная идентичность, вот и все., @Rajendran Nadar

Вы можете сохранить значение как целое число, HEX, DEC, строку - UID карты обычно можно считать уникальным, и все, что вы делаете, это сравниваете, существует ли UID, считанный с карты, в базе данных или нет. Да, вы можете считать UID в десятичном представлении уникальным для вашего случая., @jose can u c

Спасибо за идею получить значение в десятичном виде, теперь мне будет очень интересно поиграть с RFID. Теперь мне нужно добавить значения в переменную и отправить данные в базу данных. Спасибо, что уделили свое драгоценное время., @Rajendran Nadar