Welcome to Arduino Stack exchange. There are a lot of discussions and half-completed, or project-specific models available for the ESP32 simulator. My sincere advice is to go ahead and buy real hardware. By the time you take to set up the simulators (download the repo, set environment variables, connect GDB debugger or other), you would have received the ESP32 hardware itself.
Why you should go for real hardware?
- An emulator can never match the timing of real ESP32 hardware. if you
have any timing-related issue, you cannot fix it using an ESP32 emulator
- Real issues in hardware (bounce/debounce of switches, surge current and brownout voltages, rise time and reflections etc - won't appear in the ESP32 simulators
- EMC issues due to floating inputs, Port pin current limits or even self-heating of components are not considered in most the simulators
- A code running on the emulator can't always run on the real hardware without modifications, especially when it involved multiple threads and priorities
Still, other options are available online but it depends on your comfort
ESP32 simulator from mireq - ESP-IDF contains a small amount of hardware-specific code, FreeRTOS and few multi-platform libraries. This project uses FreeRTOS port for POSIX, LWIP for TCP/IP layer and mbedtls for cryptography functions.
In addition, several useful APIs from esp-idf are implemented eg. logging. With this project, you can write a program, which will be runnable and testable on Linux.
ESP32 machine emulator - The purpose of this package is to enable you to test-drive (TDD) your MicroPython code in an IDE running on your computer. It seems a lot of people are test-driving python, but not many are test-driving MicroPython. That’s understandable, since many MicroPython projects are simple, and emulating real hardware in a test environment is difficult.
Bridges - Pretend your PC a Raspberry Pi or an ESP32 to connect I2C / SPI / GPIO / UART peripherals.
Note You should also check when is the last time the projects were updated. THe latest ones and active ones are always a better choice as they are expected to have better usability, and stable simulations.