This code in mainly based on this tutorial.
In this project, we will connect ESP32 to a free public MQTT server operated and maintained by EMQX MQTT Cloud, and use the Arduino IDE to program the ESP32. EMQX Cloud is a secure MQTT IoT cloud service platform launched by EMQ. It provides MQTT 5.0 access service with one-stop operation and maintenance management and a unique isolation environment1.
It is necessary to add ESP32 library to the Arduino IDE by Click Tools -> Development Board -> Development Board Management -> Search ESP32 -> Install
Then, install the PubSubClient library by Project -> Load library -> Library manager... -> Search PubSubClient -> Install PubSubClient by Nick O’Leary