GStepper и опять PCF8574 - расширитель портов

tangous

✩✩✩✩✩✩✩
3 Июл 2025
5
1
Добрый всем день.
Не смотря на спорное утверждение что библиотека GyverStepper не может работать через экспандер PCF8574 хотелось бы выжать максимум.
Подскажите кто может, - как передать в библиотеку всего один пин от PCF8574?
На esp32 закончились все возможные пины и не хватает трех.
Конкретно интересует только DIR. Уже это освободит несколько пинов. (у меня 4 шаговика в проекте)
И совершенно не повлияет на скорость работы двигателя.

C++:
GStepper2<STEPPER2WIRE> stepper1_X(speed, step, DIR);
Может возможно как то передать указатель на порт расширителя? Типа GStepper2(speed, step, &pin_DIR_PCF8574);
Не понимаю как это сделать...

Или как то можно решить мою задачу с помощью виртуального драйвера


C++:
GStepper<STEPPER2WIRE, STEPPER_VIRTUAL> stepper(2048);
 
Изменено:

Bruzzer

★★★✩✩✩✩
23 Май 2020
637
190
Если мне это было бы надо, то я наверное отредактировал в библиотеке в StepperCore.h функцию void setPin(int num, bool state) добавив для ESP32 специальную обработку пина DIR. Это топорно и в общем неправильно, но по быстрому.
C++:
Было
#else
        digitalWrite(_pins[num], state);
#endif

Стало
#else
        if(num == 1){    // для DIR используем расширитель портов
            код для расширителя портов для пина  _pins[num]
        }
        else{ // Для Step используем исходный вариант
            digitalWrite(_pins[num], state);
        }
#endif
Как то вашу задачу можно решить и с помощью виртуального драйвера. Пример есть и в описании и в библиотеке. Разбирайтесь.
 

Bruzzer

★★★✩✩✩✩
23 Май 2020
637
190
@Старик Похабыч,
Управлять то DIR можно и без библиотеки, Только библиотека тогда может стать неработоспособной. Что указывать в качестве DIR при создании объекта? В этот порт будет писать функция stepDir. Как будет работать движение к позиции и планировщик в целом, и т.д.
 

tangous

✩✩✩✩✩✩✩
3 Июл 2025
5
1
@Bruzzer,

По сути я так и сделал. Только не дополнив, а вообще заменив и исключив
digitalWrite. Не слишком красивое решение.
Просто надеялся, что кто то придумал красивое решение.
Сейчас становится актуально. Очень уж удобно работать с дисплеями со встроенным esp32.
LGVL летает. А вот пинов дефицит.
 

Bruzzer

★★★✩✩✩✩
23 Май 2020
637
190
Просто надеялся, что кто то придумал красивое решение.
Смотря в чем видеть красоту (или что хотеть улучшить). Если в минимальной модификации библиотеки с сохранением ее совместимости с существующими проектами, то мой вариант можно улучшить, договорившись о нумерации пинов. Например пины до 128 это пины ардуино, а 128 + N это пин N расширителя порта.
 

tangous

✩✩✩✩✩✩✩
3 Июл 2025
5
1
@Bruzzer,

Кстати. Совсем не понял как работать с виртуальным драйвером по примеру.
Есть у кого более полный пример?
Чтоб хоть понятно было как дергать и назначать пины.