ハードウェアデバッグの第一歩

こんにちは、さかじです。私は入社以来横田deGoプロジェクトに関わっていています。
横田deGoプロジェクトは幸いなことにたくさんのお客様に興味を持っていただいています。ご希望があればお客様のところへ出張しデモを行うことがあります。
デモのたびに棚を組み立てセンサを組み付けますので、輸送中に壊れてしまうこともあります。動作しているか確認するためのLEDを設けています。  

ソフトウェアな世界ではデバッグログを出力することができますがハードウェア単体では面倒です。そのため視覚的に確認できるLEDを使用することが多いです。そこで簡単にできるLEDを使ったデバッグ方法をまとめてみました。

環境

  • MacBook Pro(macOS High Sierra 10.13.6)
  • micro USB-Bメス ケーブル(使用するPC/Macに合わせてご用意ください)
  • Arduino IDE
  • ESP32-DevKitC ESP-WROOM-32開発ボード
  • LED1をGPIO32に接続
  • LED1はLOWで点灯、HIGHで消灯

開発環境構築は以下をご覧ください。 ESP-WROOM-32の開発環境のセットアップ

Lチカしてみる

初めてのマイコン、組み立てたばかりのハードウェアですときちんと動作するかわかりません。そこで、マイコンとLEDを接続してLEDを点灯、点滅させてみます。そこで思うようにLEDを操作できるとGPIOは動作できていることが確認できます。

LEDを常に点灯させてデバッグする

まず簡単にLEDをつけてみます。

#define LED1 32

void setup() {
  pinMode(LED1, OUTPUT);
  digitalWrite(LED1, HIGH);
}

void loop() {
  digitalWrite(LED1, LOW);
}

これでLEDがつかない場合にはsetup()から抜け出せない、LEDに接続されている端子が壊れている、loop()に入ってもすぐにリセットが発生しているなど問題が考えられます。

処理ごとにLED点灯、消灯をしてデバッグする1

#define LED1 32

void setup() {
  pinMode(LED1, OUTPUT);
  digitalWrite(LED1, HIGH);
}

void loop() {
  digitalWrite(LED1, LOW);
  // 処理1
  digitalWrite(LED1, HIGH);
  // 処理2  
}

LED1が点灯しっぱなしの場合は"処理1"で止まっている、LED1が消灯したままの場合は"処理2"で止まっていることが判断できます。処理1でリセットしている可能性も考えられます。

処理ごとにLED点灯、消灯をしてデバッグする2

#define LED1 32

void setup() {
  pinMode(LED1, OUTPUT);
  digitalWrite(LED1, HIGH);
}

void loop() {
  if (判定) {
    // true
    digitalWrite(LED1, LOW);
  } else {
    // false
    digitalWrite(LED1, HIGH);
  }
}

判定がture,falseでLEDの状態が変わると本来false側に流れる必要がのに、LEDが点灯していると判定に間違いがあると判断できます。

最後に

LEDひとつですと簡単なデバッグしかできません。しかし組み立てたばかりのハードウェア、初めてのマイコンなどを使う場合には、どのように動作するか想定できない場合がありデバッグも簡単ではありません。シリアルポートやオシロスコープがない場合、非常に役立つデバッグ方法だと思います。何か組み立てる時にはLEDを一つだけでもつけておくと便利だと思います。