Если у вас есть принтер Q2 и QIDI Box и вы хотите использовать сторонние филаменты с автоматическим определением — эта статья для вас.
Разберём структуру RFID-меток, как их записывать и как настроить QIDIStudio для работы с кастомными прутками.
Правовой дисклеймер:
Все изменения вы вносите на свой страх и риск. Статья исключительно в образовательных целях, автор не несет ответственности за использование сведений из статьи, как и программного обеспечения представленного в статье. Все предоставляется "AS IS" (как есть).
Все манипуляции производились на версии прошивки Q2 v1.1.1
Как это работаетQIDI Box считывает RFID-метку на катушке и определяет три параметра:
- Тип материала (PLA, PETG, ABS, PA6-CF20 и т.д.)- Цвет- Производитель
Эти данные передаются в QIDIStudio при синхронизации и автоматически подбирают нужный профиль печати.
Какие метки нужны- Тип: MIFARE Classic 1K (совместимые)
- Протокол: ISO/IEC 14443-A
- Частота: 13.56 MHz
Обычные NFC-метки не подойдут. NTAG213, NTAG215 и подобные — это другой стандарт. Нужны именно MIFARE Classic 1K, продаются как стикеры на Ozon.
Где в Box находится ридерRFID-считыватель как показали эксперименты, расположен в двух крайних выступах между слотами. По-этому у бобины метка-стикер должна быть наклеена на левую и правую стороны. Исходя из этого, неизвестно в какой слот вы установите катушку. Ничего не поделать, придется клеить на каждую сторону.
Я сделал проще, так как 1 метка примерно 16р из китая, то можно забить. но жаба таки душит выбрасывать катушку с работающей меткой и к тому же перезаписываемой, я напечатал пластиковый бокс, который можно потом отодрать и вынуть метку, а потом все по новой ) Эдакий "cap" толщиной 0,6, который потом не жалко будет раскурочить и достать метку
Структура данных на метке
Данные записываются в **Sector 1, Block 0** (абсолютный блок #4). Полный блок — 16 байт:
XX YY ZZ 00 00 00 00 00 00 00 00 00 51 49 44 49Номер байта Что этоОткуда брать значение0Тип материалаНомер [fila{N}] секции из officiall_filas_list.cfg1ЦветИндекс из `[colordict]`2ПроизводительID из `[vendor_list]`3–11РезервНули 12–15Сигнатура51 49 44 49 = ASCII "QIDI"
Сигнатура `QIDI` необязательна, но рекомендуется — с ней точно работает. Значения записываются в hex. Например, десятичное 51 = `0x33`.
Справочник кодов
Сам справочник находится в конфигах клипера, файл officiall_filas_list.cfg, сделайте бекап перед изменениями.
На самом деле справочник вы можете набрать по своему желанию, главное сохраняйте порядок и уникальность id.
После каждого редактирования этого справочника, перезапускайте принтер полностью, вместе с боксом. Я пробовал перезапускать только клиппер, это не работает )
Мой справочник примерный такой:
Производители
Палитра цветов
Менять палитру не рекомендую, и как правило это и не требуется.
Типы материалов (частичный список)
Полный список — в файле `officiall_filas_list.cfg` на принтере.
Вы можете добавлять свои по желанию, главное сохранять уникальность индексации, вот пример нескольких моих:
Примеры записи RFID данныхЧто записываемМатериалЦвет ВендорДанныеNIT PETG белый51 → `33`1 → `01`2 → `02`33010200000000000000000051494449Polymaker PETG-CF17 чёрный54 → `36`2 → `02`4 → `04`36020400000000000000000051494449PIC ABS-GF6 красный53 → `35`18 → `12` 5 → `05`35120500000000000000000051494449Чем записывать меткиAndroid
BOX Rfid - (Андроид) модифицированое моё приложение от (QIDI-RFID) с добавленным функционалом подгрузки своего справочника кодов
QIDI-RFID — (Андроид) специализированное приложение, но имеет дикий недостаток, нельзя подгружать кастомных вендоров и типы
MIFARE Classic Tool (MCT) — (Андроид) низкоуровневая читалка и писалка
Windows (нужен USB RFID writer: ACR122U или PN532)
BoxRFID — Electron-приложение, удобный GUI, импорт списка филаментов (проверял, но не шил, так как нет устройства)
Qidi_RFID_App — Rust/Tauri, кроссплатформенное (не проверял)
Что НЕ работает
NFC Tools — (Андроид) работает только с NDEF-записями, не умеет писать сырые данные в блоки MIFARE
Аутентификация Rfid меток
При работе с метками используются два ключа, но с заводским работает 100%:
Кастомный QIDI: D3 F7 D3 F7 D3 F7, Метки, ранее записанные через QIDI BoxЗаводской MIFARE : FF FF FF FF FF FF , Чистые / новые метки
Приложения если и попросят ключи, то для записи пробуют оба ключа автоматически.
Настройка профилей в QIDIStudio
Чтобы синхронизация работала, в QIDIStudio должен быть профиль филамента с правильным `filament_id`.
Формат filament_id
QD_1_V_M
Пример:
Polymaker PA6-CF20 → vendor `4`, fila (материал) `56` → `QD_1_4_56`
Как создать профильДля упрощения всего этого головняка, накидал утилиту QidiStudio Profiler - сама прописывает системные профили и меняет id для Qidi Box. Все описание заморочек с профилями, как работает и что делает, прочитайте там же.
Box
И вот мы подобрались к самому боксу )
Есть один неприятный момент от самих Qidi
Суть проблемы определения производителя (vendor) по RFID
Производители коробки тут подложили с...
Принтер QIDI Q2 корректно определяет материал (byte 0) и цвет (byte 1) с RFID-метки, но производитель, всегда отображается как QIDI (code 1), независимо от записанного значения в метке в byte 2.
Дисклеймер
Все описание по патчу, я оформил в репе на гитхабе Qidi Q2 Issues .
Причина
В прошивке принтера модуль `/home/mks/klipper/klippy/extras/box_rfid.so не читает byte 2 (vendor) из данных метки. Вместо этого значение vendor захардкожено:
filament = data[0] # byte 0 — материал нормcolor = data[1] # byte 1 — цвет норм# data[2] (vendor) — игноритself.stepper.box_extras.save_variable("vendor_...", 1) # навсегда QIDI )) Решение
Заменить либу box_rfid.so на пропатченный питон box_rfid.py, который читает vendor из byte 2. Сам `box_rfid.py` основан на реверсе из qidi-community/Plus4-Wiki.
Шаги
1. Подключиться к принтеру по SSH
ssh mks@чототам адрес# пароль: makerbase
2. Важно! Сделать бэкап оригинала:
cp /home/mks/klipper/klippy/extras/box_rfid.so ~/box_rfid.so.bak
3. Скопировать пропатченный box_rfid.py на принтер:
scp ~/box_rfid.py mks@:/home/mks/klipper/klippy/extras/
4. Удалить box_rfid.so чтобы Klipper подхватил питоновскую версию:
sudo rm /home/mks/klipper/klippy/extras/box_rfid.so
5. Полностью перезагрузить принтер.
Суть патча
В файле box_rfid.py, в методе _schedule_rfid_read() добавлена переменная vendor и изменена установка этой переменной в variables
Откат
Если что-то пошло не так:
cp ~/box_rfid.so.bak /home/mks/klipper/klippy/extras/box_rfid.sorm /home/mks/klipper/klippy/extras/box_rfid.py
Перезагрузить принтер
Важно помнитьПосле OTA-обновления прошивки QIDI файл `box_rfid.so` и `officiall_filas_list.cfg` вернутся в исходное состояние — патч нужно будет применить заново, а `officiall_filas_list.cfg` бекапте при каждом изменении.Community-модуль `box_rfid.py` основан на реверсе из qidi-community/Plus4-Wiki. Немного допилен и проверен на живую на QIDI Q2 Box, все работает.Пропатченный файл хранится в репозитории: Qidi Q2 Issues
Материал подготовлен на основе реверс-инжиниринга протокола QIDI Box, анализа логов, профилей и конфигов QIDIStudio и тестирования записи меток.