Arduino Nanoで遊んでみるお話。
はじめに
珍しく、ハードウェアのお話です。IoT的なお話です。
タイトルにArduino Nanoと書きましたが、実際に使うのはその互換品(ですらない)、Seeed Studio Xiao ESP32 C6というボードです。
切手くらいのサイズに、WifiやBluetoothなんかまで載ってて、ちょっとしたIoTっぽい何かとか、それこそおもちゃみたいなものを作るのに、ちょうどいい感じのマイコンボードです。
その代わりに、GPIOなんかのポートが少ないですが、マイコンで何かやらせる程度なら、これだけあれば十分な気もします。

RaspberryPiなどはOSが動いたりしますが、こいつはそんな高度なことはできない、いわゆるマイコンボードという類のものですね。
その代わりに、とっても省電力でちょこちょこっとした細かい作業をやり続けてくれる奴です。
目標
とある作りたいものがあって、買ってきたのですが、筆者はほぼマイコンについて無知です。
ということで、今回はhowdy world的なものを3つほど作ってみて、マイコンってのがどういうものであるかを理解することを目標にしてみます。
とはいっても、あんまりにも初歩的なことを書いたりするのは面倒だし、ググればいくらでも情報が出てきたりするので、初期設定なんかは駆け足で進みます。
準備
Arduino IDEのインストール
別に何も難しいことはないです。
下記のサイトからexeなりdmgなりをダウンロードしてちゃちゃっと適当にインストールしちゃいましょ。


セットアップ
IDEをインストールしても、USBに接続したマイコンを自動では認識してくれないです。
認識させるために、IDE開いて、左側のアイコンの2つめを押して、Boards managerってのを開きましょう。windowsならctrl+shift+Bでも開くみたいです。
出てきた左側ペインの入力ボックスにesp32と入力して出てくるesp32 by Espressifってのをインストールしましょう。(画像下のもの。私の環境ではインストール済なため「REMOVE」になってます)

途中、「これ入れても大丈夫?」みたいなこと聞かれるかもしれないですが、まあ、確認しててきとうに入れてましょう。
おわったら、下記画像の箱を押して、select other board and port...を押下して、自分のもってるボードの名前を探して、適切なCOMを選んだらok
COM番号がわからない場合には、デバイスマネージャーのPortsから探してみるとよいです。
PORTSにNO PORTS DISCOVEREDと表示されてる場合には、マイコンとUSBの接続がおかしいと思います。USB抜き差ししてみるといいと思います。


初期設定の仕方なんてのは、割とどうでもいいことなので、さっさと作り物をしてみるです。
制作物その1「LED点滅させてみる」
まずは電子部品が何もない状態で、かつ、動作確認がてら、てきとうに動かしてみることにします。
そして、動作確認するためのコードを書くのも面倒なので、サンプルを出してみます。
File > Examples > 01.Basics > Blinkを開いてみます。
IDEが別画面で開いて、サンプルコードが出てくると思います。

書いてることは大したことないし、解説することもないので、とりあえず動かしてみます。
IDEの左上「→」のボタンを押したら、コードをコンパイルしてマイコンに書き込んでくれます。

USBの差込口横のLEDが点滅しましたね。
delay(1000)を増減させると、動きが変わったりして面白いかもしれないです。
とりあえず動かせたので、okです。
制作物その2「ほかのLED点滅させてみる」
創作意欲がわいてきたところで、今度は外部のLEDを光らせてみます。
使用するのは、下記のパーツです。
- 青色LED
- 2.8V-3.4V
- max 30mA
- 抵抗
- 200Ω


コードはこんなの。
クラス化したりそういうのはとりあえずなしで、とりあえず書いたってだけのソースです。
const int out = D2;
void setup() {
pinMode(out, OUTPUT);
}
void loop() {
digitalWrite(out, HIGH);
delay(500);
digitalWrite(out, LOW);
delay(1000);
}
setup()でD2というピンを、OUTPUTに指定。
loop()でそのピンの電圧をHIGH→LOWとするものを、回してるってだけですね。
※今回はたまたまD2を使ってますが、デジタルの出力ができるポートなら何番を使っても問題ないと思います。
回路はD2から出した線を200Ωの抵抗につなぎ、発光ダイオードを経てGNDに帰るというだけのもの。
回路図にすれば、単純にこれだけのことです。
なんて簡単!!

抵抗値は下記で計算しました。
前提:
手元にあるLEDのVfは、その袋のスペック表に2.8V-3.4Vと書いてたので、3Vってことにします。
電流量はmaxで30mAまでにしてねとのことなので、マージンとって10mA(0.01A)流してみます。
D2からの出力は5Vが出てます。
計算:
(D2からの出力電圧 - LEDのVf) / 電流量 = 必要な抵抗
(5V - 3V) / 0.01A = 200Ω
D2というのは、このデバイスの3番ポート(下図・左上から3番目)のことです。

制作物その3「ボタン押下を検知してみる」
光らせるだけじゃ何の役にも立たないですよね。
ってことで、ボタンが押されたとかそういうのを検知してみます。
使用するのは、下記のパーツです。
さっきと同じです。
- 青色LED
- 2.8V-3.4V
- max 30mA
- 抵抗
- 200Ω
- タクトスイッチ
※ 「タクトスイッチ」は押してる間だけ通電する「ボタン」のこと。

コードはこんなの。
ほんのちょっとだけ小難しくなりました。
const int din = D1;
const int out = D2;
void setup() {
pinMode(din, INPUT_PULLUP);
pinMode(out, OUTPUT);
}
void loop() {
switch();
}
void switch(){
int state = digitalRead(din);
digitalWrite(out, !state);
}
今度は、D1にINPUT_PULLUPというモードが付けられました。
詳しい仕組みはググってもらうとして、このモードは要するに、当該ピン(今回はD1)のデフォルト状態がHIGHとなり、グランドに接触したらLOWとなると思えばよいです。
その信号をdigitalRead(din)で読み取り、その値を反転してD2から出力する電圧を決定しているということですね。
つまり、D1から生えてるスイッチを押していない(OFF)状態の時、D1の値はHIGHとなっているため、D2はLOWとなっている。(LEDが光らない)
そして、D1から生えてるスイッチを押した(ON)状態のときは、D1の値がLOWとなるため、D2がHIGHとなる。(LEDが光る)
なんだかややこしい感じがありますが、回路図としては、下記のとおりです。
D1から出ているスイッチが開いた(OFF)状態だと、D2から出ているLEDが光らない。D1から出ているスイッチが閉じた(ON)状態だと、D2から出ているLEDが光る。

動画内、右側へのびている黄色の線が、D1から出てスイッチへつながっている信号線です。
信号線の先でボタンを連打してみてます。
いつもの雑なまとめ
とりあえず、inputとoutputについて学べたので、もうこれだけでもいろいろと作れちゃいそうですね。
制作物の目標もあるので、ぼちぼち作っていこうかと思ってます。






