You are here

ESP32: RCサーボの制御

ESP32-DEVC-HOMEやESP32-DEVC-KEYでRCサーボを操作します。
http://www.microfan.jp/esp32/esp32-devc-motor
http://www.microfan.jp/esp32/esp32-devc-home
http://www.microfan.jp/esp32/esp32-devc-key

ESP32-DEVC-HOMEとESP32-DEVC-KEYには、5Vの電源とレベルを5Vに変換した信号を出力する端子が装備されており、RCサーボやWS2812カラーLEDを直接接続することができます。

RCサーボを接続したESP32-DEVC-HOM

ESP32-DEVC-HOMEとESP32-DEVC-KEYに装備されているRCサーボの接続端子CN2のピン配置は以下のようになっています。


  1. GND
  2. 5V
  3. D27(GPIO27)の5V出力

一般的なRCサーボのコネクタがそのままさせるようになっていますが、念のため、利用されるRCサーボのコネクタの構成を確認したうえでESP32-DEVC-HOMEに接続してください。

ESP32では、まだRCサーボ制御用のライブラリがないようですが、LEDの明るさの制御にも利用したLEDC関数を利用した例を示します。

#define SERVO 27

#define SW1 0
#define SW2 32
#define SW3 33
#define SW4 34
#define SW5 35

// 0-2はLEDとスピーカーで使用
#define LEDC_CHANNEL_3     3

#define LEDC_TIMER_16_BIT  16

// サーボ信号の1サイクル 50Hz:20ms
#define LEDC_SERVO_FREQ     50

#define SERVO_MIN_WIDTH_MS 0.6
#define SERVO_MAX_WIDTH_MS 2.4

int servo_pwm_count(int v)
{
  float vv = (v + 90) / 180.0 ;
  return (int)(65536 * (SERVO_MIN_WIDTH_MS + vv * (SERVO_MAX_WIDTH_MS - SERVO_MIN_WIDTH_MS)) / 20.0) ;
}

void setup()
{
  pinMode(SW1, INPUT) ;
  pinMode(SW2, INPUT) ;

  // RC SERVOの初期化
  ledcSetup(LEDC_CHANNEL_3, LEDC_SERVO_FREQ, LEDC_TIMER_16_BIT) ; // 16ビット精度で制御
  ledcAttachPin(SERVO, LEDC_CHANNEL_3) ; // CH3をRC SERVOに
  ledcWrite(LEDC_CHANNEL_3, servo_pwm_count(0)) ; // ニュートラル
}

int angle = 0 ;

void loop()
{
  if (!digitalRead(SW1))
    angle -= 5 ;
  if (!digitalRead(SW2))
    angle += 5 ;

  if (angle > 90)
    angle = 90 ;
  if (angle < -90)
    angle = -90 ;
    
  ledcWrite(LEDC_CHANNEL_3, servo_pwm_count(angle)) ;

  delay(100) ;
}

使用パーツ


開発ソフト: 
チップファミリー: 
MCUチップ: 
技術: