「温湿度センサー(DHT11) のアウトプットをコンソールに表示」で使用したコードが理解できるようになる。
#include "DHT.h" // DHT.h をインポート
#define DHTPIN 22 // DHT センサアウトプットピンの指定
#define DHTTYPE DHT11 // DHT型の指定
// DHTセンサーライブラリーを使うための設定
DHT dht(DHTPIN, DHTTYPE);
void setup() {
115200); //シリアル通信の速度を指定
Serial.begin(2000); // 2秒間待つ
delay("DHT11 sensor!"); // DHT11 sensor!をシリアルモニターに表示
Serial.println(//DHT11センサーを使うためにbeginメソッドを呼ぶ
dht.begin();
}
void loop() {
float h = dht.readHumidity(); //湿度読み取り
float t = dht.readTemperature(); //温度読み取り
// 読み取りに失敗しているかチェック
// 失敗している場合はもう一度、温湿度の読み取りをする
if (isnan(h) || isnan(t)) {
"Failed to read from DHT sensor!");
Serial.println(return;
}
//シリアルモニターに表示
"湿度: ");
Serial.print(
Serial.print(h);" %\t");
Serial.print("温度: ");
Serial.print(
Serial.print(t);" *C ");
Serial.println(2000);// 2秒間待つ
delay( }
コメントを書く目的は、プログラムの働きを自分が理解したり、思い出したりするのを助けるためです。 また、他の人に、それを伝えるためでもあります。 コメントはコンパイラから無視され、コンピュータに出力されることはないので、チップ上のメモリを消費しません。
要するに、コメントを付けてプログラムの挙動を説明しています。
本資料では以下の部分で コメントを使用しています。
float h = dht.readHumidity(); //湿度読み取り
float t = dht.readTemperature(); //温度読み取り
「プリプロセッサ」とはコンパイル前にソースプログラムに対して行われる前処理のことです。 一般にある処理を行うソフトウェアに対して、データ入力やデータ整形などの準備的な処理を行うソフトウェアのことである。
本資料では「#define」と「#include」がプリプロセッサです。
#define 文字列1 文字列2
#include "外部のソースコード"
本資料では以下の部分で使用しています。
#include "DHT.h" // DHT.h をインポート
#define DHTPIN 22 // DHT sensor アウトプットピンの指定
#define DHTTYPE DHT11 // DHT型の指定
ライブラリ(英: library)は、汎用性の高い複数のプログラムを再利用可能な形でひとまとまりにしたものである。ライブラリと呼ぶ時は、それ単体ではプログラムとして作動できない、つまり実行ファイルではない場合がある。ライブラリは他のプログラムに何らかの機能を提供するコードの集まりと言える。
要するに、ライブラリを活用することで、自分で新しくプログラムを書く必要がなくなり手間を省くことができます。
本資料では以下の部分で使用しています。
#include "DHT.h" // DHT.h をインポート
...float h = dht.readHumidity(); //湿度読み取り
float t = dht.readTemperature(); //温度読み取り
関数とは、コンピュータプログラム上で定義されるサブルーチンの一種で、数学の関数のように与えられた値(引数)を元に何らかの計算や処理を行い、結果を呼び出し元に返すもののこと。
サブルーチンとは、コンピュータプログラムの中で特定の機能や処理をひとまとまりの集合として定義し、他の箇所から呼び出して実行できるようにしたもの。単に「ルーチン」とも呼ばれる。
参照 - サブルーチン 【 subroutine 】 サブルーティン
要するに、一度プログラムしたコードを再利用するために関数を用います。
本資料では以下の部分で関数を定義しています。
void setup(){
...
}void loop(){
... }
本資料では以下の部分で関数を利用しています(呼び出しています)。
115200);
Serial.begin(2000);
delay(
Serial.print();"DHT11 sensor!");
Serial.println(
dht.begin();
dht.readHumidity();
dht.readTemperature();
isnan(h) isnan(t)
関数の実行を中止して、呼び出し元の関数に処理を戻します。
要するに、return の後のプログラムは実行されなくなります。
本資料では以下の部分で return を使用しています。
void loop() {
float h = dht.readHumidity(); //湿度読み取り
float t = dht.readTemperature(); //温度読み取り
// 読み取りに失敗しているかチェック
// 失敗している場合はもう一度、温湿度の読み取りをする
// "||" は「または」を表す。
if (isnan(h) || isnan(t)) {
"Failed to read from DHT sensor!");
Serial.println(return;
}
//シリアルモニターに表示
"湿度: ");
Serial.print(
Serial.print(h);" %\t");
Serial.print("温度: ");
Serial.print(
Serial.print(t);" *C ");
Serial.println(2000);// 2秒間待つ
delay( }
setup()はArduinoボードの電源を入れたときやリセットしたときに、一度だけ実行されます。setup()は省略できません。
本資料では以下の部分で setup() 関数を定義しています。
void setup() {
115200); //シリアル通信の速度を指定
Serial.begin(2000); // 2秒間待つ
delay("DHT11 sensor!"); // DHT11 sensor!をシリアルモニターに表示
Serial.println(//DHT11センサーを使うためにbeginメソッドを呼ぶ
dht.begin(); }
loop()関数はスケッチの心臓部であり、繰り返し実行されます。loop()は省略できません。
本資料では以下の部分で loop() 関数を定義しています。
void loop() {
float h = dht.readHumidity(); //湿度読み取り
float t = dht.readTemperature(); //温度読み取り
// 読み取りに失敗しているかチェック
// 失敗している場合はもう一度、温湿度の読み取りをする
if (isnan(h) || isnan(t)) {
"Failed to read from DHT sensor!");
Serial.println(return;
}
//シリアルモニターに表示
"湿度: ");
Serial.print(
Serial.print(h);" %\t");
Serial.print("温度: ");
Serial.print(
Serial.print(t);" *C ");
Serial.println(2000);// 2秒間待つ
delay( }
変数を用いることで、データを一定期間記憶し必要なときに利用することができます。
要するに、一度変数を用意すると、次回からは変数名だけでその値を再利用できます。
本資料では以下の部分で使用しています。
float h = dht.readHumidity(); //湿度読み取り
float t = dht.readTemperature(); //温度読み取り
...
Serial.print(h); Serial.print(t);
データ型(データがた、data type)とは、コンピュータにおける データ(値)の種類に関する分類である。
整数よりも分解能が高いアナログ的な値が必要なときに使います。使用可能な値の範囲は3.4028235E+38から-3.4028235E+38までで、32ビット(4バイト)のサイズです。
要するに、温度/湿度 を測って小数点以下も扱いたいような場合に、浮動小数点数を使います。
本資料では以下の部分で使用しています。
float h = dht.readHumidity(); //湿度読み取り
float t = dht.readTemperature(); //温度読み取り
int型(整数型)は、数値の記憶にもっともよく使われる型です。値の範囲は-32768から32767までです。
要するに、プログラムの中で値を整数で扱いたい場合に int 型を使用します。
本資料では後続資料の「演習で参考にするプログラム」で使用されています。
//ESP32にはhallRead()関数がデフォルトで定義されています。hallValue というint型の変数に、hallRead()関数を使用して結果を hallValue に代入します。
int hallValue = hallRead();
プログラムの実行(流れ)の制御を行う文
if文は与えられた条件が満たされているかどうかをテストします。
要するに、条件を満たすか判定し、ある処理を実行したり実行しなかったり制御するために使用します。
本資料では以下の部分で使用しています。
// 読み取りに失敗しているかチェック
// 失敗している場合はもう一度、温湿度の読み取りをする
// "||" は「または」を表す。
if (isnan(h) || isnan(t)) {
"Failed to read from DHT sensor!");
Serial.println(// 関数の処理を終了して、呼び出し元に戻る。
return;
}
if else文を使うと複数のテストをまとめることができ、単体のifより高度な制御が可能となります。
要するに、条件が満たされるかの判定を複数作りたい場合に使用します。
本資料では後続資料の「演習で参考にするプログラム」で使用されています。
// hallValue が10以下の場合(N極)
// hallValue が23以上の場合(S極)
if (hallValue < 10 || hallValue > 25) {
// LEDを点灯させます
digitalWrite(LED_BUILTIN, HIGH);else {
} // LEDを消灯させます。
digitalWrite(LED_BUILTIN, LOW); }
人間の読めるASCII文字の形でデータをシリアルポートに出力します.
要するに、例えば、計測した温度や湿度をシリアルポートに出力することで、その値を人間が確認することができます。
本資料では以下の部分で使用しています。
"湿度: ");
Serial.print( Serial.print(h);
Serial.print()と同じフォーマットですが、ニューライン(ASCIIコード10あるいは’’)を付けて送信します。
要するに、Serial.println()関数を使用すると、シリアルポートに文字列を出力し、かつ、改行してくれます。 Serial.print()関数の場合は改行は行われません。
本資料では以下の部分で使用しています。
" *C "); Serial.println(
シリアル通信のデータレートをビット/秒(bps)で設定します
要するに、シリアルモニターに値や文字列を表示させたい場合には Serial.begin(speed) を指定する必要があります。
本資料では以下の部分で使用しています。
115200); //シリアル通信の速度を指定 Serial.begin(
プログラムを指定した時間だけ止めます。単位はミリ秒です(1,000ミリ秒=1秒)。
要するに、プログラムを指定した時間だけ止めて、処理をゆっくり実行させたい場合に delay を使用します。例えば、LEDの点滅速度を調整する場合などに利用できます。
本資料では以下の部分で使用しています。
2000);// 2秒間待つ delay(