• Система автоматизации с открытым исходным кодом на базе 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 мало. "Плохому танцору..." (с)
 
Сверху Снизу