PR

【コード付き】esp32 シリアル通信でサーボを動かす esp32servoの巻。

サーボモーターを任意の角度に移動するようにコード組んでみました。
サンプルコードを晒しますので、ご参照ください。

シリアルモニタの入力欄にカーソル合わせて、テンキー+エンターキーで数値入力すると、その値の角度にサーボが動きます。

サーボ シリアル操作

記事内の一部に広告を含みます。

ESP32でサーボモータを回す方法

以下、参考まで、使い方と私の適当なソースを晒しておきます。

esp32servoというライブラリを使うので、インクルードしましょう。
ライブラリを管理 から実施します。

ライブラリを管理


検索窓でesp32servoを探して、該当したライブラリ名にカーソル合わせると「インストール」ボタンが現れるので、クリックすればインストール完了です。

esp32servoインストール1


コードをコンパイルして、ESP32アップしたら、シリアルモニタを開いて準備完了です。
シリアルモニタから角度を入力すればサーボが反応するはずです。

コードはこんな感じです。

#include <ESP32Servo.h>
#include <stdio.h>
#include <string>

Servo myservo;
int pos = 160;
// Recommended PWM GPIO pins on the ESP32 include 2,4,12-19,21-23,25-27,32-33
int servoPin = 16;

void setup()
{
    myservo.setPeriodHertz(50);
    myservo.attach(servoPin, 400, 2400); // sg90仕様書に合わせて設定
    Serial.begin(115200);
}

void loop()
{
    String key;
    if (Serial.available())
    {
        key = Serial.readStringUntil('\n');
        Serial.println(key);
        //Serial.println("print!");
        int newAngle;
        newAngle = atoi(key.c_str());
        Serial.println(newAngle);
        if (newAngle <= 180 && newAngle >= 0)
        {
            while (pos != newAngle)
            {
                if (pos < newAngle)
                {
                    myservo.write(pos++);
                    delay(5);
                }
                else
                {
                    myservo.write(pos--);
                    delay(5);
                }
                Serial.println(pos);
            }
        }
        else
        {
            Serial.printf("Out of range [%3d]\n", newAngle);
        }
    }
}

なお、SG-90(の互換品)では 茶:GND、赤:+5V、橙:信号線(今回はport16にしました) です。

接続


で、上でSG-90互換と書きましたが、私は下記を使ってます。
シビアな用途ではわかりませんが、まぁこれでいいかな。という感じです。

国内配送だと、1個200~300円が相場かなぁと思います。

以上。ご参考になれば幸いです。

それでは!