Flash가 4MB라면서 실제로는 프로그램 영역이 1.3MB밖에 안된다.
뭔가 했더니 Partition Scheme Default가 처음부터 그렇게 잡힌 모양
열심히 검색해봤더니 Partition Scheme을 바꾸면 ROM 크기를 조정할 수 있던 것이었다.

Default Partition Scheme 시 Program 영역이 1.3MB정도이다.

No OTA Partition Scheme 시 Program 영역이 2MB정도이다.

Huge App Partition Scheme 시 Program 영역이 3.1MB 정도이다.
이를 위해서는 platformio.ini 파일에 다음과 같이 옵션을 넣어주면 된다.

board_build.partitions 옵션을 주면 된다.
no_ota.csv는 arduino-esp32 Github에서 정의한 기본 파티션 정보이다.
이것 말고도 다양한 것들이 있는데, 그 중에서도 huge_app.csv은 3MB까지 커버한다.
물론 파티션 정보 파일 자체를 커스텀할 수도 있지만, 필자는 그래도 제조사에서 제공한 것을 사용하기로 했다.
더 자세한 설명은 링크의 Partition Table 섹션을 참고하면 된다.