Копируем ключи из контроллера Z5R при помощи Arduino

Сен 21 2021

В этой статье я расскажу, как при помощи Ардуино и SD карты можно считать ключи из контроллера Z5R и записать их в другой такой же контроллер.

Контроллер Z5R очень популярен в России. И сейчас я покажу, как без помощи специального программатора Z-1 или Z-2 можно считать базу ключей и перенести её на новый контроллер.

Приступим! Нам понадобится:

  • Любая Arduino (у меня UNO)
  • SD Card модуль для Ардуино
  • Подопытный Z5R (у меня 2 штуки для демонстрации)

У меня в одном записано два ключа и мастер-карта. Второй контроллер полностью стёртый. Контроллер Z5R хранит свою базу ключей в микросхеме ATMEL 24C64.

Иногда, в случае неисправности контроллера, можно выпаять её и переставить на новый, но это радикальный способ. Мы сделаем всё проще.

При помощи наших любимых проводов Dupont соединяем Ардуино с модулем для SD-карт и Z5R следующим образом:

После чего подключаем Arduino к компьютеру и загружаем следующий скетч:

#include <SPI.h>
#include <SD.h>
#include <AT24Cxx.h>
 
#define i2c_address 0x50
 
AT24Cxx Z5R(i2c_address, 64);
 
File myFile;
 
void setup() {
 
  Serial.begin(9600);
  while (!Serial) {}
 
  Serial.print("Init SD card...");
 
  if (!SD.begin(4)) {
    Serial.println("... failed!");
    while (1);
  }
  Serial.println("... done!");
  Serial.println();
  Serial.println("Enter `R` to read from Z5R or `W` to write");
 
}
 
void read_Z5R() 
{
  byte value;
  byte read_complete = 0;
  unsigned int address = 0;
 
  Serial.println("Start read Z5R and write to file");
 
  if (SD.exists("base.dat")) {
      SD.remove("base.dat");
  }
 
  myFile = SD.open("base.dat", FILE_WRITE); 
 
  if (myFile) {
 
    while (read_complete != 5)
    {
        value = Z5R.read(address);        
        if (value == 0xFF) {
          read_complete++;
        } else {
          read_complete = 0;
        }
        myFile.write(value);
        address++;
 
    }
 
    Serial.println("Complete!");
    Serial.print(address-5);
    Serial.println(" bytes read from Z5R and write to file `base.dat`");
 
   } else {
     Serial.println("Error write to file");
   }
 
   myFile.close();
 
}
 
void write_Z5R()
{
   byte value;
   unsigned int address;
   int bytes;
   unsigned int filesize;
 
   Serial.println("Start read file and write to Z5R");
 
   if (SD.exists("base.dat")) {
 
   myFile = SD.open("base.dat", FILE_READ); 
 
   if (myFile) {
 
     filesize = myFile.size();
     Serial.println("Open file `base.dat` ...");
     for (address = 0; address <= filesize; address++)
     {
        value = myFile.read();
        Z5R.write(address, value);
     }
 
     Serial.print(address-5);
     Serial.println(" bytes read from `base.dat` and write to Z5R");
 
   } else {
    Serial.println("Error read from file");
   }
 
   myFile.close();
 
  } else {
    Serial.println("Not found data file `base.dat`");
  }
 
}
 
void loop() 
{
  if (Serial.available()) {
    char input_cmd = Serial.read();
    if (input_cmd == 'R') read_Z5R();
    if (input_cmd == 'W') write_Z5R();
  }
  delay(100);
}

Библиотеку AT24Cxx.h нужно установить при помощи Library Manager в Arduino IDE.

После загрузки скетча открываем монитор порта, и у вас должно отобразиться следующее:

Программа предлагает нам два варианта действий - нажмите букву R на клавиатуре для считывания базы ключей с контроллера Z5R и щёлкните мышкой на кнопке Отправить.

На экране отобразится количество считанных байт из контроллера Z5R. В пустой микросхеме 24C64 записаны во всех ячейках 0хFF, и операция чтения ключей продолжается до тех пор, пока не будет считано подряд 5 байт 0хFF, это будет означать, что мы достигли конца базы ключей. Параллельно все данные сохраняются на SD карту.

Теперь можно отключить контроллер донор и подключить клона. Снова запускаем программу, и теперь отправляем в порт символ W

На экране должны увидеть сообщение, что файл успешно записан в память Z5R. Проверяйте, теперь оба контроллера стали полностью одинаковыми.

Теперь всё зависит от фантазии: Установить пару кнопок для считывания и записи, подцепить LCD и выбирать файлы из базы на SD-карте или использовать ESP8266, сделать web-интерфейс и управлять всем этим со смартфона, будет круче штатных программаторов. Как вам бизнес идея? :)

Раздел: Arduino Теги: Z5R Arduino