Click to order
Cart
Ваша корзина
Total: 
Ваше имя
Если планируете получать транспортной компанией, то ФИО
Ваш e-mail
Ваш телефон
Выбор доставки
Комментарий
Промокод
Подписаться на новости
Согласие на обработку персональных данных
Payment method
Content Oriented Web
Make great presentations, longreads, and landing pages, as well as photo stories, blogs, lookbooks, and all other kinds of content oriented projects.
Как написать свою программу
Мини-инструкции для самостоятельного изменения встроенного программного обеспечения, написанного на MicroPython
Подключение к USB
Все устройства с USB интерфейсом имеют доступ к интерактивной консоли Python - REPL.
В первую очередь, нужно подключиться к устройству и убедиться, что операционная система определила интерфейс CDC (виртуальный последовательный порт), а для некоторых устройств и внутренний накопитель.

Для доступа к REPL необходимо подключиться к виртуальному последовательному порту какой-либо из программ-терминалов (picocom, minicom, miniterm, putty и т.п.) на скорости 115200.

Возможно, программа устройства использует данный порт для вывода отладочной информации, тогда после правильного подключения, она должна быть видна и читаема.

Для того, чтобы получить доступ к интерактивной консоли Python, требуется остановить программу и, возможно, сторожевой таймер.
Как правило, это делается нажатием сочетания клавиш Ctrl-C.
В ответ должно отобразиться приглашение интерактивной консоли " >>> ".

В некоторых случаях могут быть исключения, тогда следует связаться с тех.поддержкой для уточнения процедуры перехода в REPL.
Драйвер
В Windows7 понадобится установить драйвер CDC.
В Windows 8, Windows 10, Linux, macOS установка драйвера не требуется.
Если в Windows8 не заработал системный драйвер CDC, воспользуйтесь инструкцией.
Пример интерактивной консоли REPL
Пример файловой системы в памяти считывателя
В некоторых устройствах при подключении к ПК по интерфейсу USB устройство определяется в ОС, как flash память с меткой ODFLASHxxxx. На встроенной памяти хранится исполняемая программа устройства и дополнительные данные.

По-умолчанию, накопитель находится в режиме "только для чтения".

Программа устройства состоит из двух обязательных файлов и возможных дополнительных данных.
boot.py - файл, который всегда загружается первым.
main.py - основой файл программы.
pybcdc.inf - драйвер последовательного порта (для ОС Windows).
Модуль sh для работы с файлами
Для удобства работы мы собрали в модуль самые используемые файловые утилиты.

Импорт модуля: from sh import *

Доступные команды:
  • cp('from', 'to') - копировать файл из 'from' в 'to'.
  • mv('from', 'to') - переместить файл из 'from' в 'to'.
  • ls('path', attr=False, ext=None) - показать содержимое папки из пути 'path'. Без параметров - из текущей. Опциональный параметр attr=True задает подробный вывод; ext - задает расширение для выводимых файлов, например, ls(ext='txt').
  • cd('path') - перейти в папку из пути 'path'. Без параметров - в корневую.
  • cat('filename') - выводит содержимое файла с именем filename
  • rm('filename') - удалить файл с именем filename
  • grep('filename', line=0, regex=None) - выводит содержимое файла с именем filename. Возможен вывод отдельной строки или по регулярному выражению. Параметр line указывает, какую строку нужно вывести.Параметр regex задаёт регулярное выражение.
  • ed('filename') - текстовый редактор.
Модуль rfid_utils
Модуль rfid_utils упрощает работу с rfid устройствами.

Включает в себя следующие объекты и классы:
Объект GLED - зелёный светодиод (класс MicroPython - Pin)
Объект RLED - красный светодиод (класс MicroPython - Pin)
Объект OUT - выходной канал (класс MicroPython - Pin)Объект IN - входной канал (класс MicroPython - Pin)
Класс Buzzer - звукогенератор
Класс СardFilter - инструмент для защиты от повторного прикладывания
Класс RFID - инструмент для упрощения работы с картами
Класс RFID
Класс упрощает работу с RFID считывателем.
Конструктор имеет следующие параметры (gain=rfid.G_33dB, key=None, typ=None, ul=None)
gain - мощность излучателя.
key - ключ шифрования
typ - тип ключа шифрования A/B
ul - ключ Ultralight для карт Mifare Ultralight

Класс имеет следующие методы:
  • read(fmt='hU*', key=None, typ=None, ul=None) - прочитать карту согласно строке форматирования fmt. По-умолчанию UID в HEX.
  • write(data, key=None, typ=None, ul=None) - запись данных, где data - данные в формате bytearray, размер должен точно совпадать с размером блока метки.
Класс Buzzer
Класс Buzzer упрощает работу со звуковым излучателем.
Имеет следующие методы:
  • on() - включить генератор
  • off() - выключить генератор
  • beeps(timeout) - запустить генератор на timeout миллисекунд.
  • beep(timeout) - запустить генератор на timeout миллисекунд async версия.
Класс СardFilter
Класс CardFilter создает кэш поднесённых карт для исключения повторного срабатывания.
Инициализация класса CardFilter(lifetime), где lifetime - время нахождения записи в фильтре в секундах. Класс при инициализации использует значение из time.time(), поэтому при использовании внешней синхронизации время должно быть уже установлено.
Имеет следующие методы:
  • append(data) - добавить данные
  • clean(ts) - провести чистку, где ts - текущее time.time()

Для начала сделаем программу, которая при поднесении любой карты зажигает один светодиод и печатает UID в консоль .
import pyb
from rfid_utils import RFID, GLED

print("User code started")
rfid = RFID()
while 1:
        pyb.delay(100)
        uid = rfid.read()
        if uid:
            print(uid)
            GLED.on()
            pyb.delay(300)
            GLED.off()
Простой дверной RFID замок на 24 строки
Удалим всё в main.py и запишем:
from binascii import hexlify
import pyb
from rfid_utils import RFID, GLED, RLED, LOCK, Buzzer

settings = {"USER_LIST" : {"030e873e": "user1", "11111111": "user2", "11111112" : "user3"}}

rfid = RFID()
buzz = Buzzer()
LOCK.on()

while 1:
    uid = rfid.read()
    if hexlify(uid).decode() in settings['USER_LIST']:
        LOCK.off()
        GLED.on()
        buzz.beeps(50)
        GLED.off()
        pyb.delay(3000)
        LOCK.on()
    else:
        RLED.on()
        buzz.beeps(500)
        RLED.off()
        pyb.delay(1500)
Пример использования фильтра карт
Пример использования
from time import time
import pyb
from rfid_utils import RFID, CardFilter, GLED


def run():
    print("User code started")
    rfid = RFID()
    c_filter = CardFilter(15)
    while 1:
        pyb.delay(500)
        c_filter.clean(time())
        uid = rfid.read()
        if uid and uid in c_filter:
            GLED.on()
            print(uid)
            c_filter.append(uid)
            GLED.off()