Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
products:laboratory_iot:exp37 [2020/05/22 18:00] labuser29products:laboratory_iot:exp37 [2024/11/23 16:33] (текущий) labuser30
Строка 11: Строка 11:
 В комплект нашего конструктора (в версии MAXI) входит RFID считыватель и две метки — одна в формате карты, вторая в виде брелока. В комплект нашего конструктора (в версии MAXI) входит RFID считыватель и две метки — одна в формате карты, вторая в виде брелока.
  
-Проведем эксперимент с RFID.+Проведем эксперимент с RFID. Для работы с модулем приемника нам потребуется специальная библиотека. Ее нужно скачать и записать в память микроконтроллера, так же как [[products:laboratory_iot:exp29|мы это делали ранее]]. 
 + 
 +<WRAP center round download 60%> 
 +{{ :products:esp-iot:mfrc522.zip |}} 
 +</WRAP> 
 + 
 +В этом архиве находятся два файла mfrc522.py и mfrc522.mpy. Это одна и та же библиотека, но в разных формах. Файл с расширением .py это исходный код библиотеки, его можно открыть и почитать, если интересно разобраться в том, как устроена библиотека. А файл .mpy это предварительно откомпилированная библиотека в виде бинарного файла.  
 + 
 +Дело в том, что мы пишем программу на понятном человеку языке, в котором есть понятные по названию переменные, понятные функции, операторы с понятными названиями. Но в микроконтроллере всего этого нет. Для него переменная — это просто место в оперативной памяти, у которого нет имени, есть только адрес. Просто интерпретатор Python прежде чем приступить к исполнению программы, сначала транслирует ее в свой внутренний байт-код, который совершенно не понятен человеку, зато хорошо исполняется интерпретатором. Так вот процесс трансляции требует достаточно больших ресурсов, в том числе оперативной памяти. Чтобы микроконтроллеру было проще мы рекомендуем загружать в него предварительно откомпилированные версии библиотек, а обычные использовать для самостоятельного изучения. Итак загрузи в память микроконтроллера  
 +файл ''mfrc522.mpy''
 + 
 +==== Схема эксперимента ==== 
 + 
 +{{ :products:esp-iot:16_mon.png?direct&600 |}} 
 +//Рисунок 1. Монтажная схема эксперимента// 
 + 
 +==== Программный код эксперимента ==== 
 +<file python Exp37.py[enable_line_numbers="2", start_line_numbers_at="1"]> 
 +import mfrc522 
 +_init() 
 + 
 +rdr = mfrc522.MFRC522(0, 2, 12, 13, 14) #sck, mosi, miso, rst, sda 
 + 
 +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("Card detected: " + card_number) 
 +</file> 
 + 
 +Подключаем библиотеку для работы со считывателем RFID меток 
 +<code python[enable_line_numbers="2", start_line_numbers_at="1"]> 
 +import mfrc522 
 +</code> 
 + 
 +Создаем объект считывателя, указываем как подключен модуль 
 +<code python[enable_line_numbers="2", start_line_numbers_at="4"]> 
 +rdr = mfrc522.MFRC522(0, 2, 12, 13, 14) #sck, mosi, miso, rst, sda 
 +</code> 
 + 
 +В основном цикле запрашиваем данные о состоянии считывателя 
 +<code python[enable_line_numbers="2", start_line_numbers_at="7"]> 
 +    (stat, tag_type) = rdr.request(rdr.REQIDL) 
 +</code> 
 + 
 +Если обнаружена метка, то запрашиваем номер метки 
 +<code python[enable_line_numbers="2", start_line_numbers_at="10"]> 
 +        (stat, raw_uid) = rdr.anticoll() 
 +</code> 
 + 
 +Формируем строку с номером карты для отображения пользователю 
 +<code python[enable_line_numbers="2", start_line_numbers_at="13"]> 
 +            card_number = '{:x}{:x}{:x}{:x}'.format(raw_uid[0], raw_uid[1], raw_uid[2], raw_uid[3]) 
 +</code> 
 + 
 +Метод ''format()'' принимает произвольное количество аргументов и выполняет их подстановку в указанных местах строки, относительно которой он вызван. В строке- шаблоне есть специальные метки в фигурных скобках. На их места подставляются соответствующие аргументы метода. Полученную таким образом строку выводим в терминал 
 + 
 +<code python[enable_line_numbers="2", start_line_numbers_at="14"]> 
 +            print("Card detected: " + card_number) 
 +</code> 
 + 
 +Оператор ''+'' в данном случае выполняет функцию конкатенации (склейки строк) так как находится в контексте строк, а не чисел. 
 + 
 +<WRAP center round info 60%> 
 +[[https://pythonworld.ru/osnovy/formatirovanie-strok-metod-format.html|Подробнее о format()]] 
 +</WRAP>