• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Хватит пинов?

Aven

New member
Есть у меня контроллер доступа для двери на Mega2560+Ethernet shield, задумался, а можно ли перевести его на esp8266?

Раскладка для Меги такая:

// Reader & Door 1
int PIN_1_DATA_0 = 2; // вход, прерывание по FALLING
int PIN_1_DATA_1 = 3; // вход,прерывание по FALLING
int PIN_1_LED_GREEN = 4; // выход
int PIN_1_LED_RED = 5; // выход
int PIN_1_BEEP = 6; // выход
int PIN_1_DOOR_BUTTON = 7; // вход
int PIN_1_DOOR_LOCK = A0; // выход

// Reader & Door 2
int PIN_2_DATA_0 = 19;// вход, прерывание по FALLING
int PIN_2_DATA_1 = 18;// вход, прерывание по FALLING
int PIN_2_LED_GREEN = 17; // выход
int PIN_2_LED_RED = 16; // выход
int PIN_2_BEEP = 15; // выход
int PIN_2_DOOR_BUTTON = 14;// вход
int PIN_2_DOOR_LOCK = A1; // выход

все кроме прерываний можно в принципе повесить на расширитель портов, например MCP23017.
вопрос собственно больше по прерываниям, получится ли на оставшихся пинах реализовать нормальную работу с прерываниями?
 

=AK=

New member
Разве для такой задачи нужно прерывание? Неужто нельзя простым поллингом обойтись?
 

AndrF

Active member
все кроме прерываний можно в принципе повесить на расширитель портов, например MCP23017.
Вы вообще всё можете на MCP23017 повесить (я бы так и сделал, оставив свободные входы ESP-шки про запас). У нее же есть выходы прерываний. Ну и ESP-шка с прерываниями работает.
.
 

AndrF

Active member
Разве для такой задачи нужно прерывание? Неужто нельзя простым поллингом обойтись?
Ну, допустим, что нужно. Почему бы и нет? Тем более расширитель для организации такого количества пинов нужен по любому, а в нем уже все что надо предусмотрено - дополнительно ничего ставить не потребуется. У ESP-шки будет задействовано до 4-х пинов...
 

Aven

New member
Без прерываний будут пропуски битов.
Тайминги небольшие в протоколе Wiegand:




AndrF, я думал по i2c цеплять (2 провода данных), хотя если прерывания он умеет, надо будет наверно по spi.
 

etaon

New member
День добрый. Хотел сходу воспользоваться бибилотекой WiegandMega2560.h. Да не вышло.
В серийник пишет лишь о включенных портах и всё. На меге проверен код был. Работает и кидает в серийник данные карты.
Мега цепляется так:
Arduino Mega 2560 Any compatible board should work. Wiegand RFID Reader.
Reader 1 :
DATA0 of Wiegand connects to Arduino PIN 2 DATA1 of Wiegand connects to Arduino PIN 3.
D2 D3. Пока ищу разираюсь и пробую, быть может кто подскажет ..
 

etaon

New member
YetAnotherArduinoWiegandLibrary

Поставил и заработало:
#define PIN_D0 4
#define PIN_D1 5

Код:
11:05:06.224 -> ⸮EO⸮v`MM⸮@>h⸮⸮State changed: CONNECTED
11:05:09.430 -> Card readed: C07455
11:05:10.529 -> Card readed: C07455
11:05:11.539 -> Card readed: C07455
11:05:12.739 -> Card readed: C07455
11:05:13.839 -> Card readed: C07455
Осталось конвертировать..
 

exeland

Member
А скорости I2C хватить? скорость то 1.7 MHz максимум - это капец как мало.
 

etaon

New member
Подключил 3 считывателя wiegand.

Код:
#include <WiegandMega2560.h>
............

    if(wg.available())
    {
        Serial.print("Wiegand HEX = ");
        Serial.print(wg.getCode(),HEX);
        Serial.print(", DECIMAL = ");
        Serial.print(wg.getCode());
                Serial.print(", Gate= ");
                Serial.print(wg.getGateActive());
        Serial.print(", Type W");
        Serial.println(wg.getWiegandType());   
}
В библиотеке пофиксил настройки. Точно не вспомню. Не везде работало. Про светодиод встроенный пришлось забыть..
Код:
        attachInterrupt(5, ReadD0A, FALLING);    // Hardware interrupt - high to low pulse
        attachInterrupt(4, ReadD1A, FALLING);    // Hardware interrupt - high to low pulse
Код:
        attachInterrupt(14, ReadD0B, FALLING);    // Hardware interrupt - high to low pulse
        attachInterrupt(12, ReadD1B, FALLING);    // Hardware interrupt - high to low pulse
Код:
        attachInterrupt(0, ReadD0C, FALLING);    // Hardware interrupt - high to low pulse
        attachInterrupt(2, ReadD1C, FALLING);    // Hardware interrupt - high to low pulse
 

=AK=

New member
А скорости I2C хватить? скорость то 1.7 MHz максимум - это капец как мало.
Вы по нему видео собрались гонять, что ли?

Делают какой-нибудь "контроллер открывания двери", но то прерывания им подай, то скорости I2C мало. "Плохому танцору..." (с)
 
Сверху Снизу