Возможно, кому-нибудь будет полезно:
Обнаружил, что на ESP8266 ардуиновская digitalWrite перед собственно установкой уровня пина ещё отключает на нём ШИМ и генерацию импульсов (которые могли быть запущены функциями analogWrite и tone соответственно). При большом числе вызовов эти вспомогательные действия могут занимать заметное время.
Cоорудил макросы, которые просто устанавливают указанный уровень на пине и работают значительно быстрее:
Код:
#define pinHigh(pin) (*portOutputRegister(digitalPinToPort(pin)) |= digitalPinToBitMask(pin))
#define pinLow(pin) (*portOutputRegister(digitalPinToPort(pin)) &= ~digitalPinToBitMask(pin))
Скорее всего, будет работать и под ESP32, но пока не проверял.