ESP32 Wi-Fi STA 固定IPアドレスでTCP Serverを試す

ESP32 Wi-Fi STA 固定IPアドレスでTCP Serverを試す

今回は Wi-Fiを使ったsocket通信の第2弾です。

この記事は JTAG でデバッグすることを前提にして書いています。
環境構築については こちら をご覧になってください。

投稿時の開発環境を記しておきます。

PC:
Windows10 OS

開発ボード :
ESP32-DevKitCーVE
(Soc : ESP32-D0WD-V3)

デバッガー(H/W):
FT2232D

デバッガー (S/W) :
Visual Studio Code + PlatformIO + ESP-IDF Framework

構成

今回は Wi-Fi を使ったソケット通信を行ってみます。
少し前に TCP Client を扱ったので、今回は TCP Server です。
扱いやすいので TCP Server のIPアドレスは固定にしてみました。

我が家には某社製のルーターがあり、それが AP (アクセスポイント) になるので、ESP32を STA(Station)モードで使います。
AP経由でPCソフト(フリー)のSocket Debugger を使ってソケット通信を行ってみます。

図があるとイメージしやすいと思うので貼っておきます。

Socket Debugger を TCP Client とし、 ESP32 は TCP Server で動作させてみます。

ESP32の環境にもSocket通信用に組み込み用として有名な LwIP (Low weight IP) が用意されているので、それを使ってみることにします。

IPアドレスと Wi-Fi の SSID , PASSWORD は皆さまの環境に合わせて設定してください。

ポート番号は 8080 になっていますがクライアントとサーバーで合わせておけば任意の値(65535まで)でOKです。

プロジェクトをつくる

使っていたプロジェクトを開いていたら、File – Close Folder して閉じておきます。

その後にVSCodeからPlatformIOをOpenします。

以下の内容でプロジェクトを新規に作成します。

Name : ESP32E-wifi-STA-TCPServer
Board : Espressif ESP32 Dev Module
Framework : Eresspsif IoT Development Framework

Name : ESP32E の “E” は Framework (Espressif IoT Development Framework)の頭文字を示しています。

(後から見てわかるように、ESP-IDFを使うことを明示しています)

platformio.ini に以下の3行を追加して、 Ctrl + s で保存しておきます。

COM[4]の4の部分はデバイスマネージャーのポート(COMとLPT)で Silicon Labs CP210x から始まるCOMの番号を記述します。

debug_tool = minimodule
upload_port = COM[4]
monitor_speed = 115200

(モニターを使う場合に必要です)

Wi-Fiリファレンスとサンプル

Wi-FiのAPIは こちら を参照してください。

サンプルプログラムは こちら を参考にしました。

また、lwip (tcp server) のサンプルは こちら を参考にしました。

PlatformIOで Eresspsif IoT Development Framework を選択したことにより、以下のローカルフォルダからも参照可能なはずです。

Wi-Fi (STA) :

C:\Users\xxxxx\.platformio\packages\framework-espidf\examples\wifi\getting_started\station

lwIP – tcp_server :

C:\Users\xxxxx\.platformio\packages\framework-espidf\examples\protocols\sockets\tcp_server

(xxxxxは皆さまのユーザー名)

(注)固定IPにするために wifi_init_sta() の中をカスタマイズしています。

ソースコード

Wi-Fi (STA) と tcp_server の組み合わせです。

ソースコードを github esp32e-wifi-STA-TCPServer におきました。

ESP-IDF環境で Wi-Fi (STA) , 固定IP tcp_server を試してみたい方はお使いになってみてください。

ソケット通信で TCP server を実装されたことがあれば理解できると思います。

(注)ソースコード main.c 冒頭の以下の部分を環境に合わせてお使いください。

#define DEVICE_IP “192.168.11.100”
#define DEVICE_GW “192.168.11.1”
#define DEVICE_NETMASK “255.255.255.0”
#define PORT 8080

#define CONFIG_ESP_WIFI_SSID “” // SSID
#define CONFIG_ESP_WIFI_PASSWORD “” // PASSWORD

PC(クライアント側)の設定

フリーで使えるソケット通信用のソフト Socket Debugger をご存じでしょうか。

Socket Debugger

Socket通信のテストを行うのに便利なツールです。

こちらから ダウンロードしてお使いください。

フリー版は一番下の 旧製品版 というところにあるものです。(2021/11/27現在)

フリー版は機能制限があるようですが、簡単な通信テストを行う程度であれば全く問題なく使うことができました。

ポートを2つ使える仕様のようです。

起動後、メニューの設定 – 通信設定 で 接続 – ポート1 に対して、以下のように設定します。
通信タイプはTCPクライアントに設定します。

動作 – ポート1 でいくつかの動作設定を行うことができますが、ここでは触らずに初期設定のままにしておきます。

送信データの作成

右側ペイン 送信データエティタの左から5番目のアイコンをクリックします。

送るデータ(ここでは ABCDE + Enter としました)を入力し、一番左のアイコンをクリックします。

Enterすることで CR LF つきの7キャラクターが送信されるデータになります。

送信データエディタに値が反映されます。

ビルドして動作させてみる

サーバー側(ESP32)を動かした状態で、clientからデータを送信してみます。

下図の赤枠アイコンを押すとサーバーに接続します。

下図の赤枠アイコンを押すとサーバーにデータを送信します。
(うまく接続できない場合、このアイコンは有効になりません)

このサンプルでは送られてきたデータをそのまま返信します。

こちらの環境では、クライアント側にデータが戻ってくるのが確認できました。

皆さまはいかがでしょうか。

Wi-Fiカテゴリの最新記事