今回は、wifi環境がある場合において、PCからマイコンに繋がっているサーボモーターを動かす実験を行いました。

 

 

マイコンとサーボモーターの配線については、先日行ったwifi環境が無い場合に動かしたい場合と同じなので、こちらを参照してください。

 

 

wifi環境を使うことで、1台のPCから複数のESP32を操作することも可能になるので、拡張性が高くなります

とりあえず今回は1台のみですが、しっかりと動くところまで確認できました。

動画は前回と同じ絵にしかならないので割愛します。

 

今回のポイントは、同じwifi環境でPCとESP32を接続することです。

少し躓いたポイントなどもありましたので、その点を強調しつつ記録を残していきます。

 

まず、自分のPCのIPアドレスを確認します。

ターミナルを開いて、「ipconfig」と打ち込みます。

下記のような結果が出てくればOKです。

 

ここで、PCのIPアドレスよりも、デフォルトゲートウェイに注目してください。

ESP32の設定をこれと同じにしなければPCと繋げることはできません。

AIにプログラムを書かせると、だいたい「192.168.0.1」になると思うので、異なる場合は修正が必要です。

 

ESP32のIPアドレスは、固定IPにしました。

他のデバイスと被らないような数字にする必要があります。

 

ESP32のプログラムはこちら。

 

#include <WiFi.h>

#include <ESP32Servo.h>

 

const char* ssid = "********";    //自分のwifi環境を入力

const char* password = "********"; //自分のwifi環境を入力
 

IPAddress local_IP(192,168,10,200);  //自分の環境に合わせる

IPAddress gateway(192,168,10,1);   //自分の環境に合わせる

IPAddress subnet(255,255,255,0);   //自分の環境に合わせる

 

WiFiServer server(5000);

 

Servo servo;
 

void setup()

{

  Serial.begin(115200);

 

  servo.attach(18);

  servo.write(90);
 

  WiFi.config(

    local_IP,

    gateway,

    subnet

  );

 

  WiFi.begin(

    ssid,

    password

  );
 

  while(WiFi.status()!=WL_CONNECTED)

  {

    delay(500);

    Serial.print(".");

  }

 

  Serial.println();

  Serial.println("WiFi OK");

 

  Serial.println(

    WiFi.localIP()

  );

 

  server.begin();

  Serial.println("TCP Server Start");

}
 

void loop()

{

  WiFiClient client = server.available();

 

  if(client)

  {

    Serial.println("Client Connected");
 

    while(client.available()==0)

    {

      delay(1);

    }

 

    String data =

      client.readStringUntil('\n');

 

    Serial.print("RX:");

    Serial.println(data);

 

    if(data.startsWith("ANGLE:"))

    {

      int angle =

      data.substring(6).toInt();
 

      Serial.print("Servo:");

      Serial.println(angle);
 

      servo.write(angle);

    }
 

    client.stop();

 

    Serial.println("Client Close");

  }

}

 

 

Pythonのプログラムはこちら。

 

import tkinter as tk

import socket

 

HOST = "192.168.10.200"  //ESP32の設定に合わせる

PORT = 5000

 

#-----------------

 

def send_angle():

 

    try:

        angle = int(

            entry.get()

            )

 

        if angle <0:

            angle =0
 

        if angle >180:

            angle =180
 

        command = \

        f"ANGLE:{angle}\n"

 

        client = socket.socket(

                socket.AF_INET,

                socket.SOCK_STREAM

                )
 

        client.connect(

            (HOST,PORT)

            )

 

        client.send(

            command.encode()

            )

 

        client.close()
 

        value_label.config(

        text=

        f"送信値:{angle}°"

        )

 

    except Exception as e:

        print(e)


 

#-----------------

 

def slider(value):

 

    angle = int(

            float(value)

            )

 

    entry.delete(

        0,

        tk.END

        )

 

    entry.insert(

        0,

        str(angle)

        )

 

#-----------------

 

root = tk.Tk()

 

root.title(

    "Servo Controller"

    )

 

root.geometry(

    "400x250"

    )
 

#-----------------

 

label = tk.Label(

        root,

        text="角度入力"

        )

 

label.pack()
 

#-----------------

 

entry = tk.Entry(

        root,

        width=10

        )

 

entry.insert(0,"90")

entry.pack()

 

#-----------------

 

scale = tk.Scale(

        root,

        from_=0,

        to=180,

        orient="horizontal",

        length=300,

        command=slider

        )

 

scale.set(90)

scale.pack()
 

#-----------------

 

button = tk.Button(

        root,

        text="送信",

        width=15,

        height=2,

        command=send_angle

        )

 

button.pack(

        pady=10

        )
 

#-----------------

 

value_label = tk.Label(

            root,

            text="送信値:90°"

            )

 

value_label.pack()
 

#-----------------

 

root.mainloop()

 

 

うまく繋がらない場合は、pingの確認を行いましょう。

下記のような画面であれば、OKです。

うまく繋がらない場合は、どこかで設定を間違えている可能性があります。

よく確認しましょう。

 

これがうまく出来れば、拡張性の高いシステムを作ることができますね。

何を作ろうかな~。