You are here

ESP32: BlynkでRCサーボ

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

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

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

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 BLYNK_PRINT Serial

#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>

// BlynkのAuth Tokenを設定
char auth[] = "YOURAPPAUTHTOKEN" ;

char ssid[] = "YOURSSID" ;
char pass[] = "YOURPASSWORD" ;

#define SERVO 27

// 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()
{
  // Debug console
  Serial.begin(115200) ;

  // 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)) ; // ニュートラル

  Blynk.begin(auth, ssid, pass) ;
  Blynk.syncAll() ;
}

// SERVO:GPIO27 - V27の範囲は-90~90
BLYNK_WRITE(SERVO)
{
  int t = param.asInt() ;
  ledcWrite(LEDC_CHANNEL_3, servo_pwm_count(t)) ;
}

void loop()
{
  Blynk.run() ;
}

スマートフォンのBlynkアプリには、RCサーボを制御するためのSliderを追加して作成しました。

Sliderの設定は以下のようにしています。


  • PINはV27
  • V0の範囲は-90から90
  • SEND ON RELEASEはOFF


使用パーツ


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