The AnalysIR crew has published an article showing how to achieve accurate PWM for Infrared carrier signals on the ESP8266 NodeMCU:
Quite simple really – just set the baud rate to 10 times the desired Infrared carrier frequency and send a ‘magic’ 8 bit character to achieve the desired duty cycle. Of course we need to take the 1-start bit and 1-stop bit into account plus the 8 bits in each character. Remember that the UART sends the data inverted, so this needs to be taken into account with the characters sent and also in the IR LED driver circuit above, which required 2 transistors instead of the usual one.
More details at AnalysIR blog.