Читалка-записывалка домофонных ключей iButton

[ Версия для печати ]
Добавить в Telegram Добавить в Twitter Добавить в Вконтакте Добавить в Одноклассники
Страницы: (5) [1] 2 3 ... Последняя »  К последнему непрочитанному [ ОТВЕТИТЬ ] [ НОВАЯ ТЕМА ]
LazyJohn
3.03.2023 - 23:13
Статус: Offline


Приколист

Регистрация: 12.11.16
Сообщений: 348
142
Все деградируют, а я дурака в пятницу валяю. Но может кому пригодится.

Читалка-записывалка домофонных ключей iButton
 
[^]
Yap
[x]



Продам слона

Регистрация: 10.12.04
Сообщений: 1488
 
[^]
LazyJohn
3.03.2023 - 23:14
2
Статус: Offline


Приколист

Регистрация: 12.11.16
Сообщений: 348
Схема простая до безобразия, честно спизжена с сайта
http://psenyukov.ru/работа-с-ibutto...чей-ibutton/
Что поправлено:
в функции записи ключа в болванку iButton у автора явно указан 10-й пин.
т.е. строка
#define pin 10 // iBbutton подключен к PIN 10.
работать не будет,
если вы вдруг подключите ключ к другому пину и вот тут поменяете номер.

Что выкинул:
Все кнопки. Нафиг они мне не надо, я не так часто ключи копирую, вполне
через команды меню справляюсь

Что поменял:
- Меню.
Команды заменил на заглавные буквы. Если в оригинале была 'r', то теперь 'R',
'w' - 'W' и т.д. Далее в тексте исходника есть функция Help(), там всё расписано

- В оригинале считанный ключ можно было сохранить в EEPROM.
Я добавил выбор ячейки, по клавишам 0-9,a-z - т.е. можно выбирать ячейку, таким образом можно
сохранить в EEPROM 36 ключей. Хрен его знает, как потом вспомнить где какой, видимо придется писать шпаргалку на бумажке :)

Как это работает:
Всё взаимодействие происходит через терминал, можно использовать тот же встроенный монитор порта из Arduino IDE.
выставить Скорость порта 115200, а параметр признака конца строки (по-умолчанию там 'NL-новая строка', поставить 'Нет конца строки').
ничего страшного не произойдет, если этот параметр останется по-дефолту, просто будет лишний раз \n проскакивать

Первое и самое простое - прочитать ключ (на самом деле тут всё просто :) ).
Прислоняем ключ к контактам, жмем команду R, в ответ должно прилететь две строки
ID: 0x01,0xFD,0x36,0xFE,0x0A,0x00,0x00,0x13
CRC: 13
Если ключ прочитан нормально, то CRC должен совпасть с последним байтом ID ключа

Ключ считан, он сейчас 'болтается' в буфере и далее есть варианты:

1) ключ можно сразу прошить в болванку. Прикладываем её контактам,
даем команду W
2) сохранить прочитанный ключ в EEPROM
- выбираем ячейку (напоминаю, их у нас 36 - 0-до-9, и от a-до-z
(Вот почему команды выведены в заглавные буквы! Чтоб не путать с номерами ячеек!)
Для ячейки 4 выскочит вот такой ответ:
Selected key: 4
Selected addr: 32
- сохраняем прочитанный ключ в выбранную ячейку командой S

Как прошить болванку из сохраненных ранее ключей
1) выбрать адрес ячейки (0-9,a-z)
2) загрузить данные из ячейку командой L
3) прслонить болванку к контактам и записать ключ командой W
 
[^]
LazyJohn
3.03.2023 - 23:15
1
Статус: Offline


Приколист

Регистрация: 12.11.16
Сообщений: 348
Код

#include <OneWire.h>
#include <EEPROM.h>
#define pin 10 // iBbutton подключен к PIN 10.

void PrintKey(char *Msg, byte Data[8]);     // Функция выводит некий текст Msg, а за ним 8 байт памяти ключа в HEX формате
void Help(void);                            // Ну типа Help

OneWire ibutton (pin);

byte IDconst[8] = {0x01,0x03,0x9b,0x42,0x09,0x00,0x00,0xca};

byte arr[8],ID[8],x;
char com = 0;
char HexString[60];
byte key=0;
int  addr=0;
unsigned long timestamp=0;

void setup()
{
  Serial.begin(115200);
  delay(1000);
  Help();
  if(key<58)
     addr = (key-48)*8;
  else
     addr = (key-87)*8;
}

void loop()
{
  //read attached iButton and assign value to buffer arr
  if (!ibutton.search (arr))
  {
     ibutton.reset_search();
     delay(200);
     com=0;
  }

  if(Serial.available())  
  {
     com = Serial.read();
     timestamp = millis();
  }


  if(com == '?' || com=='\n')
  {
     delay (200);
     Help();
     com=0;
  }
 
  if(com == 'C')
  {
     delay (200);
     for (x=0; x<8; x++)
        ID[x] = IDconst[x];
     PrintKey("Constant ID: ",ID);
     com = 0;
  }

  if(com == 'R')
  {
     delay (200);
 
     for (x=0; x<8; x++)
        ID[x] = arr[x];
 
     PrintKey("ID: ",ID);

     //Вычисляем CRC
     byte crc;
     crc = ibutton.crc8(ID, 7);
     Serial.print("CRC: ");
     Serial.println(crc,HEX);
     com=0;
  }
 
 if(com == 'S')
 {  
    delay (200);
    PrintKey("Saved ID: ",ID);  
    for (x=0; x<8; x++)
       EEPROM.write(addr+x, ID[x]);
    com=0;
 }
 
 if(com == 'P')
 {
    PrintKey("Print ID: ",ID);
    PrintKey("Print IDconst: ",IDconst);
    com=0;
 }
 
 
  if(com == 'L')
  {
     delay (200);
     for (x=0; x<8; x++)
        ID[x] = EEPROM.read(addr+x);
     PrintKey("Loaded ID: ",ID);
     com=0;
 }
 
 if(com == 'E')
 {
    Serial.print("Erase saved ID");
    for (x=0; x<8; x++)  
       EEPROM.write(addr+x, 0xFF);
    Serial.print("\n");
    com=0;
 }

 if((com>=48 && com<=57) || (com>=97 && com<=122))
 {
    if(com<58)
       key=com-48;
    else
       key=com-87;
     
    addr = key*8;
    Serial.print("Selected key: ");
    Serial.println(key);
    Serial.print("Selected addr: ");
    Serial.println(addr);
 }

 
 if(com == 'W')
 {
    delay (200);
    ibutton.skip();
    ibutton.reset();
    ibutton.write(0x33);
    Serial.print("ID before write:");
    for (x=0; x<8; x++)
    {
       Serial.print(' ');
       Serial.print(ibutton.read(), HEX);
    }
   
    ibutton.skip();
    ibutton.reset();
    ibutton.write(0xD1);
    digitalWrite(pin, LOW);
    pinMode(pin, OUTPUT);
    delayMicroseconds(60);
    pinMode(pin, INPUT);
    digitalWrite(pin, HIGH);
    delay(10);
   
    Serial.print('\n');
    PrintKey("Writing iButton ID: ",ID);
    ibutton.skip();
    ibutton.reset();
    ibutton.write(0xD5);
    for (x=0; x<8; x++)
    {
       writeByte(ID[x]);
       Serial.print("**");
    }
   Serial.print('\n');
   ibutton.reset();
   ibutton.write(0xD1);
   digitalWrite(pin, LOW);
   pinMode(pin, OUTPUT);
   delayMicroseconds(10);
   pinMode(pin, INPUT);
   digitalWrite(pin, HIGH);
   delay(pin);
   com=0;
 }
}

int writeByte(byte data)
{
 int data_bit;
 for(data_bit=0; data_bit<8; data_bit++)
 {
    if (data & 1)
    {
       digitalWrite(pin, LOW);
       pinMode(pin, OUTPUT);
       delayMicroseconds(60);
       pinMode(pin, INPUT);
       digitalWrite(pin, HIGH);
       delay(10);
    }
    else
    {
       digitalWrite(pin, LOW);
       pinMode(pin, OUTPUT);
       pinMode(pin, INPUT);
       digitalWrite(pin, HIGH);
       delay(10);
    }
    data = data >> 1;
 }
 return 0;
}


void PrintKey(char *Msg, byte Data[8])
{
  Serial.print(Msg);
  sprintf(HexString,"0x%02X,0x%02X,0x%02X,0x%02X,0x%02X,0x%02X,0x%02X,0x%02X",Data[0],Data[1],Data[2],Data[3],Data[4],Data[5],Data[6],Data[7]);
  Serial.println(HexString);
}

void Help(void)
{
  // смешно. этож надо догадаться, чтоб нажать ?, но пусть будет, может кто в исходник посмотрит и увидит :)
  Serial.println("> type ? for help");  
  Serial.println("R - прочитать ключ из iButton в ID");
  Serial.println("W - записать содержимое ID в IButton");
  Serial.println("0-9,a-z - выбрать номер ячейки из EEPROM");
  Serial.println("S - сохранить содержимое ID в выбранную ячейку EEPROM");
  Serial.println("L - загрузить содержимое выбранной ячейки EEPROM в ID");
  Serial.println("E - стереть ячейку EEPROM");
  Serial.println("C - load IDconst to ID");
  Serial.println("P - print variables");
}


Это сообщение отредактировал LazyJohn - 3.03.2023 - 23:35
 
[^]
ShauSt
3.03.2023 - 23:15
9
Статус: Offline


Весельчак

Регистрация: 13.05.19
Сообщений: 153
контактные ключи давно не в тренде городов. переделывай

Размещено через приложение ЯПлакалъ
 
[^]
cobakalist
3.03.2023 - 23:15
11
Статус: Offline


Не стоит искать причины не выпить

Регистрация: 29.01.18
Сообщений: 7482
Да ну его нахуй, я как бывший ключник уже блюю при виде всего этого biggrin.gif

Одна тока вот эта сука вызывает головокружение shum_lol.gif

Это сообщение отредактировал cobakalist - 3.03.2023 - 23:22

Читалка-записывалка домофонных ключей iButton
 
[^]
BlagVest
3.03.2023 - 23:15
8
Статус: Offline


Балагур

Регистрация: 15.01.16
Сообщений: 816
За рукожопство зелень! Дурака то хоть под пиво валял? )

Размещено через приложение ЯПлакалъ
 
[^]
Диагност
3.03.2023 - 23:16
14
Статус: Offline


Андрюша Князев

Регистрация: 24.05.16
Сообщений: 295
Читалку-записывалку карт сделал бы лучше.
Пиши в личку.

Это сообщение отредактировал Диагност - 3.03.2023 - 23:21
 
[^]
LazyJohn
3.03.2023 - 23:17
5
Статус: Offline


Приколист

Регистрация: 12.11.16
Сообщений: 348
Цитата (BlagVest @ 3.03.2023 - 23:15)
За рукожопство зелень! Дурака то хоть под пиво валял? )

Нее... Сегодня же день Ирландского Виски!
 
[^]
Oleggka
3.03.2023 - 23:17
3
Статус: Offline


Ярила

Регистрация: 30.08.12
Сообщений: 5406
Цитата (ShauSt @ 3.03.2023 - 23:15)
контактные ключи давно не в тренде городов. переделывай

Зато в сигнализациях используются.
 
[^]
vlad59
3.03.2023 - 23:17
4
Статус: Offline


Юморист

Регистрация: 2.06.15
Сообщений: 416
Это для меня неудобно. Лучше научи, как в смарт считывать и применять. Так можно?
 
[^]
Artemuu
3.03.2023 - 23:18
29
Статус: Offline


рожденный в СССР

Регистрация: 20.04.13
Сообщений: 2252
Это конечно круто как увлечение но я купил на Али за 400 руб такую прибуду для считывания и записи электронных ключей домофона или карт СКУД))) о сейчас уже 600 руб

https://sl.aliexpress.ru/p?key=VW1VwMs

Размещено через приложение ЯПлакалъ

Читалка-записывалка домофонных ключей iButton
 
[^]
Plutarch
3.03.2023 - 23:19
1
Статус: Offline


Ярила

Регистрация: 14.05.18
Сообщений: 4300
когда дверь примерзает.... помогает только удача
 
[^]
guge
3.03.2023 - 23:19
4
Статус: Offline


Шутник

Регистрация: 23.07.14
Сообщений: 4
Не актуально. Ни разу. Лет 10 назад- да. Сейчас это уже прошлое.

Размещено через приложение ЯПлакалъ
 
[^]
erolvic
3.03.2023 - 23:19
-4
Статус: Offline


Не понятый

Регистрация: 3.12.12
Сообщений: 296
Насколько знаю технологию, то что ТС выложил полный бред!
 
[^]
akcakal
3.03.2023 - 23:21
6
Статус: Offline


Подниматель пингвинов

Регистрация: 26.06.14
Сообщений: 5970
Ты чёртов хакер, я так не умею..Ненавижу тебя! hacker.gif
 
[^]
Kugel
3.03.2023 - 23:21
4
Статус: Offline


Ярила

Регистрация: 19.12.15
Сообщений: 1005
if((com & 0x5f) == 'W') // 'W' or 'w'
 
[^]
religious
3.03.2023 - 23:21
6
Статус: Offline


Хохмач

Регистрация: 26.01.18
Сообщений: 697
Лучше технологию для карт оплаты проезда выложи.

Размещено через приложение ЯПлакалъ
 
[^]
AgipTM
3.03.2023 - 23:21 [ показать ]
-10
vanonik
3.03.2023 - 23:22
2
Статус: Offline


Ярила

Регистрация: 2.05.12
Сообщений: 4775
Плюсую.
Пойду пацану моему покажу, пусть побалуется с ключами.
А вообще если заменить iButton на модуль RFID, то можно и банковские пропускные карточки читать
 
[^]
LazyJohn
3.03.2023 - 23:22
4
Статус: Offline


Приколист

Регистрация: 12.11.16
Сообщений: 348
Цитата (vlad59 @ 3.03.2023 - 23:17)
Это для меня неудобно. Лучше научи, как в смарт считывать и применять. Так можно?

Напрямую низзя.
Но изватиться можно, грамотные товарищи меня поправят. ES8266, MQTT, DASH...
Но железку всё равно паять придется :)
 
[^]
dimkey
3.03.2023 - 23:22
18
Статус: Offline


Ярила

Регистрация: 28.03.12
Сообщений: 1159
Цитата (ShauSt @ 03.03.2023 - 23:15)
контактные ключи давно не в тренде городов. переделывай

У нас в городе 95% домов с контактными ключами домофона

Размещено через приложение ЯПлакалъ
 
[^]
bf1648
3.03.2023 - 23:23
6
Статус: Offline


Ярила

Регистрация: 27.05.11
Сообщений: 2687
Я как то приобрел на алике читалку-записыватель беспроводных ключей мифаре/марин за тыщу и мешок всяких болванок. Обеспечил всех соседей и знакомых дубликатами халявными, а то официалы охуели с ценами - от 300 руб за ключ.
 
[^]
erolvic
3.03.2023 - 23:24
-1
Статус: Offline


Не понятый

Регистрация: 3.12.12
Сообщений: 296
Цитата (LazyJohn @ 3.03.2023 - 23:14)
Схема простая до безобразия, честно спизжена с сайта
http://psenyukov.ru/работа-с-ibutto...чей-ibutton/
Что поправлено:
в функции записи ключа в болванку iButton у автора явно указан 10-й пин.
т.е. строка
#define pin 10 // iBbutton подключен к PIN 10.
работать не будет,
если вы вдруг подключите ключ к другому пину и вот тут поменяете номер.

Что выкинул:
Все кнопки. Нафиг они мне не надо, я не так часто ключи копирую, вполне
через команды меню справляюсь

Что поменял:
- Меню.
Команды заменил на заглавные буквы. Если в оригинале была 'r', то теперь 'R',
'w' - 'W' и т.д. Далее в тексте исходника есть функция Help(), там всё расписано

- В оригинале считанный ключ можно было сохранить в EEPROM.
Я добавил выбор ячейки, по клавишам 0-9,a-z - т.е. можно выбирать ячейку, таким образом можно
сохранить в EEPROM 36 ключей. Хрен его знает, как потом вспомнить где какой, видимо придется писать шпаргалку на бумажке :)

Как это работает:
Всё взаимодействие происходит через терминал, можно использовать тот же встроенный монитор порта из Arduino IDE.
выставить Скорость порта 115200, а параметр признака конца строки (по-умолчанию там 'NL-новая строка', поставить 'Нет конца строки').
ничего страшного не произойдет, если этот параметр останется по-дефолту, просто будет лишний раз \n проскакивать

Первое и самое простое - прочитать ключ (на самом деле тут всё просто :) ).
Прислоняем ключ к контактам, жмем команду R, в ответ должно прилететь две строки
ID: 0x01,0xFD,0x36,0xFE,0x0A,0x00,0x00,0x13
CRC: 13
Если ключ прочитан нормально, то CRC должен совпасть с последним байтом ID ключа

Ключ считан, он сейчас 'болтается' в буфере и далее есть варианты:

1) ключ можно сразу прошить в болванку. Прикладываем её контактам,
даем команду W
2) сохранить прочитанный ключ в EEPROM
- выбираем ячейку (напоминаю, их у нас 36 - 0-до-9, и от a-до-z
(Вот почему команды выведены в заглавные буквы! Чтоб не путать с номерами ячеек!)
Для ячейки 4 выскочит вот такой ответ:
Selected key: 4
Selected addr: 32
- сохраняем прочитанный ключ в выбранную ячейку командой S

Как прошить болванку из сохраненных ранее ключей
1) выбрать адрес ячейки (0-9,a-z)
2) загрузить данные из ячейку командой L
3) прслонить болванку к контактам и записать ключ командой W

Скорость порта именно такая?
 
[^]
erolvic
3.03.2023 - 23:26
3
Статус: Offline


Не понятый

Регистрация: 3.12.12
Сообщений: 296
Цитата (vanonik @ 3.03.2023 - 23:22)
Плюсую.
Пойду пацану моему покажу, пусть побалуется с ключами.
А вообще если заменить iButton на модуль RFID, то можно и банковские пропускные карточки читать

Давно уже не получится.
Протоколы поменялись.
 
[^]
LazyJohn
3.03.2023 - 23:27
1
Статус: Offline


Приколист

Регистрация: 12.11.16
Сообщений: 348
Цитата (erolvic @ 3.03.2023 - 23:24)
Скорость порта именно такая?

Нет, конечно. Просто в коде Serial.begin(115200) объявлено
 
[^]
Понравился пост? Еще больше интересного в Телеграм-канале ЯПлакалъ!
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста, или зарегистрируйтесь, если не зарегистрированы.
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) Просмотры темы: 31439
0 Пользователей:
Страницы: (5) [1] 2 3 ... Последняя » [ ОТВЕТИТЬ ] [ НОВАЯ ТЕМА ]


 
 



Активные темы






Наверх