Самый простой и бюджетный дубликатор ключей iButton/RW1990 на Esp8266

#include <OneWire.h>
#define pin 14
OneWire ibutton (pin); // Пин D14 для подлючения iButton (Data)
byte addr[8];
//byte ReadID[8] = { 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F }; // "Универсальный" ключ. Прошивается последовательность 01:FF:FF:FF:FF:FF:FF:2F
byte ReadID[8] = { 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x9B };
const int buttonPin = 4;
const int ledPin = 12;//ЗЕЛЁНЫЙ
const int ledPinB = 13;//СИНИЙ
const int ledPinR = 15;//красный
int buttonState = 0;
int writeflag = 0;
int readflag = 0;
int val = 0;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(ledPinB, OUTPUT);
  pinMode(ledPinR, OUTPUT);
  pinMode(buttonPin, INPUT);
  Serial.begin(115200);
digitalWrite(ledPinB, HIGH);
 digitalWrite(ledPinR, LOW);
}

void loop() {

  buttonState = digitalRead(buttonPin);
  //if (buttonState == HIGH) {
  if (buttonState == LOW) {
    readflag = 1;
    writeflag = 1;
    //digitalWrite(ledPin, HIGH);
    digitalWrite(ledPinR, HIGH);
    val++;
    if (val > 6) val = 6;
    Serial.print(val);
    Serial.print("button1");
   digitalWrite(ledPinB, LOW);
    digitalWrite(ledPinR, HIGH);
  
  
    delay(1000);
  // digitalWrite(ledPinR, LOW);
  }
  else {
    val = 0;
  }
  if (!ibutton.search (addr)) {
    ibutton.reset_search();
    delay(50);
    if (val <= 5) return;
    val = 0;
    Serial.print("button"); 
  }
  digitalWrite(ledPin, HIGH);
  digitalWrite(ledPinB, LOW);
  digitalWrite(ledPinR, LOW);
  delay(500);
 digitalWrite(ledPinB, HIGH);
  for (byte x = 0; x < 8; x++) {
    Serial.print(addr[x], HEX);
    if (readflag == 0) {
      ReadID[x] = (addr[x]);
    }
    Serial.print(":");
  }
  byte crc; // Проверка контрольной суммы
  crc = ibutton.crc8(addr, 7);
  Serial.print("CRC: ");
  Serial.println(crc, HEX);
  digitalWrite(ledPin, LOW);

  if ((writeflag == 1) or (Serial.read() == 'w')) {
    ibutton.skip(); ibutton.reset(); ibutton.write(0x33);
    Serial.print("  ID before write:");
    for (byte x = 0; x < 8; x++) {
      Serial.print(' ');
      Serial.print(ibutton.read(), HEX);
    }
    // send reset
    ibutton.skip();
    ibutton.reset();
    // send 0xD1
    ibutton.write(0xD1);
    // send logical 0
    digitalWrite(pin, LOW); pinMode(pin, OUTPUT); delayMicroseconds(60);
    pinMode(pin, INPUT); digitalWrite(pin, HIGH); delay(10);
    Serial.print('\n');
    Serial.print("  Writing iButton ID:\n    ");
    byte newID[8] = { (ReadID[0]), (ReadID[1]), (ReadID[2]), (ReadID[3]), (ReadID[4]), (ReadID[5]), (ReadID[6]), (ReadID[7]) };
    ibutton.skip();
    ibutton.reset();
    ibutton.write(0xD5);
    for (byte x = 0; x < 8; x++) {
      writeByte(newID[x]);
      Serial.print('*');
    }
    Serial.print('\n');
    ibutton.reset();
    // send 0xD1
    ibutton.write(0xD1);
    //send logical 1
    digitalWrite(pin, LOW); pinMode(pin, OUTPUT); delayMicroseconds(10);
    pinMode(pin, INPUT); digitalWrite(pin, HIGH); delay(10);
    writeflag = 0;
    readflag = 0;
    digitalWrite(ledPin, LOW);
  }
}
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;
  }
  digitalWrite(ledPinB, HIGH);
  tone(12,25,4000);
  return 0;
}

upload images

По мотивам Нужна помощь со скетчем Дубликатор дом.ключей - #23

1 лайк

Снимок экрана в 2023-03-05 17-05-33

1 лайк

Так…?

Гнездо для батарейки CR2032, отлично подходит как коннектор для ключей RW1990.

Код рассчитан на звуковую/световую реакцию процессов.

Дисплей, особенно и не нужен.

и что с этим девайсом делать? к примеру есть у меня ключик, что нужно для того чтобы сделать его дубликат?

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

а заготовку из чего сделать?

Заготовку можно купить на Али, использовать/перезаписать старую с маркировкой RW1990.

в комплекте с сигнализацией было 5 ключей, то-есть остальные четыре можно сделать как первый, правильно?

[Смотри, что есть на AliExpress! 10 шт./лот, перезаписываемый ключ RFID Touch Memory RW1990 iButton для копирования карт, ключей сауны, Далласа, S18 20, Прямая поставка за 515,69 ₽ - уже со скидкой -48% https://sl.aliexpress.ru/p?key=ZJKuZYd](Смотри, что есть на AliExpress! 10 шт./лот, перезаписываемый ключ RFID Touch Memory RW1990 iButton для копирования карт, ключей сауны, Далласа, S18 20, Прямая поставка за 515,69 ₽ - уже со скидкой -48% https://sl.aliexpress.ru/p?key=ZJKuZYd)

Если ключи не перезаписываемые, у них на дне в шестнадцатиричной форме код написан по диаметру. Если болванки перезаписываемые, у них на донышке RW1990 или вообще ничего нет.

Сфотни дно ключей, я скажу.

понятно, у меня с кодами, значит не перезаписываемые

Да. Код на заводе вшивают и финализируют/закрывают перезапись.
Можно и перезаписываемый чип финализировать, чтоб код нельзя было изменить.

Можно старые ключи с готовым/не изменным кодом использовать как ключи доступа. Код умеет считывать ключи. Можно допилить легко код до электронного замка. Я такое делал на машину. Давно было. Но там всё просто.

Маленькая справка. Ключи iButton бывают с готовым кодом(не перезаписываемые/финализированные) и презаписываемые. У не перезаписывемых ключей, обычно на дне лазером гравирован их код в шеснадцатеричной системе исчисления(по диаметру дна). Если на дне ключа есть маркировка RW1990, такой можно перезаписать вышеупомянутым девайсом.

  1. А если мне надо сделать два дубликата?
  2. А если мне нужно сделать дубликат ключа на перезаписываемой болванке?

На Али не надо ключи покупать, там дорого. Я в Москве беру по 23 рубля штука