Радиолоцман Электроника en
расширенный поиск +
  
Ответ
 
Опции темы Поиск в этой теме Оценить тему
Старый 11.10.2020, 21:50 #1
Прапорщик Задов
Новичок
 
Регистрация: 28.05.2020
Сообщений: 4
Репутация: 10
Прапорщик Задов Новичок
0 2
0 0
По умолчанию ESP32 с RC522 зависает

Сделал считыватель для СКУД(она на сервере крутится) с использованием 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();

}
Прапорщик Задов вне форума  
Оценка 0
Старый 29.10.2020, 22:24 #2
Sergey57
Знаток
 
Регистрация: 13.07.2007
Сообщений: 602
Репутация: 106
Sergey57 Знаток Sergey57 Знаток
96 11
5 1
По умолчанию

Здравствуйте!
Сталкивался с подобным, тоже крови попила эта неисправность.
Решение вашей проблемы состоит в периодической выдаче команд
Тестовых. Например опрос состояния RC522,ESP32 и выдача результата теста. У меня вышибало статикой радиоканал. Вход и выход в критические точки контролировать по таймеру.
Что не так перезапуск и иниц. по новой.Как рукой сняло.
Sergey57 вне форума  
Оценка +1
За несколько лет кропотливых исследований и совершенствования технологии компания Infineon смогла довести показатели надежности и стабильности параметров высоковольтных и быстродействующих карбид-кремниевых транзисторов линейки CoolSiC практически до уровня их кремниевых собратьев.
Старый 30.10.2020, 00:18 #3
Прапорщик Задов
Новичок
 
Регистрация: 28.05.2020
Сообщений: 4
Репутация: 10
Прапорщик Задов Новичок
0 2
0 0
По умолчанию

Спасибо! Тоже думал, так сделать. А что значит опрос состояния ESP32? Ведь если он зависнет, то как он сам себя опрашивать будет?
Прапорщик Задов вне форума  
Оценка 0
Технологические инновации, реализованные компанией Wolfspeed в области MOSFET на базе карбида кремния, позволили ей стать лидером рынка инверторных приводов современных электромобилей, а также разработать – на базе того же карбида кремния – решения для бортовых и внешних зарядных устройств электромобилей.
Старый 31.10.2020, 00:47 #4
antonydublin
Специалист
 
Аватар для antonydublin
 
Регистрация: 22.09.2010
Адрес: г. Донецк
Сообщений: 591
Репутация: 295
antonydublin Специалист antonydublin Специалист antonydublin Специалист
287 0
2 0
По умолчанию

У меня аналогичная проблема возникала с 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).
antonydublin вне форума  
Оценка 0
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

Быстрый переход
Часовой пояс GMT +3, время: 08:14.
Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot
Карбид-кремниевые 650 В MOSFET от Wolfspeed – прямой путь повышения КПД
Срезы портала ↓
Рейтинг@Mail.ru