| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия |
| products:laboratory_iot:exp37 [2020/05/22 18:37] – labuser29 | products:laboratory_iot:exp37 [2024/11/23 16:33] (текущий) – labuser30 |
|---|
| В этом архиве находятся два файла mfrc522.py и mfrc522.mpy. Это одна и та же библиотека, но в разных формах. Файл с расширением .py это исходный код библиотеки, его можно открыть и почитать, если интересно разобраться в том, как устроена библиотека. А файл .mpy это предварительно откомпилированная библиотека в виде бинарного файла. | В этом архиве находятся два файла mfrc522.py и mfrc522.mpy. Это одна и та же библиотека, но в разных формах. Файл с расширением .py это исходный код библиотеки, его можно открыть и почитать, если интересно разобраться в том, как устроена библиотека. А файл .mpy это предварительно откомпилированная библиотека в виде бинарного файла. |
| |
| Дело в том, что мы пишем программу на понятном человеку языке, в котором есть понятные по названию переменные, понятные функции, операторы с понятными названиями. Но в микроконтроллере всего этого нет. Для него переменная — это просто место в оперативной памяти, у которого нет имени, есть только адрес. Просто интерпретатор Python прежде чем приступить к исполнению программы, сначала транслирует ее в свой внутренний байт- код, который совершенно не понятен человеку, зато хорошо исполняется интерпретатором. Так вот процесс трансляции требует достаточно больших ресурсов, в том числе оперативной памяти. Чтобы микроконтроллеру было проще мы рекомендуем загружать в него предварительно откомпилированные версии библиотек, а обычные использовать для самостоятельного изучения. | Дело в том, что мы пишем программу на понятном человеку языке, в котором есть понятные по названию переменные, понятные функции, операторы с понятными названиями. Но в микроконтроллере всего этого нет. Для него переменная — это просто место в оперативной памяти, у которого нет имени, есть только адрес. Просто интерпретатор 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> |