Linux上にESP-IDFを構築する方法はこちらの記事を参照してください。

サンプルプロジェクトを複製する

まずはデモプロジェクトを複製します。
ここではドキュメント通り、~/esp/hello_world/にコピーします。

cd ~/esp
cp -r $IDF_PATH/examples/get-started/hello_world .

ちなみにIDF_PATHが設定されてない場合は、設定するかesp-idfを置いた場所に置き換えてください。

ちなみにhelloworldはLチカしません。
Lチカをやりたい場合はこちらなので、hello_worldの変わりにblinkプロジェクトをコピーしてください。
回路上のピンアサインの確認と設定(必要であれば)以外は多分同じです。

またLチカのためにESP32の駆動力ついて少し調べました。
データシートのバージョンでころころ変化してるので正しいかどうか自信はないです...

ESP32のドライブ能力

公式ESP32のデータシートを見る限りは、シンク電流(ピンをLowにして電流を引き込む)場合、PAD_DRIVER=3なるものを設定した状態でTyp(標準値..でいいのかな?)が28mAなのでそれ以下に抵抗で抑えたほうがよさそう。
ソース電流の場合(ピンをHighにして電流を流し込む)場合、PAD_DRIVER=3なるものを設定した状態でTypが40mAなのでこれも抵抗でそれ以下にしたほうがよさげ?

余談ですが遊びで大電流(モーターとか)流すと簡単に壊れるのであまり試さないほうがいいです。
ノイズもやばいですし、何より逆起電力対策とかちゃんとしないと一瞬で昇天します。
ちなみに私は過去にいくつかこれでマイコンを破壊してます...

ESP32をPCに接続

シリアル通信ができてれば問題ないです。
出来てない人はこちらの記事のパーミッションを見直してください。
あとpython serialがちゃんと導入できてるかもあわせて確認するとよいです。

configureする

下記でデバイスの設定を行います。

cd ~/esp/hello_world
make menuconfig

色々設定する事ができますが、最低限、シリアル通信デバイスの設定だけ出来ればOKです。
項目は

  • Serial flasher config
    • Default serial port

でEnterして適切な値に設定します。
自分は

/dev/ttyUSB0

だったので特に変更せずともOKでしたが環境によっては/dev/ttyUSB1とか/dev/ttyUSB2とかになってそうなのでその場合は変更してください。

ビルド&書き込みする

make flash

でビルド&書き込みが実行されます。

なおこれはESPアプリケーション(hello_world)とすべてのESP-IDFコンポーネント、ブートローダ、パーティションテーブル、アプリケーションバイナリが生成されてESP32に書き込みされます。
なので結構時間掛かります。

上手く焼けると下記のようなログが出力されます。

esptool.py v2.0-beta2
Flashing binaries to serial port /dev/ttyUSB0 (app at offset 0x10000)...
esptool.py v2.0-beta2
Connecting........___
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 921600
Changed.
Attaching SPI flash...
Configuring flash size...
Auto-detected Flash size: 4MB
Flash params set to 0x0220
Compressed 11616 bytes to 6695...
Wrote 11616 bytes (6695 compressed) at 0x00001000 in 0.1 seconds (effective 920.5 kbit/s)...
Hash of data verified.
Compressed 408096 bytes to 171625...
Wrote 408096 bytes (171625 compressed) at 0x00010000 in 3.9 seconds (effective 847.3 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 82...
Wrote 3072 bytes (82 compressed) at 0x00008000 in 0.0 seconds (effective 8297.4 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting...

ちなみに、make flush以外にも下記のようなコマンドがあります。

ビルド

make app

クリーン

make app-clean

フラッシュ(書き込み)

make app-flash

モニタ(シリアル)

make monitor

動作確認

リセット後、正しく動作していればモニタコマンドで下記のようなログが出力されると思います。

make monitor
......
Hello world!
Restarting in 10 seconds...
I (211) cpu_start: Starting scheduler on APP CPU.
Restarting in 9 seconds...
Restarting in 8 seconds...
Restarting in 7 seconds...

モニタの終了はCtrl+]なので、クセでCtrl+CやCtrl+D、qを送っても正しく終了しないので注意して下さい。

注意事項

モニタ中はプログラムの書き込みは出来ません。
モニタを多重起動しても失敗します。

よくモニタ中に修正→うっかり書き込み→失敗で、あれ??ってなるので気をつけて下さい。