マイコンおよびプログラムの構築
以下の画像の「マイコンおよびプログラムの構築」部分を説明します。
本資料で説明する最終的な成果物(マイコン)はこんな感じになります。
手順
- Arduino IDE のインストール
- ボードとシリアルポートの設定
- LEDを点滅させてみよう
- 3つのLEDを点滅させてみよう
- 照度センサの値をシリアルモニタで見てみよう
- sakura.ioに照度センサの値を送る
Arduino IDE のインストール
https://www.arduino.cc/en/Main/Software にアクセスし、開発環境を入手します。
ボードとシリアルポートの設定
Arduino IDE が起動したら、Arduino本体をPCに接続します。
ボード
ツール > ボード からArduino/Genuino Uno
を選択します。
シリアルポート
ツール > シリアルポート から、出てきたCOMポートを選択します。
Macの場合はシリアルポート内の~~~~(Arduino/Genuino Uno)
となるものを選択します。
LEDを点滅させてみよう
結線
以下の回路図を参考に、Arduinoとブレッドボードにジャンパーコードを接続していきましょう。
⚠️注意して欲しいこと
- ArduinoをPCから外してから作業を行いましょう。
- プログラムのソースコードに影響が出るので、Arduino側の配線は、図の通りに繋いでください。
ℹ︎ヒント
- 今回用意しているLEDは、抵抗を内蔵している製品となります。
- ジャンパーコードの色によって挙動が変わることはありませんので、好きな色をお使いください。
- 電源に関しては、センサーやマイコンが壊れてしまうことがあるので、電源とわかる色(黒、赤)と明示しておくと良いです。
- LEDには極性があります。足が長い方がアノード(+)、短い方がカソード(-)です。正しい向きで配線しないと発光しません。
プログラムの流し込み
ファイル > 新規ファイル で新規ファイルを開き、以下のスケッチをコピーして貼り付けてください。
#define LED 12
void setup() {
pinMode(LED, OUTPUT);
}
void loop() {
digitalWrite(LED, HIGH);
delay(1000);
digitalWrite(LED, LOW);
delay(1000);
}
マークをクリックし、Arduinoにプログラムを書き込みます。
LEDが一秒置きに点滅したら成功です。
3つのLEDを点滅させてみよう
結線
以下の回路図を参考に、Arduinoとブレッドボードにジャンパーコードを追加で接続していきましょう。
⚠️注意して欲しいこと
- ArduinoをPCから外してから作業を行いましょう。
- プログラムのソースコードに影響が出るので、Arduino側の配線は、図の通りに繋いでください。
ℹ︎ヒント
- 今回用意しているLEDは、抵抗を内蔵している製品となります。
- ジャンパーコードの色によって挙動が変わることはありませんので、好きな色をお使いください。
- 電源に関しては、センサーやマイコンが壊れてしまうことがあるので、電源とわかる色(黒、赤)と明示しておくと良いです。
- LEDには極性があります。足が長い方がアノード(+)、短い方がカソード(-)です。正しい向きで配線しないと発光しません。
プログラムの流し込み
ファイル > 新規ファイル で新規ファイルを開き、以下のスケッチをコピーして貼り付けてください。
#define YELLOW_LED 10
#define WHITE_LED 9
#define BLUE_LED 8
void setup() {
pinMode(YELLOW_LED, OUTPUT);
pinMode(WHITE_LED, OUTPUT);
pinMode(BLUE_LED, OUTPUT);
}
void loop() {
// 黄色LEDを点滅
digitalWrite(YELLOW_LED, HIGH);
delay(1000);
digitalWrite(YELLOW_LED, LOW);
delay(1000);
// 白LEDを点滅
digitalWrite(WHITE_LED, HIGH);
delay(1000);
digitalWrite(WHITE_LED, LOW);
delay(1000);
// 青色LEDを点滅
digitalWrite(BLUE_LED, HIGH);
delay(1000);
digitalWrite(BLUE_LED, LOW);
delay(1000);
}
マークをクリックし、Arduinoにプログラムを書き込みます。
黄色、白色、青色のLEDが一秒置きに点滅したら成功です。
照度センサの値をシリアルモニタで見てみよう
結線
以下の回路図を参考に、Arduinoとブレッドボードにジャンパーコードを追加で接続していきましょう。
⚠️注意して欲しいこと
- ArduinoをPCから外してから作業を行いましょう。
- プログラムのソースコードに影響が出るので、Arduino側の配線は、図の通りに繋いでください。
ℹ︎ヒント
- 今回用意しているLEDは、抵抗を内蔵している製品となります。
- ジャンパーコードの色によって挙動が変わることはありませんので、好きな色をお使いください。
- 電源に関しては、センサーやマイコンが壊れてしまうことがあるので、電源とわかる色(黒、赤)と明示しておくと良いです。
- LEDには極性があります。足が長い方がアノード(+)、短い方がカソード(-)です。正しい向きで配線しないと発光しません。
- 照度センサには極性がありません。どちらの向きで配線しても大丈夫です。
- 抵抗には極性がありません。どちらの向きで配線しても大丈夫です。
プログラムの流し込み
ファイル > 新規ファイル で新規ファイルを開き、以下のスケッチをコピーして貼り付けてください。
// 照度センサー
#define CDS A0
// LED
#define RED_LED 12
// 照度センサーの閾値
#define UPPERLIMIT 750
uint32_t light_val = 0;
uint32_t upperlimit = UPPERLIMIT;
void setup() {
pinMode(RED_LED, OUTPUT);
Serial.begin(9600);
}
void loop() {
light_val = (uint32_t)analogRead(CDS);
Serial.print("light value: ");
Serial.println(light_val);
if (light_val > UPPERLIMIT) { // 部屋が暗くなったら
digitalWrite(RED_LED, HIGH); // LEDを点灯
} else {
digitalWrite(RED_LED, LOW); // LEDを消灯
}
delay(1000);
}
マークをクリックし、Arduinoにプログラムを書き込みます。
マークをクリックして、シリアルモニタを表示します。シリアルモニタに、一秒置きに照度センサの値が書き込まれていたら成功です。
照度センサを手でかざして、値の変化を見てみましょう。
sakura.ioに照度センサの値を送る
ライブラリのインストール
sakura.ioに照度センサの値を送ることを簡潔に行うために、さくらインターネット社が提供しているライブラリをインストールしましょう。
スケッチ > ライブラリをインクルード > ライブラリを管理... をクリックします。
右上検索窓からsakuraio
を入力すると、SakuraIO by SAKURA Internet Inc.
がヒットするので、該当ライブラリをインストールしてください。
プログラムの流し込み
ファイル > 新規ファイル で新規ファイルを開き、以下のスケッチをコピーして貼り付けてください。
#include <SakuraIO.h>
SakuraIO_I2C sakuraio;
// 照度センサー
#define CDS A0
// LED
#define RED_LED 12
#define YELLOW_LED 10
#define WHITE_LED 9
#define BLUE_LED 8
// 照度センサーの閾値
#define UPPERLIMIT 750
uint32_t light_val = 0;
uint32_t cnt = 0;
uint32_t upperlimit = UPPERLIMIT;
void setup() {
pinMode(RED_LED, OUTPUT);
pinMode(YELLOW_LED, OUTPUT);
pinMode(WHITE_LED, OUTPUT);
pinMode(BLUE_LED, OUTPUT);
Serial.begin(9600);
Serial.print("Waiting to come online");
for(;;){
if( (sakuraio.getConnectionStatus() & 0x80) == 0x80 ) break;
Serial.print(".");
delay(1000);
}
Serial.println("");
}
void loop() {
cnt++;
Serial.println(cnt);
light_val = (uint32_t)analogRead(CDS);
Serial.print("light value: ");
Serial.println(light_val);
if(sakuraio.enqueueTx(0,light_val) != CMD_ERROR_NONE){
Serial.println("[ERR] enqueue error");
}
if(sakuraio.enqueueTx(1,upperlimit) != CMD_ERROR_NONE){
Serial.println("[ERR] enqueue error");
}
if (light_val > UPPERLIMIT) { // 部屋が暗くなったら
digitalWrite(RED_LED, HIGH); // LEDを点灯
} else {
digitalWrite(RED_LED, LOW); // LEDを消灯
}
sakuraio.send();
delay(1000);
uint8_t available;
uint8_t queued;
if(sakuraio.getTxQueueLength(&available, &queued) != CMD_ERROR_NONE){
Serial.println("[ERR] get tx queue length error");
}
Serial.print("Available :");
Serial.print(available);
Serial.print(" Queued :");
Serial.println(queued);
// sakura.ioから受信したデータに応じてLED点滅
available = 0;
if (sakuraio.getRxQueueLength(&available, &queued) != CMD_ERROR_NONE) {
Serial.println("[ERR] get rx queue length error");
}
if (available > 0) {
uint8_t ch, type, value[8];
int64_t offset;
sakuraio.dequeueRx(&ch, &type, value, &offset);
Serial.print("ch:");
Serial.println(ch);
Serial.print("value:");
Serial.println(value[0]);
if (ch == 10) {
if (value[0] == 1) {
digitalWrite(YELLOW_LED, HIGH);
delay(1000);
digitalWrite(YELLOW_LED, LOW);
}
} else if (ch == 20) {
if (value[0] == 1) {
digitalWrite(WHITE_LED, HIGH);
delay(1000);
digitalWrite(WHITE_LED, LOW);
}
} else if (ch == 30) {
if (value[0] == 1) {
digitalWrite(BLUE_LED, HIGH);
delay(1000);
digitalWrite(BLUE_LED, LOW);
}
}
sakuraio.clearRx();
}
}
マークをクリックし、Arduinoにプログラムを書き込みます。
マークをクリックして、シリアルモニタを表示します。シリアルモニタに、Waiting to come online...
という書き込みの後、一秒置きに照度センサの値が書き込まれていたらひとまず成功です。
sakura.ioに照度センサの値が実際に送信されているかは次のフェーズで確認します。