Python を使用して ESP32 でサーボ モーターを制御する方法: 完全ガイド_BLDC_Industry Insights_Kpower
> 業界の洞察 >BLDC
テクニカルサポート

製品サポート

Python を使用して ESP32 でサーボ モーターを制御する方法: 完全ガイド

発行済み 2026-04-05

このガイドでは、標準を制御するためのステップバイステップの方法を提供します。サーボPython を使用した ESP32 ボードを備えたモーター。ロボット アーム、パンチルト カメラ マウント、または単純な移動プロップのいずれを構築している場合でも、正確な配線、Python コード、およびキャリブレーション手順を学び、サーボ正確に動く。すべての例は一般的な現実世界の状況に基づいているため、独自のプロジェクトにすぐに適用できます。

01必要なもの

ESP32 開発ボード 1 枚 (一般的なバリアント)

標準 5V 1 つサーボモーター(例:SG90またはMG995タイプ)

外部5V電源(高トルクサーボを使用する場合)

ジャンパー線 (メス対メス)

ESP32 に MicroPython ファームウェアがインストールされたコンピューター

> 重要: ESP32 の 3.3V ピンから直接サーボに電力を供給しないでください。ほとんどのサーボは 5V を必要とし、ボードが安全に供給できる以上の電流を消費する可能性があります。サーボ用の5V電源は別途用意し、ESP32には信号線のみを接続してください。

02ハードウェア接続 – 実際のケース

開閉する単純なロボットの爪を構築していると想像してください。一般的なMG995サーボを使用しています。次のように接続します。

サーボワイヤー 色(代表的なもの) に接続します
外部5Vプラス端子
地面 ブラウンまたはブラック 外部5VアースそしてESP32 GND
信号 オレンジまたはイエロー ESP32 GPIO ピン 15 (任意の PWM ピン)

クリティカルポイント:外部電源のグランドしなければならないESP32 GND に接続してください。この共通アースがないと信号が不安定になり、サーボがジッターしたり動かなくなったりします。

03Python コード – ステップバイステップ

ESP32は50HzのPWM信号(周期=20ms)を生成してサーボを制御します。サーボの位置はパルス幅によって決まります。0°の場合は0.5ms、90°の場合は1.5ms、180°の場合は2.5msです。

以下は、テスト済みの完全な MicroPython スクリプトです。名前を付けて保存main.pyESP32で。

マシンからのインポート ピン、PWM インポート時間 # GPIO15 を使用 – PWM をサポートする任意のピンに変更できます SERVO_PIN = 15 # 標準サーボ周波数: 50 Hz PWM_FREQ = 50 # 0°、90°、180° のデューティ サイクル値 (50 Hz で計算) # 16 ビット PWM 解像度 (0 ~ 65535) の場合: # デューティ= (パルス幅_ms / 20ms)65535 # 0.5 ms -> 1638 (0°) # 1.5 ms -> 4915 (90°) # 2.5 ms -> 8192 (180°) DUTY_0 = 1638 DUTY_90 = 4915 DUTY_180 = 8192 # サーボピンの PWM を初期化 servo = PWM(Pin(SERVO_PIN), freq=PWM_FREQ,duty_u16=DUTY_90) # 90°で開始 def set_angle(angle): """ サーボ角度を設定します (0° ~ 180°)。角度をデューティ サイクルに線形にマップします。 """ # クランプ角度を有効範囲に設定 angle = max(0, min(180, angle)) # 線形マッピング:duty = DUTY_0 + (角度/180)(DUTY_180 - DUTY_0)duty = int(DUTY_0 + (angle / 180) * (DUTY_180 - DUTY_0)) servo.duty_u16(duty) # 例:Trueの間前後にスイープ:範囲(0, 181, 10)の角度の場合: set_angle(angle) time.sleep_ms(50) 範囲(180, -1, -10): set_angle(角度) time.sleep_ms(50)

04コードの使用方法

1. MicroPython ファームウェアを ESP32 にフラッシュします (まだ行っていない場合)。

2. 説明に従ってサーボを接続します。

3. 次のようなツールを使用してスクリプトをボードにコピーします。リモートまたはトニー。

4. スクリプトを実行します。サーボは 0° から 180° までスイープし、繰り返し戻ります。

05キャリブレーション – サーボに異なる値が必要な理由

サーボモデルが異なれば、パルス幅範囲もわずかに異なります。たとえば、安価な SG90 は 0.5 ミリ秒から 2.4 ミリ秒で動作しますが、高トルクの MG996R は 0.6 ミリ秒から 2.4 ミリ秒を使用します。ほとんどの場合、一般的な 0.5 ~ 2.5 ミリ秒の範囲で機能しますが、常に調整する必要があります。

校正方法(ロボット アーム プロジェクトの実世界のケース):

デューティ サイクルを 1638 に設定し、実際の角度を記録します。

サーボが0°にならない場合は、サーボが動かなくなるまでDutyを少し(例:1700)上げてください。

180°についても、8192 から減少させて同じことを行います。

測定した DUTY_MIN と DUTY_MAX を使用します。set_angle()関数。

06よくある問題と解決策

問題 最も考えられる原因 修理
サーボが全く動かない ESP32 とサーボ電源の間に共通アースがありません 外部電源の GND を ESP32 GND に接続します
サーボのジッターまたはけいれん PWM周波数が50Hzではありません。または不安定な電力 セット周波数=50;適切な電流を備えた別の 5V 電源を使用してください
サーボが狭い範囲でしか動かない デューティ値がサーボに対して正しくありません 上で説明したように校正します。 DUTY_0 と DUTY_180 を調整します
サーボが動くとESP32がリセットされる サーボがボードの 5V ピンから過剰な電流を消費します ESP32 からサーボに電力を供給しないでください。外部5V電源を使用

07覚えておくべき基本原則

サーボは、デューティ サイクルのパーセンテージではなく、パルス幅によって制御されます。周波数は正確に 50Hz (周期 20ms) である必要があります。パルス幅を0.5msから2.5msの間で変更すると、サーボは0°から180°まで回転します。 MicroPython では義務_u16()この方法では、パルス幅からデューティ値へのマッピングは PWM 分解能 (ESP32 では常に 16 ビット) によって異なります。提供されている数式または線形マッピング関数を使用します。

08実用的な推奨事項

1. 常に簡単なスイープテストから始めてください– 配線と基本的な PWM 動作を確認します。

2. ロジックアナライザーまたはオシロスコープを使用するサーボの動作がおかしい場合はパルス幅を確認します。

3. バッテリー駆動のプロジェクトの場合、電圧降下を吸収するために、サーボ電源端子間に大きなコンデンサ (470µF 以上) を追加します。

4. プロジェクトで複数のサーボが必要な場合、それぞれを個別の GPIO ピンで制御しますが、合計電流が電源の定格を超えないようにしてください。

09最終的なまとめ

ESP32 と Python を使用したサーボの制御は簡単です。信号線を PWM 対応 GPIO に接続し、共通グランドを使用して別の 5V 電源を供給し、50Hz PWM 信号を生成し、デューティ サイクルを調整してパルス幅を 0.5ms ~ 2.5ms に設定します。提供されたコードは、ほとんどの標準サーボでそのまま使用できます。動作範囲が正しくない場合は、特定のサーボの最小および最大デューティ値を校正します。これで、正確なモーションを独自の ESP32 ベースのプロジェクトに統合する準備が整いました。

更新時間:2026-04-05

未来に力を与える

お客様の製品に適したモーターまたはギアボックスを推奨するには、Kpower の製品スペシャリストにお問い合わせください。

Kpowerにメールする
お問い合わせを送信
WhatsApp メッセージ
+86 0769 8399 3238
 
kpowerMap