На склад поступили жидко-кристаллические индикаторы и дисплеи от KSE
Новичок
 
Регистрация: 28.05.2020
Сообщений: 4
Репутация: 10
0 2
0 0
 
11.10.2020 21:50 #1
Сделал считыватель для СКУД(она на сервере крутится) с использованием ESP32 и RC522. Все работает как надо, только периодически устройство зависает(может несколько дней работать, а потом зависнуть, а бывает, что несколько раз на день зависает), не реагирует на поднесение RFID-меток. При этом Wi-Fi соединение остается активным в роутере. До этого такое же устройство собирал на Arduino + W550 + RC522 - симптомы абсолютно такие же, все работает, но периодически виснет. Пробовал несколько экземпляров контроллеров и датчиков, со всеми такая история. Я подозреваю, что тут какая-то проблема с RC522. Подскажите, пожалуйста как можно решить эту проблему?

Вот код:

#include <SPI.h>
#include <MFRC522.h>
#include <WiFi.h>
#include "esp32-hal-ledc.h"

#define RST_PIN 22 // Configurable, see typical pin layout above
#define SS_PIN 21 // Configurable, see typical pin layout above

const char* ssid = "TP-LINK";
const char* password = "password";
const char* host = "site.com";
const char* idBranch = "1";
const char* rfid = "123";

MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance
unsigned long uidDec, uidDecTemp; // для храниения номера метки в десятичном формате

//Реле
int in1 = 5;
//Синий. Готовность к работе.
int inputReady = 13;
//Зеленый. Есть доступ.
int inputAccessAllowed = 2;
//Красный. Нет доступа.
int inputAccessDenied = 4;
//Динамик
int buzzer = 12;

void setup() {
SPI.begin(); // инициализация SPI / Init SPI bus.
delay(10);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
mfrc522.PCD_Init(); // инициализация MFRC522 / Init MFRC522 card.

//Реле
pinMode(in1, OUTPUT);
digitalWrite(in1, LOW);

//Синий. Готовность к работе.
pinMode(inputReady, OUTPUT);
//Зеленый. Есть доступ.
pinMode(inputAccessAllowed, OUTPUT);
//Красный. Нет доступа.
pinMode(inputAccessDenied, OUTPUT);
//Динамик
pinMode(buzzer, OUTPUT);

ledcSetup(0, 50, 8);
ledcAttachPin(buzzer, 0);

digitalWrite(inputReady, HIGH);
}

void loop() {
//Если Wi-Fi отвалился, то перезагружаемся
if (WiFi.status() != WL_CONNECTED) {
ESP.restart();
}

// Поиск метки
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Считывание метки
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}

uidDec = 0;
// Выдача серийного номера метки.
for (byte i = (mfrc522.uid.size); i > 0; i--)
{
uidDecTemp = mfrc522.uid.uidByte[i-1];
uidDec = uidDec * 256 + uidDecTemp;
}

// Use WiFiClient class to create TCP connections
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
return;
}

String url = "/person/visit";
url += "?id=";
url += idBranch;
url += "&rfid=";
url += uidDec;

client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
unsigned long timeout = millis();
while (client.available() == 0) {
if (millis() - timeout > 5000) {
client.stop();
return;
}
}

String line;
while(client.available()) {
line = client.readStringUntil('\n');
}

if(line=="1"){
digitalWrite(in1, HIGH);
digitalWrite(inputAccessAllowed, HIGH);
delay(500);
digitalWrite(in1, LOW);
digitalWrite(inputAccessAllowed, LOW);
}
else{
digitalWrite(inputAccessDenied, HIGH);
ledcWrite(0, 255);

//Чтоб часто не слать
if(uidDec){
delay(1000);
}
digitalWrite(inputAccessDenied, LOW);
ledcWrite(0, 0);
}

client.stop();

}
Оценка
Знаток
 
Регистрация: 13.07.2007
Сообщений: 657
Репутация: 124
114 11
5 2
 
29.10.2020 22:24 #2
Здравствуйте!
Сталкивался с подобным, тоже крови попила эта неисправность.
Решение вашей проблемы состоит в периодической выдаче команд
Тестовых. Например опрос состояния RC522,ESP32 и выдача результата теста. У меня вышибало статикой радиоканал. Вход и выход в критические точки контролировать по таймеру.
Что не так перезапуск и иниц. по новой.Как рукой сняло.
Оценка
Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель.
Новичок
 
Регистрация: 28.05.2020
Сообщений: 4
Репутация: 10
0 2
0 0
 
30.10.2020 00:18 #3
Спасибо! Тоже думал, так сделать. А что значит опрос состояния ESP32? Ведь если он зависнет, то как он сам себя опрашивать будет?
Оценка
Специалист
 
Аватар для antonydublin
 
Регистрация: 22.09.2010
Адрес: г. Донецк
Сообщений: 868
Репутация: 380
371 0
3 0
 
31.10.2020 00:47 #4
У меня аналогичная проблема возникала с NRF24L01 и некоторыми ZigBee модулями. Иногда неделями всё в порядке, иногда за день десять сбоев. Решение - как предложил Sergey57, т.е. переинициализация.

Цитата:
Сообщение от Прапорщик Задов
А что значит опрос состояния ESP32? Ведь если он зависнет, то как он сам себя опрашивать будет?
А разве в ESP32 нет аппаратного и программного watchdog?
Цитата:
Сообщение от System API Reference
The ESP-IDF has support for two types of watchdogs: The Interrupt Watchdog Timer and the Task Watchdog Timer (TWDT).
Оценка
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Оценка этой теме
Оценка этой теме:
Метки
esp32, rc522
Похожие темы
Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход
Электронные компоненты. Бесплатная доставка по России
Часовой пояс GMT +3, время: 02:15.
Обратная связь РадиоЛоцман Вверх