Перейти к содержанию
GPIO Extender uLua: программирование и первый запуск

GPIO Extender uLua: программирование и первый запуск

Подключение GPIO Extender uLua, работа с веб-IDE, запись автономной программы и ограничения GPIO, ШИМ, АЦП, UART, WS2812 и DHT22.

GPIO Extender uLua исполняет программу в самом контроллере: он может опрашивать датчики, реагировать на входы, управлять ШИМ, обмениваться по UART и выполнять задачи по таймеру без постоянно запущенной программы на ПК.

Это отдельное исполнение устройства. Код uLua нельзя загрузить в GPIO Extender-2 или GPIO Extender-F.

Если вы будете разрабатывать с помощью ИИ, скопируйте промпт для uLua.

Первый запуск в IDE

  1. Подключите контроллер к USB и откройте uLua веб-IDE. Настольная версия доступна в разделе uLua-Editor.
  2. Нажмите «Подключить», выберите USB CDC-порт и остановите старую программу кнопкой «Стоп».
  3. Вставьте код, нажмите «Скомпилировать», затем «Скомпилировать и запустить». Этот запуск временный и исчезнет после отключения питания.
  4. Проверьте входы и выходы с безопасной нагрузкой. После проверки нажмите «Записать», чтобы программа запускалась при включении.

uLua веб-IDE для GPIO Extender

Кнопка IDEДействие
Подключитьоткрыть последовательный порт через Web Serial
Скомпилироватьпроверить код без отправки в устройство
Скомпилировать и запуститьзапустить код без записи во флеш-память
Стопостановить текущую программу
Записатьсохранить код во флеш-память
Прочитатьпрочитать сохранённый байткод, декомпилировать его и показать восстановленный код в редакторе
Очистить сохранённый кодудалить код из флеш-памяти
Защитить сохранённый кодзапретить чтение сохранённого кода

После декомпиляции видна логика программы, но не исходный файл: комментарии, форматирование и первоначальные имена переменных и функций не восстанавливаются. Если код защищён, прочитать его через обычный API или IDE нельзя.

Возможности и ограничения

Поддерживаются локальные переменные int32, арифметика и битовые операции, if, while, repeat, for, функции, строки и библиотеки для GPIO, ШИМ, АЦП, измерения частоты и коэффициента заполнения, UART, WS2812, DHT22 и таймеров.

Не поддерживаются таблицы, сборщик мусора (GC), замыкания, типы данных кроме строк и int32, а также динамический require.

ЗадачаAPIОграничение
GPIOhw.gpio_init, hw.gpio_set, hw.gpio_getперед сменой занятой роли верните вывод в hw.inp
ШИМ (PWM)hw.pwm_init, hw.pwm_sethw.p2, hw.p3, hw.p6, hw.p7; частота общая
АЦПhw.adc_start, hw.adc_readодин аналоговый вход одновременно; диапазон 0–1023
Частота и коэффициент заполненияhw.capture_freq, hw.capture_dutyhw.p4, hw.p5, hw.p9
UARThw.uart_setup, hw.uart_read, hw.uart_writeTX — hw.p2, RX — hw.p6
WS2812hw.ws2812_writeтолько hw.p4
DHT22hw.dht_temp, hw.dht_hum, hw.dht_tsодна конфигурация; нельзя совмещать с обработчиком hw.gpio_watch на одном выводе

Первая автономная программа

Пример переключает реле на hw.p1 каждым нажатием кнопки на hw.p6. Вход подтянут внутри контроллера: нажатие на GND читается как 0. Сначала проверяйте схему со светодиодом или логическим входом релейного модуля.

local RELAY_PIN = hw.p1
local BUTTON_PIN = hw.p6
local relay = 0

hw.gpio_init(RELAY_PIN, hw.out)
hw.gpio_init(BUTTON_PIN, hw.inp)
hw.gpio_set(RELAY_PIN, relay)

while true do
    if hw.gpio_get(BUTTON_PIN) == 0 then
        relay = 1 - relay
        hw.gpio_set(RELAY_PIN, relay)

        while hw.gpio_get(BUTTON_PIN) == 0 do
            hw.delay_ms(10)
        end
        hw.delay_ms(30)
    end
    hw.delay_ms(10)
end

Дальше