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';
}
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//
@Sadhan, 👍1
Обсуждение1 ответ
▲ 1
ваш код в порядке, я сделал очень похожий проект и... у меня та же проблема. Решение было не в коде, а только в источнике питания. RFID нужен очень эффективный источник тока и стабильное напряжение. Проверьте источник питания, если вы использовали 7805 в качестве линейного стабилизатора напряжения, ваш проект не будет работать.
,
@Dario Kowalski
Смотрите также:
- Проблема «Не найдена плата PN53x» Считыватель карт Arduino NFC
- Ошибка стека «мягкий сброс WDT»: RFID-RC522 с NodeMCU
- Система контроля доступа с клавиатурой 4x3 и RFID-RC522
- RFID RC522 считывает предыдущий серийный номер метки с другой меткой
- Могу ли я использовать Qwiic SparkFun RFID без идентификатора-xxla?
- Почему код rfid_write_personal_data в библиотеке MFRC522 использует для записи два блока?
- C++ против языка Arduino?
- avrdude ser_open() can't set com-state
считаете ли вы, что ваш код легко читаем?, @jsotola