NodeMCU не удалось установить связь с RFID-считывателем MFRC522

Я создаю проект, который будет считывать данные RFID-карты или метки, сохранять их в базе данных mysql и отображать данные с помощью PHP.

Для этого я использую NodeMCU, RFID-считыватель RC522 и Ardunio IDE.

Ниже приведен мой код Arduino. Он успешно подключается к Wi-Fi (который я вижу через последовательный монитор), но не дает ответа, когда я прикасаюсь RFID-картой к считывателю.

Я не могу найти ошибку.

/*
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
# RFID MFRC522 / RC522 Library : https://github.com/miguelbalboa/rfid # 
#                                                                     # 
#                 Installation :                                      # 
# NodeMCU ESP8266/ESP12E    RFID MFRC522 / RC522                      #
#         D2       <---------->   SDA/SS                              #
#         D5       <---------->   SCK                                 #
#         D7       <---------->   MOSI                                #
#         D6       <---------->   MISO                                #
#         GND      <---------->   GND                                 #
#         D1       <---------->   RST                                 #
#         3V/3V3   <---------->   3.3V                                #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #





#include <ESP8266WebServer.h>
#include <ESP8266HTTPClient.h>
#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN D2  //--> SDA / SS подключен к распиновке D2
#define RST_PIN D1  //--> RST подключен к распиновке D1
MFRC522 mfrc522(SS_PIN, RST_PIN);  //--> Создать экземпляр MFRC522.

#define ON_Board_LED 2  //--> Определение встроенного светодиода, используемого для индикаторов при подключении к маршрутизатору wifi

//---------------------------------------- SSID и пароль вашего WiFi-маршрутизатора-------------------------------------------------------------------------------------------------------------//
const char* ssid = "apiece solution";
const char* password = "apiece@123";
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//

ESP8266WebServer server(80);  //--> Сервер на порту 80

int readsuccess;
byte readcard[4];
char str[32] = "";
String StrUID;

//----------------------------------------------------------------------------------------------- НАСТРОЙКА--------------------------------------------------------------------------------------//
void setup() {
  Serial.begin(115200); //--> Инициализировать последовательную связь с ПК
  SPI.begin();      //--> Инициализировать SPI-шину
  mfrc522.PCD_Init(); //--> Инициализировать карту MFRC522

  delay(500);

  WiFi.begin(ssid, password); //--> Подключиться к вашему WiFi-маршрутизатору
  Serial.println("hello");

  pinMode(ON_Board_LED,OUTPUT); 
  digitalWrite(ON_Board_LED, HIGH); //--> Выключите светодиод на борту

  //---------------------------------------- Дождитесь подключения
  Serial.print("Connecting");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    //---------------------------------------- Сделайте так, чтобы встроенный индикатор мигал в процессе подключения к Wi-Fi-маршрутизатору.
    digitalWrite(ON_Board_LED, LOW);
    delay(250);
    digitalWrite(ON_Board_LED, HIGH);
    delay(250);
  }
  digitalWrite(ON_Board_LED, HIGH); //--> Выключите индикатор On Board, когда он подключен к Wi-Fi-маршрутизатору.
  //---------------------------------------- При успешном подключении к маршрутизатору Wi-Fi IP-адрес, который будет посещен, отображается в последовательный монитор
  Serial.println("");
  Serial.print("Successfully connected to : ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  Serial.println("Please tag a card or keychain to see the UID !");
  Serial.println("");
}
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//

//----------------------------------------------------------------------------------------------- ПЕТЛЯ---------------------------------------------------------------------------------------//
void loop() {
  // поместите сюда свой основной код, чтобы повторно запускать
  readsuccess = getid();

  if(readsuccess) {  
  digitalWrite(ON_Board_LED, LOW);
    HTTPClient http;    //Объявить объект класса HttpClient

    String UIDresultSend, postData;
    UIDresultSend = StrUID;

    //Опубликовать данные
    postData = "UIDresult=" + UIDresultSend;

   // http.begin("http://192.168.1.6/NodeMCU_RC522_Mysql/getUID.php "); //Указать адресат запроса
    //http.AddHeader("Content-Type", "application/x-www-form-urlencoded"); //Указать заголовок content-type

    int httpCode = http.POST(postData);   //Отправить запрос
    String payload = http.getString();    //Получить полезную нагрузку ответа

    Serial.println(UIDresultSend);
    Serial.println(httpCode);   //Распечатать код возврата HTTP
    Serial.println(payload);    //Полезная нагрузка ответа на запрос печати

    http.end();  //Закрыть
    delay(1000);
  digitalWrite(ON_Board_LED, HIGH);
  }
  else
  {
    Serial.println("hi");
     delay(1000); 
  }
}
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//

//---------------------------------------- Процедура считывания и получения идентификатора пользователя с карты или брелка---------------------------------------------------------------------------------//
int getid() {  
  if(!mfrc522.PICC_IsNewCardPresent()) {
    return 0;
  }
  if(!mfrc522.PICC_ReadCardSerial()) {
    return 0;
  }


  Serial.print("THE UID OF THE SCANNED CARD IS : ");

  for(int i=0;i<4;i++){
    readcard[i]=mfrc522.uid.uidByte[i]; //сохранение UID тега в readcard
    array_to_string(readcard, 4, str);
    StrUID = str;
  }
  mfrc522.PICC_HaltA();
  return 1;
}
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//

//---------------------------------------- Процедура изменения результата чтения UID массива в строку ------------------------------------------------------------------------------//
void array_to_string(byte array[], unsigned int len, char buffer[]) {
    for (unsigned int i = 0; i < len; i++)
    {
        byte nib1 = (array[i] >> 4) & 0x0F;
        byte nib2 = (array[i] >> 0) & 0x0F;
        buffer[i*2+0] = nib1  < 0xA ? '0' + nib1  : 'A' + nib1  - 0xA;
        buffer[i*2+1] = nib2  < 0xA ? '0' + nib2  : 'A' + nib2  - 0xA;
    }
    buffer[len*2] = '\0';
}
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//

, 👍1

Обсуждение

считаете ли вы, что ваш код легко читаем?, @jsotola


1 ответ


1

ваш код в порядке, я сделал очень похожий проект и... у меня та же проблема. Решение было не в коде, а только в источнике питания. RFID нужен очень эффективный источник тока и стабильное напряжение. Проверьте источник питания, если вы использовали 7805 в качестве линейного стабилизатора напряжения, ваш проект не будет работать.

,