ESP32 チュートリアル 30/55 - Adafruit IO サービスを使用した MQTT を通じてウェブ上でサーボを制御する | SunFounder の ESP32 IoT 学習キット

ESP32 チュートリアル 30/55 - Adafruit IO サービスを使用した MQTT を通じてウェブ上でサーボを制御する | SunFounder の ESP32 IoT 学習キット

このチュートリアルでは、ESP32マイクロコントローラーを使用して、ウェブ上でMQTTプロトコルを介してサーボモーターの位置を制御する方法を学びます。Adafruit IOサービスを活用することで、サーボを0°、90°、または180°のようなさまざまな角度にリモートで位置決めすることができます。このプロジェクトは、内蔵のWi-FiとBluetoothを含むESP32の能力を示しており、IoTアプリケーションにとって強力なツールとなっています。

ESP32-30_MQTT_diagram-0

このプロジェクトでは、Adafruit IOを使用してMQTTブローカーをセットアップし、サーボを制御するためのダッシュボードを作成し、ESP32をそれに接続します。サーボの位置はダッシュボードのスライダーを使用して調整可能であり、インターネット接続可能なデバイスからリアルタイムで制御できます(動画の5:30にて)。

ハードウェアの解説

このプロジェクトの主なコンポーネントには、ESP32マイクロコントローラーとサーボモーターが含まれています。ESP32はWi-FiとBluetooth機能を統合した多用途のマイクロコントローラーであり、IoTアプリケーションに最適です。ESP32は、MQTTプロトコルを使用してAdafruit IOサービスと通信します。これは軽量で効率的なメッセージ伝送手段としてインターネット上で利用されます。

サーボモーターは、角度位置を正確に制御できる回転アクチュエーターです。これは、その位置を指示するパルス幅変調(PWM)信号を受信することによって動作します。このプロジェクトでは、サーボをESP32のデジタルピンの1つに接続し、遠隔で角度を制御できるようにします。

データシートの詳細

メーカー 視差
部品番号 SG90
論理/IO電圧 3.3 V - 5 V
供給電圧 4.8 V - 6.0 V
出力電流(チャンネルごと) 1 A 最大
PWM周波数ガイダンス 50ヘルツ
入力ロジック閾値 0.3 V - 0.7 V
電圧降下 / RDS(on)/飽和度 0.2 V 最大
熱的限界 動作温度:-10°Cから60°C
パッケージ プラスチックケース
ノート / バリアント ミニサーボ、180°回転

  • サーボに適切な電圧供給を確保してください(4.8 V - 6.0 V)。
  • ESP32とサーボの間に共通のグラウンドを使用してください。
  • PWM信号を監視して、サーボの限界を超えないようにしてください。
  • 運転中に接続が切れるのを避けるため、サーボを安全に接続してください。
  • Adafruit MQTTライブラリを更新して互換性を確保してください。

MQTTダイアグラム

ESP32-30_MQTT_diagram-2
ESP32-30_MQTT_diagram
ESP32-28_dht温度センサーメイン

配線指示

ESP32-17-Sevo_motor-wiring

サーボモーターをESP32に配線するには、まずサーボのグラウンドワイヤーをESP32のグラウンドピンに接続します。次に、サーボの電源ワイヤー(通常は赤)をESP32の5Vピンに接続します。最後に、信号ワイヤー(多くの場合黄または白)をESP32のデジタルピン25に接続します。接続が緩まないように、しっかりと固定されていることを確認してください。

ESP32に電源を供給するためにバッテリーを使用している場合、バッテリーの電圧がESP32とサーボの両方に対して許容範囲内であることを確認してください。さらに、コードで使用されているピンの定義と配線が一致していることを再度確認し、問題を避けてください(動画の12:45で)。

コード例とウォークスルー

提供されたコードでは、まずESP32とMQTTに必要なライブラリを含めます。サーボオブジェクトを定義し、それが接続されているピンを指定します。const int servoPin = 25;デフォルトの角度も設定されています。const int defaultServoAngle = 90;ESP32が起動したときの初期位置になります。


Servo myServo;
const int servoPin = 25;
const int defaultServoAngle = 90;
int servoAngle = defaultServoAngle;

このスニペットは、ピン25のサーボを初期化し、そのデフォルト角度を90°に設定します。変数servoAngleMQTTブローカーから受信したメッセージに基づいて更新されます。

の中でsetup()機能では、Wi-Fiに接続し、MQTTクライアントを設定します。ここではAdafruit IOの資格情報が定義されており、ユーザー名とキーが含まれています:


#define AIO_USERNAME "robojax"
#define AIO_KEY "aio_xmIW58uNNsjJCSOqzZ9QoHyq29wu"

このセクションでは、Adafruit IO サービスへの接続を確立します。コードを実装する際には、これらの値を自分の Adafruit IO 認証情報に置き換えることを確認してください。

最後に、メインループはMQTTサーバーへの接続がアクティブのままであり、受信したメッセージを処理します。サーボの位置は受信した角度に基づいて更新されます:


mqtt.processPackets(500);
int pulseWidth = map(servoAngle, 0, 180, minPulseWidth, maxPulseWidth);
myServo.writeMicroseconds(pulseWidth);

このコードはサーボ角を対応するパルス幅にマッピングし、それをサーボモーターに送信します。processPackets()この機能により、ESP32は受信したMQTTメッセージを処理でき、サーボがAdafruit IOダッシュボードを介して送信されたコマンドに反応します。

デモンストレーション / 期待すること

すべてが設定されたら、作成したスライダーを使用してAdafruit IOダッシュボードからサーボを制御できるはずです。スライダーを動かすと、サーボはリアルタイムで角度を調整します。ESP32がWi-Fiに接続されており、MQTT接続が安定していることを確認してください。サーボが反応しない場合は、配線とサーボへの電源供給を確認してください(動画の :15)。

サーボの範囲制限に注意してください。0°から180°の範囲外の値を送信すると、予期しない動作をする可能性があります。このコードには、角度をこの範囲内に収めることでそのような事態を防ぐチェックが含まれています。

ビデオのタイムスタンプ

  • 00:00 スタート
  • 1:54 プロジェクト紹介
  • 2:52 MQTTのイントロダクション
  • 6:50 Adafruit IOの設定
  • 9:54 サーボの配線
  • 11:07 コードの説明
  • 18:59 ESP32ボードとCOMポートを選択中
  • 22:10 プロジェクトデモンストレーション

画像

ESP32-17-Sevo_motor-schematic
ESP32-17-Sevo_motor-schematic
ESP32-17-Sevo_motor-wiring
ESP32-17-Sevo_motor-wiring
ESP32-28_dht_temperature-sensor-main
ESP32-28_dht_temperature-sensor-main
ESP32-30_MQTT_diagram
ESP32-30_MQTT_diagram
ESP32-30_MQTT_diagram-0
ESP32-30_MQTT_diagram-0
ESP32-30_MQTT_diagram-2
ESP32-30_MQTT_diagram-2
831-ESP32 Tutorial 30/55- ESP32 to control Servo motor using MQTT service of Adafruit
言語: C++
コピーしました!

必要かもしれないもの

リソースと参考文献

ファイル📁

他のファイル