Копируем ключи из контроллера Z5R при помощи Arduino
В этой статье я расскажу, как при помощи Ардуино и 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-интерфейс и управлять всем этим со смартфона, будет круче штатных программаторов. Как вам бизнес идея? :)