○ 実現したいこと
ESP32でbluetoothシリアル通信を用いてスイッチを使ったLEDの点灯回路を作りたい。
○ 前提
https://rcj-lightweight.hateblo.jp/entry/try_esp32このサイトを参考にプログラムを書き込みました。
動かしてみると、スイッチを押してもシリアルモニタには「LED-OFF」しか表示されず、LEDの操作ができませんでした。
○エラーメッセージ
エラーは出ていませんでした。
該当のソースコード
ソースコード ~Bluetoothの接続はうまくいっているのでそこは省略します。~ <マスタ> pinMode(15, INPUT_PULLUP); void loop() { if (digitalRead(15) == LOW) { Serial.println("LED is ON."); SerialBT.write('T'); } if (digitalRead(15) == HIGH) { Serial.println("LED is OFF."); SerialBT.write('L'); } delay(20); } <スレーブ> char databox; void loop() { if (SerialBT.available()) { databox = SerialBT.read(); Serial.println(databox); if (databox == 'L') { digitalWrite(13, LOW); } if (databox == 'T') { digitalWrite(13, HIGH); } } delay(20); } ○試したこと ピンの変更 スイッチの動作確認 ○ 補足情報(FW/ツールのバージョンなど) ArduinoIDEバージョン:2.1.1 ESP32:ESP-WROOM-32 ○配線 (マスター) G15ピン→タクトスイッチ→GND (スレーブ) G13ピン→抵抗(330Ω)→LED→GND
> スイッチを押してもシリアルモニタには「LED-OFF」しか表示されず
この時点でBluetooth以前の問題のように思いますがいかが?
avoid loop() {
if (digitalRead(15) == LOW) {
Serial.println("LED is ON.");
}
if (digitalRead(15) == HIGH) {
Serial.println("LED is OFF.");
}
delay(20);
}
として、スイッチONして'LED is ON.'が表示されますか?
スイッチをピンとVdd間につないでいたりしませんか?
コメントありがとうございます。
スイッチをonにしてもマスター側もスレーブ側もずっとoffのときの処理を行ったままでした。
スイッチの配線は15ピン→スイッチ→GNDのようにつないでいます。
電子工作に手を出そうと言うならテスターぐらい持っているでしょうから、スイッチON/OFFのときのそれぞれの15ピンの電圧を計ってみてください。
おはようございます。
スイッチON-OFFの電圧を測ってみると、どちらも電圧値がほぼ0Vでした。スイッチ自体は正常でした。
> スイッチ自体は正常でした。
なぜそう言えるのかの根拠を教えてください。
> スイッチON-OFFの電圧を測ってみると、どちらも電圧値がほぼ0V
それは正常ですか? 異常ですか?
現状の「シリアルモニタには「LED-OFF」しか表示されず」という状況に対して納得できますか?
スイッチが正常であるとお伝えしたのは、スイッチの接点自体がダメになっていなかったよという意味でした。上手くお伝えできず申し訳ありません。
スイッチは、ONで抵抗0Ω、OFFで抵抗∞Ωとなっていたので、スイッチは壊れていないとわかりました。
電圧値がONでもOFFでも0Vであるのは異常であることはわかります。
ただ、ONで0V,OFFで3.3Vになるはずなのにそうならない原因はわからないです。
> そうならない原因はわからない
そうですね。現在与えられている情報では(回路についての情報はなにひとつ与えられていないので)私にもわかりません。なにか間違っているはず、とは言えますが。
さらに、電圧が0のはずなのに、プログラムの分岐で
if (digitalRead(15) == HIGH) {
Serial.println("LED is OFF.");
SerialBT.write('L');
}
こちらが実行される理由も私にはわかりません。こちらを考えるための情報も皆無です。
自分で調べるとしたら
1. 外部回路の接続を(USB以外)全て取り外し、その状態での15ピンの電圧を測定する。
期待値は3.3Vです。これで0Vなら、基板に異常があるか、電圧の測定方法が正しくないことを疑います。
- 基板の異常は、15ピンを出力ポートにして、いわゆるLチカをしてみることで確認できるでしょう。
- 電圧の測定方法は、同じ操作で3.3V(3V3)端子の電圧を測って3.3Vが得られるかで見当がつくでしょう。
2. 15ピンをGNDに直結し、プログラムの動作を調べる
LED is ON. が出力されることが期待値です。出力されないとすれば...基板の異常かマイコンの故障を疑うことになります。基板の異常の検出は前述の通りです。基板に異常がなくて入力を拾えていないのなら...マイコンの故障と考えるしかなくなります。そうそう壊れるものじゃないはずではありますが。
教えて頂いた方法を試しました。
1.Lチカで15ピンの出力電圧を調べると、3.3V 近くを出力しました。
抵抗とLEDをはさみ15ピンとGNDで測定しました。
2.15ピンを直接いれると、スレーブ側のLEDは光りました。
マスタのシリアルモニタには[LED is ON]となり、スレーブのシリアルモニタには[T]が送られていました。
ピンとピンで電圧測定をすると3.3Vが出るのに、スイッチを挟むと0Vとなります。
写真の容量が大きくてはれなかったので文で配線を記します。すいません。
(マスター)
G15ピン→タクトスイッチ→GND
(スレーブ)
G13ピン→抵抗(330Ω)→LED→GND
すいません、原因がわかりました。どうやら自分のつかっているブレッドボードがおかしかったようで、別のブレッドボードで行うとうまくいきました。
回答1件
あなたの回答
tips
プレビュー