#ESPr Door Sensor
ESPr Door Sensorはスイッチサイエンス社から販売されているモジュールです。
扉の開閉を検知するために使ってみようと思い、こちらの記事にある動作確認用サンプルをまずは書いてみました。
int LED = 4;
int reed_sw = 5;
void setup() {
pinMode(LED,OUTPUT);
delay(10);
if(digitalRead(reed_sw) == 0){
digitalWrite(LED,HIGH);
delay(100);
digitalWrite(LED,LOW);
}
else{
for(int i = 0; i < 3; i++){
digitalWrite(LED,HIGH);
delay(100);
digitalWrite(LED,LOW);
delay(100);
}
}
ESP.deepSleep(0,WAKE_RF_DEFAULT);
delay(1000);
}
void loop() {
}
しかし、Arduino IDEから書き込みボタンを押しても書き込めず。。。
いろいろなサイトを見ても原因がそれ通りではなく手間取ったので、その過程を記しておこうと思います。
##開発環境と購入部品
開発環境は以下の通りです。
MacBook Pro (15-inch, 2018)
macOS Catalina バージョン 10.15.7
Arduino 1.8.10
上記の記事に従ってArduino1.6.8をインストールしたら、なぜか書き込みも検証もできず、どんなコードでも以下のようなエラーが出続けてしまいました。
failed MSpanList_Insert 0x30b000 0x1bac3dab73962 0x0
fatal error: MSpanList_Insert
arduino-builderが2を返しました。
Error compiling for board Generic ESP8266 Module.
エラーコードをぐぐりましたが、何が起こっているのかさっぱり分からなかったので、ここは一旦1.8.10で開発を行いました。
購入した部品は以下の2点です。
ESPr Door Sensor
FTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き)
##エラー1:esptool.FatalError: Timed out waiting for packet headerと表示される
こちらの記事によれば、アップロードスピードが合っていないと書かれています。
しかし、Arduinoメニューのツール>Upload Speedからは、一番早くても115200しか選べませんでした。これは、Arduino IDEに追加したボードのバージョンが原因のようです。
現時点で最新のバージョンは2.7.4ですが、それを一旦削除して、2.2.0をインストールし直しました。
これにより、アップロードスピードを落とすことができました。
(注:今回はエラー2まで解決した際には、アップロードスピードは115200でも書き込むことができたので、これが直接的な原因かどうかはわかりません)
##エラー2: warning: espcomm_sync failed, error: espcomm_open failed
今度は別のエラーが表示されました。
このエラーコードを検索すると、書き込みモードに変わっていないのが原因だという記事が沢山出てきます。
ただしこれは、ESPr Developer(ESP-WROOM-02開発ボード)に関するもの。今回使用しているESPr Door SensorはそもそもRSTスイッチを有していません。またReset Methodについても、そもそもnodeMCUではなくckを選択するように記述されています。
どうすれば書き込めるのか分からない...と途方にくれて、思いつきで試してみたものが解決に繋がりました。
##ESPr Door Sensor本体も給電した状態で書き込みを行う
書き込みを行うFTDI USBシリアル変換アダプターだけでなく、ESPr Door Sensorにも5VでのUSB給電が必要でした。
参照していたスイッチサイエンスの記事にもこのようにきちんと書かれていました。
FTDI USBシリアル変換アダプターからはESPr Door Sensorに給電しないようになっています。プログラムの書き換え時は基板本体の電源とFTDI USBシリアル変換アダプター用のMicro USBケーブルをご用意ください。
エラー2については、書き込みモードに切り替わっていないのが原因ではなく、給電が原因でした。
同じようなエラーが出た場合には、必ず両方にUSBケーブルを接続するようにして下さい。