Промпты для программирования устройств с помощью ИИ
Готовые промпты для ИИ-агентов, которые пишут прикладной код для устройств на Lua, uLua и MicroPython.
Если вы будете разрабатывать с помощью ИИ, выберите язык прошивки и скопируйте соответствующий промпт целиком. Замените текст в квадратных скобках своими данными и добавьте исходный код, если он уже есть.
Перед отправкой промпта укажите:
- точную модель и исполнение;
- задачу и ожидаемое поведение;
- схему подключения, назначение выводов и электрические уровни;
- используемые интерфейсы, протоколы и настройки;
- текущие файлы проекта, сообщения журнала и способ воспроизвести ошибку.
Не передавайте ИИ пароли, ключи доступа и другие секреты. Если модель устройства или версия прошивки неизвестны, сначала попросите агента помочь их определить, не переходя к написанию аппаратно-зависимого кода.
Lua
Промпт предназначен для ODNFC с Lua-прошивкой, LuaTerm и аналогичных устройств. Полный справочник доступен в хранилище документации Lua, а руководства устройств объясняют запуск программы на конкретной модели.
Ты помогаешь разработать прикладную программу для устройства на встроенной
Lua 5.3.
Устройство: [точная модель и исполнение].
Версия прошивки: [версия или "неизвестна"].
Подключение и периферия: [выводы, интерфейсы, электрические уровни].
Задача: [что должна делать программа].
Текущий код и журнал: [вставить код и сообщения либо "проекта пока нет"].
Контекст среды:
- Это микроконтроллерное устройство на ESP32 со встроенной RTOS, а не настольная
Lua и не NodeMCU. Доступны только модули выбранной модели и версии прошивки.
- Пользовательская точка входа — usercode.lua. Файл
хранится как /public/usercode.lua и автоматически выполняется после системной
инициализации.
- Небольшой проект может состоять только из usercode.lua. В большом проекте
вынеси части в дополнительные Lua-файлы и подключай их через require.
Менеджера пакетов repo нет: не используй repo.install,
а перечисли все дополнительные файлы, которые нужно загрузить вместе с
проектом.
- Сеть, веб-интерфейс и системные настройки запускает прошивка. Используй
Settings и API руководства устройства; не перенастраивай сетевой интерфейс из
usercode.lua без явной необходимости.
Ограничения:
- Используй только функции и константы, подтверждённые документацией для этой
модели и версии. Не переноси API из другой Lua-прошивки и не выдумывай имена
модулей. Если данных не хватает, сначала задай уточняющий вопрос.
- Планировщик кооперативный. В каждом длительном цикле или процессе регулярно
отдавай управление через thread.sleep, thread.sleepms или документированный
блокирующий ввод-вывод. Не создавай цикл активного ожидания.
- Экономь ОЗУ и процессор: избегай больших таблиц, множества временных объектов,
лишних потоков и частой конкатенации строк. Учитывай паузы сборщика мусора.
- Если в настройках включён сторожевой таймер, сбрасывай его в основном или
наиболее ответственном цикле. Не маскируй зависание безусловным отдельным
потоком сброса.
- Обрабатывай ожидаемые ошибки сети и периферии, но не скрывай остановку
программы и диагностические ошибки. Не блокируй веб-интерфейс.
- Не помещай пароли и токены в исходник; вынеси изменяемые параметры в настройки
устройства или отдельный конфигурационный файл.
Документация, которую нужно использовать:
1. Сначала прочитай руководство для устройства:
ODNFC — https://unitx.pro/docs/rfid-nfc/odnfc/programming-lua/
LuaTerm Mini / Mini Pro —
https://unitx.pro/docs/controllers-interfaces/luaterm-mini/
2. Затем открой только страницы нужных модулей в полном справочнике:
https://files.unitx.pro/?path=docs%2Flualibs
3. HTML-зеркало справочника: https://unitx.pro/docs/programming/lua/
Не обходи весь справочник заранее: сначала прочитай страницу устройства, затем
открывай только документацию API, которые нужны для задачи.
При расхождении общих примеров и руководства устройства приоритет имеет
руководство конкретного устройства и его версия прошивки.
Порядок работы:
1. Кратко повтори модель, задачу, выбранные интерфейсы и все допущения.
2. Перечисли API, на которые опирается решение, со ссылками на документацию.
3. Предложи минимальную структуру проекта.
4. Выдай полное содержимое каждого файла без псевдокода и пропусков.
5. Объясни, куда загрузить файлы, как сохранить и перезапустить программу.
6. Дай пошаговую проверку: сначала безопасная диагностика без нагрузки, затем
периферия, рабочий сценарий, журнал, свободная память и сторожевой таймер.
7. Отдельно перечисли то, что можно подтвердить только на реальном устройстве.
uLua
uLua — отдельный компактный язык с Lua-подобным синтаксисом. Это не сокращённый набор библиотек обычной Lua: исходник компилируется на компьютере в байт-код для выбранного устройства. Точный синтаксис и API собраны в полном справочнике uLua.
Ты помогаешь написать программу для устройства на uLua.
Устройство: [Например, GPIO Extender uLua или USB WatchDog ARU-P2 uLua, точное исполнение].
Версия прошивки: [версия или "неизвестна"].
Подключение и периферия: [выводы, датчики, реле, UART/USB и уровни сигналов].
Задача: [что должна делать программа].
Текущий код и ошибка компилятора/IDE: [вставить либо "проекта пока нет"].
Контекст среды и жизненный цикл:
- uLua — компилируемый язык для небольшого контроллера, а не обычный
интерпретатор Lua. Компилятор на компьютере проверяет исходник для выбранной
модели и создаёт байт-код.
- Проект приложения — один исходный файл .lua. Код верхнего уровня является
точкой входа: обычно он настраивает периферию, объявляет функции верхнего
уровня и переходит в основной цикл либо оставляет работу таймерам.
- «Скомпилировать и запустить» выполняет программу временно. После проверки
команда «Записать» сохраняет байт-код во флеш-памяти, и он автоматически
запускается при включении. Сначала проверяй код на безопасной нагрузке.
- Набор hw.*, cmd.*, mlib.* и других символов зависит от модели и версии
прошивки. Используй только документированные для них API и выводы.
Обязательные ограничения uLua:
- Нет таблиц, pairs/ipairs, методов object:method(), require/load/dofile,
модулей, REPL, сборщика мусора, чисел с плавающей точкой, анонимных и
вложенных функций, замыканий, varargs и обобщённого for.
- Все вычисления целочисленные; сохраняемое значение — знаковое 28-битное число.
Деление целочисленное. Учитывай диапазон и переполнение.
- Пользовательские функции должны быть именованными и объявленными на верхнем
уровне. Внешние локальные переменные внутри них не захватываются — передавай
значения аргументами или объявляй константы внутри функции.
- Обычное число не является дескриптором вывода. Используй hw.p1, hw.p2 и другие
константы из руководства; если номер получен во время работы, преобразуй его
документированной функцией hw.pin(number).
- В программе допускается до 16 функций и до 8 одновременно активных вызовов.
Сохранённый байт-код должен помещаться в 2032 байта.
- Временный запуск файла до 250 байт использует ОЗУ. Байт-код размером от 251
до 2048 байт использует ту же страницу флеш-памяти, что и программа
автозапуска, поэтому перед таким тестом может потребоваться очистить
сохранённый код.
- Временные строки и аппаратные ресурсы имеют дополнительные ограничения.
Избегай длинных цепочек конкатенации, активного ожидания и лишних функций.
В длительных циклах добавляй hw.delay_ms(), если задача не требует другого.
Документация, которую нужно использовать:
1. Сначала прочитай руководство выбранного устройства:
GPIO Extender uLua —
https://unitx.pro/docs/controllers-interfaces/gpio-extender-ulua/
USB WatchDog ARU-P2 uLua —
https://unitx.pro/docs/watchdog/aru-p2-ulua/
2. Полный справочник uLua:
https://files.unitx.pro/?path=docs%2Fulua
3. HTML-зеркало справочника:
https://unitx.pro/docs/programming/ulua/
Не загружай всё зеркало заранее: прочитай страницу выбранного устройства,
описание языка и только нужные страницы модулей.
При расхождении общего справочника и страницы устройства приоритет имеет
страница устройства: у моделей различаются доступные выводы и периферия.
Порядок работы:
1. Кратко повтори модель, распиновку, задачу и допущения. Если точная модель или
назначение вывода неизвестны, остановись и задай вопрос.
2. Перечисли документированные функции и константы, которые будешь использовать.
3. Выдай один полный компилируемый файл `.lua` без псевдокода.
4. Проверь решение по всем ограничениям uLua и отдельно отметь риск превышения
размера байт-кода или конфликта аппаратных функций.
5. Дай последовательность проверки в IDE: компиляция, временный запуск,
безопасная проверка входов/выходов, остановка, запись и повторный запуск
после отключения питания.
6. Не утверждай, что код проверен на железе, если такой проверки не было.
MicroPython
MicroPython поддерживается только в ранее выпущенных устройствах. Используйте его для существующих установок, а для новых проектов выбирайте Lua.
Материалы: руководство MicroPython для OD и архив документации.
Ты помогаешь поддержать проект на MicroPython.
Устройство: [точная модель и исполнение].
Версия прошивки: [версия или "неизвестна"].
Текущая точка входа: usercode.py.
Подключение и периферия: [RFID, выводы, сеть, RS485 и уровни сигналов].
Задача: [что должна делать программа].
Текущий код и журнал: [вставить код и сообщения либо "проекта пока нет"].
Контекст среды и жизненный цикл:
- Это старый встроенный порт MicroPython для устройства на ESP32, а не CPython
и не современная версия upstream MicroPython. Нельзя предполагать наличие pip,
стандартных пакетов ПК или новых API MicroPython.
- Руководства ODNFC используют usercode.py с асинхронной функцией run(), которую
запускает системный код.
- В прошивке с usercode.py системный код уже управляет запуском, сетью,
веб-интерфейсом и циклом событий. Не вызывай asyncio.run() и не заменяй
системные загрузочные файлы, если руководство конкретной прошивки прямо этого
не требует.
- Дополнительные совместимые файлы `.py` загружаются на устройство вместе с
проектом. Перечисли их явно; не предлагай установить пакет командой pip.
Ограничения:
- Используй только встроенные модули, подтверждённые для этой модели и версии:
например, rfid_utils, config.settings, webserver.eprint или другие модули
руководства устройства. Не подменяй их похожими библиотеками из интернета.
- ОЗУ и вычислительные ресурсы ограничены. Избегай больших коллекций, долгих
синхронных вычислений и множества временных объектов; учитывай паузы GC.
- В асинхронных циклах регулярно передавай управление через
await uasyncio.sleep_ms(...). Не используй блокирующие функции без проверки
их поведения в этой прошивке.
- Если включён WDT, создавай и сбрасывай его по примеру для конкретного
устройства.
- Ctrl+C в консоли останавливает пользовательскую программу. После сохранения
кода обычно требуется перезагрузка; заранее опиши безопасный способ
восстановления ошибочного файла.
- Не помещай пароли и токены в исходник.
Документация, которую нужно использовать в таком порядке:
1. Руководство ODNFC:
https://unitx.pro/docs/rfid-nfc/odnfc/programming-mpy/
2. Для сетевой версии:
https://unitx.pro/docs/rfid-nfc/odnfc/lan-mpy/
Для версии RS485:
https://unitx.pro/docs/rfid-nfc/odnfc/rs485-modbus-mpy/
3. Архивный справочник и примеры:
https://files.unitx.pro/?path=docs%2Flegacy
4. Общее историческое руководство MicroPython:
https://files.unitx.pro/api/download/docs/MicroPython_for_OD.pdf
5. Краткая навигация по зеркалу:
https://unitx.pro/docs/programming/micropython/
Не загружай PDF и архив целиком. Сначала прочитай руководство конкретной модели,
а в больших справочниках ищи только нужный модуль, класс или функцию.
Если источники расходятся, приоритет имеет руководство точной модели и версии
прошивки. PDF используй только как исторический справочник по доступной версии
MicroPython, а не как доказательство точки входа или наличия модуля.
Порядок работы:
1. Назови выбранную схему запуска и источник, который её подтверждает.
2. Перечисли используемые встроенные модули и все допущения.
3. Предложи минимальную структуру файлов и выдай их полное содержимое.
4. Сохрани совместимость с существующей прошивкой; не модернизируй синтаксис и
API без проверки.
5. Дай пошаговую проверку в консоли и веб-интерфейсе, затем проверку после
перезагрузки и способ восстановления при ошибке.
6. Отдельно перечисли всё, что требует проверки на реальном устройстве.