===== Эксперимент 38. Контроль доступа ===== Создадим простейшую систему контроля доступа. В комплект конструктора (в версии MAXI) входит 2 RFID метки. Одна в виде пластиковой карты, вторая в виде брелока. На прошлом эксперименте мы собрали считыватель RFID меток, который выводил номер метки. Запиши номер одной из меток, он пригодится в этом эксперименте. Это будет номер карты, которой разрешен проход, а другим картам вход закрыт. ==== Схема эксперимента ==== Дополнительно подключим LCD дисплей и зуммер {{ :products:esp-iot:exp17_mon.png?direct&600 |}} //Рисунок 1. Монтажная схема эксперимента// ==== Программный код эксперимента ==== import time from machine import I2C, Pin from esp8266_i2c_lcd import I2cLcd import mfrc522 _init() buzzer = Pin(15, Pin.OUT) DEFAULT_I2C_ADDR = 0x3F # Или 0x27 в зависимости от модели микросхемы на плате i2c = I2C(scl=Pin(5), sda=Pin(4), freq=400000) lcd = I2cLcd(i2c, DEFAULT_I2C_ADDR, 2, 16) lcd.backlight_on() rdr = mfrc522.MFRC522(0, 2, 12, 13, 14) #sck, mosi, miso, rst, sda allow_cards = [ '7982e1b3' ] def print_lcd(data): lcd.clear() lcd.putstr(str(data)) def signal_ok(): buzzer.on() time.sleep_ms(200) buzzer.off() def signal_fail(): for i in range(3): buzzer.on() time.sleep_ms(100) buzzer.off() time.sleep_ms(100) while True: (stat, tag_type) = rdr.request(rdr.REQIDL) if stat == rdr.OK: (stat, raw_uid) = rdr.anticoll() if stat == rdr.OK: card_number = '{:x}{:x}{:x}{:x}'.format(raw_uid[0], raw_uid[1], raw_uid[2], raw_uid[3]) print_lcd(card_number) print("Card detected: " + card_number) if (card_number in allow_cards): print('OK') signal_ok() else: print('NO') signal_fail() Объявляем массив с номерами карт, которым доступен вход. В нашем списке одна карта. Замени этот номер на номер своей карты. Номера карт мы узнавали на [[products:laboratory_iot:exp37|прошлом эксперименте]]. allow_cards = [ '7982e1b3' ] В основном цикле, после определения номера считанной метки, проверяем входит ли она в число разрешенных if (card_number in allow_cards): print('OK') signal_ok() else: print('NO') signal_fail() Если да, то выводим в терминал слово 'OK' и вызываем функцию генерации разрешительного звукового сигнала. Если нет, то выводим в терминал слово 'NO' и вызываем функцию генерации запретительного звукового сигнала. В реальных условиях к схеме можно было бы добавить дополнительное исполнительное устройство, например, электромагнит, который удерживает дверь. После обнаружения карты из списка разрешенных, такая схема могла бы отключать электромагнит и дверь можно было бы открыть.