hi to all!
i have a rfid reader based on esp 8266 and a lock(and opening gate and switch light) on arduino uno with ethernet shild.When i read the card,I ordered through bridge widget to my arduino uno and door opened,but as soon as the key is read door open and arduino uno is ofline.I do not understand why.
У меня есть считыватель подключенный к esp82266 и ардуино уно которая управляет светом,воротами,дверью с эзернет шилдом.Я настроил на есп при считывании ключа открывать калитку при помощи виджета bridge.Иногда бывает что ключ считывается,калитка открывается и замок(электромагнитный) остается в открытом положении,а ардуино уходит в офлайн и перестает реагировать на команды.
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
#include "MFRC522.h"
SimpleTimer timer;
#define RST_PIN 5 // RST-PIN for RC522 - RFID - SPI - Modul GPIO15
#define SS_PIN 2 // SDA-PIN for RC522 - RFID - SPI - Modul GPIO2
MFRC522 mfrc522(SS_PIN, RST_PIN); // создаем картридер
unsigned long uidDec, uidDecTemp; // для храниения номера метки в десятичном формате
char auth[] = "*******************";
// Set password to "" for open networks.
char ssid[] = "home";
char pass[] = "********";
IPAddress server_ip (192.168.0.156);
byte arduino_mac[] = { 0x8F, 0x21, 0x1A, 0xE4, 0x73, 0xED };
IPAddress device_ip (192, 168, 0, 181);
IPAddress dns_ip ( 8, 8, 8, 8);
IPAddress gateway_ip (192, 168, 0, 1);
IPAddress subnet_mask(255, 255, 255, 0);
WidgetBridge bridge1(V1);
BLYNK_CONNECTED()
{
bridge1.setAuthToken("***************"); // Place the AuthToken of the second hardware here
}
void setup()
{
//Serial.begin(9600);
// Serial.println("Waiting for card...");
pinMode(4, OUTPUT);
SPI.begin(); // инициализируем SPI шину
mfrc522.PCD_Init(); // инициализируем рфид
timer.setInterval(1000L, rfid); //таймер для чтения карты каждые две секунды
WiFi.config(device_ip, gateway_ip, subnet_mask);
WiFi.begin(ssid, pass);
Blynk.config(auth, server_ip, 8442);
while (Blynk.connect() == false)
{
}
}
void rfid()
{
// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent()) {
// delay(50);
return;
}
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial()) {
// delay(50);
return;
}
uidDec = 0;
// Выдача серийного номера метки.
for (byte i = 0; i < mfrc522.uid.size; i++)
{
uidDecTemp = mfrc522.uid.uidByte[i];
uidDec = uidDec * 256 + uidDecTemp;
}
//Serial.println("Card UID: ");
//Serial.println(uidDec); // Выводим UID метки в консоль.
Blynk.virtualWrite(V0,uidDec);// отправляем номер карты в придлжение
if (uidDec == 899895353||uidDec == 2513558694||uidDec == 84924582||uidDec == 3849511846||uidDec == 35273910||uidDec == 3856195750) // Сравниваем Uid метки, если он равен заданому то серва открывает.
//if (uidDec == 899895353||2513558694||84924582||3849511846||35273910||3856195750) // Сравниваем Uid метки, если он равен заданому то серва открывает.
{
tone(4, 2900, 400); // Делаем звуковой сигнал,карта верная
bridge1.digitalWrite(8, LOW);//открываем калитку
timer.setTimeout(1000, door_open);
noTone(4);
}
else
{
tone(4, 200, 500); // Делаем звуковой сигнал,карта неверная
timer.setTimeout(1000, tonestop);
}
}
void door_open()
{
bridge1.digitalWrite(8, HIGH);//закрываем калитку
}
void tonestop()
{
noTone(4);
}
void loop()
{
timer.run();
Blynk.run();
}