Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
products:laboratory_iot_c:exp37 [2024/12/04 16:35] – [Программный код эксперимента] 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 | + | |
- | + | ||
- | Дело в том, что мы пишем программу на понятном человеку языке, в котором есть понятные по названию переменные, понятные функции, операторы с понятными названиями. Но в микроконтроллере всего этого нет. Для него переменная — это просто место в оперативной памяти, | + | |
- | файл '' | + | |
==== Схема эксперимента ==== | ==== Схема эксперимента ==== | ||
Строка 48: | Строка 40: | ||
void setup() { | void setup() { | ||
Serial.begin(9600); | Serial.begin(9600); | ||
+ | Serial.println(); | ||
SPI.begin(); | SPI.begin(); | ||
rdr.PCD_Init(); | rdr.PCD_Init(); | ||
Строка 62: | Строка 55: | ||
Подключаем библиотеку для работы со считывателем 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]] |
</ | </ | ||
- |