Показаны различия между двумя версиями страницы.
Следующая версия | Предыдущая версия | ||
products:laboratory_iot_c:exp37 [2024/11/23 16:31] – создано labuser30 | products:laboratory_iot_c:exp37 [2024/12/04 17:20] (текущий) – [Программный код эксперимента] labuser30 | ||
---|---|---|---|
Строка 11: | Строка 11: | ||
В комплект нашего конструктора (в версии MAXI) входит RFID считыватель и две метки — одна в формате карты, вторая в виде брелока. | В комплект нашего конструктора (в версии MAXI) входит RFID считыватель и две метки — одна в формате карты, вторая в виде брелока. | ||
- | Проведем эксперимент с RFID. Для работы с модулем приемника нам потребуется специальная библиотека. Ее нужно скачать и записать в память микроконтроллера, так же как [[products: | + | Проведем эксперимент с RFID. Для работы с модулем приемника нам потребуется специальная библиотека |
- | + | [[products: | |
- | <WRAP center round download 60%> | + | |
- | {{ : | + | |
- | </ | + | |
- | + | ||
- | В этом архиве находятся два файла mfrc522.py | + | |
- | + | ||
- | Дело в том, что мы пишем программу на понятном человеку языке, в котором есть понятные по названию переменные, понятные функции, операторы с понятными названиями. Но в микроконтроллере всего этого нет. Для него переменная — это просто место в оперативной памяти, | + | |
- | файл '' | + | |
==== Схема эксперимента ==== | ==== Схема эксперимента ==== | ||
+ | **НУЖНО ИЗМЕНИТЬ СХЕМУ** | ||
{{ : | {{ : | ||
// | // | ||
==== Программный код эксперимента ==== | ==== Программный код эксперимента ==== | ||
- | < | + | < |
- | import mfrc522 | + | #include < |
- | _init() | + | #include < |
- | rdr = mfrc522.MFRC522(0, | + | #define PIN_SS |
+ | #define PIN_RST 16 | ||
- | while True: | + | MFRC522 rdr(PIN_SS, PIN_RST); |
- | | + | |
- | if stat == rdr.OK: | + | String bytesToString(byte *bytes, byte size) { |
- | (stat, raw_uid) = rdr.anticoll() | + | String str; |
+ | for (byte i = 0; i < size; i++) { | ||
+ | str += bytes[i] < 0x10 ? " | ||
+ | | ||
+ | } | ||
+ | return str; | ||
+ | } | ||
- | if stat == rdr.OK: | + | void setup() { |
- | | + | Serial.begin(9600); |
- | print("Card detected: " + card_number) | + | Serial.println(); |
+ | SPI.begin(); | ||
+ | | ||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | if (!rdr.PICC_IsNewCardPresent()) return; | ||
+ | if (!rdr.PICC_ReadCardSerial()) return; | ||
+ | |||
+ | Serial.println("Card detected: " + bytesToString(rdr.uid.uidByte, | ||
+ | rdr.PICC_HaltA(); | ||
+ | } | ||
</ | </ | ||
Подключаем библиотеку для работы со считывателем RFID меток | Подключаем библиотеку для работы со считывателем RFID меток | ||
- | < | + | < |
- | import mfrc522 | + | #include < |
</ | </ | ||
- | Создаем объект считывателя, | + | Задаем псевдонимы для пинов, к которым подключен считыватель: |
+ | <code arduino[enable_line_numbers=" | ||
+ | #define PIN_SS | ||
+ | #define PIN_RST 16 | ||
+ | </ | ||
+ | |||
+ | Создаем объект считывателя, | ||
<code python[enable_line_numbers=" | <code python[enable_line_numbers=" | ||
- | rdr = mfrc522.MFRC522(0, 2, 12, 13, 14) #sck, mosi, miso, rst, sda | + | MFRC522 |
</ | </ | ||
- | В основном | + | Далее мы определили функцию '' |
- | <code python[enable_line_numbers=" | + | <code python[enable_line_numbers=" |
- | (stat, tag_type) = rdr.request(rdr.REQIDL) | + | String bytesToString(byte *bytes, byte size) { |
+ | String str; | ||
+ | for (byte i = 0; i < size; i++) { | ||
+ | str += bytes[i] < 0x10 ? " | ||
+ | str += String(bytes[i], HEX); | ||
+ | } | ||
+ | return str; | ||
+ | } | ||
</ | </ | ||
- | Если обнаружена метка, то запрашиваем номер | + | Инициализируем шину SPI и считыватель меток: |
- | < | + | < |
- | (stat, raw_uid) = rdr.anticoll() | + | |
+ | | ||
</ | </ | ||
- | Формируем строку с номером карты для отображения пользователю | + | В основном цикле мы сначала проверяем приложена ли метка с считывателю, если нет начинаем цикл сначала. Аналогично |
- | < | + | < |
- | | + | if (!rdr.PICC_IsNewCardPresent()) return; |
+ | if (!rdr.PICC_ReadCardSerial()) return; | ||
</ | </ | ||
- | Метод '' | + | Если считывание метки было |
- | + | < | |
- | < | + | |
- | print("Card detected: " + card_number) | + | |
</ | </ | ||
+ | |||
Оператор '' | Оператор '' | ||
+ | |||
+ | Функция '' | ||
+ | <code arduino[enable_line_numbers=" | ||
+ | rdr.PICC_HaltA(); | ||
+ | </ | ||
<WRAP center round info 60%> | <WRAP center round info 60%> | ||
- | [[https://pythonworld.ru/osnovy/formatirovanie-strok-metod-format.html|Подробнее о format()]] | + | * [[https://arduino.ru/Reference/StringObject|Подробнее о строках в Arduino]] |
</ | </ | ||
- |