こんにちは、ENGかぴです。
Arduinoの開発環境であるArduino IDEのダウンロードとインストールの手順をまとめました。開発環境を構築した後はライブラリに対するスケッチ例を使いながら開発する方法をソフトウェアシリアルのライブラリを使って動作確認しています。ArduinoUNOを対象にしていますが、Arduino環境下においては種類を問わず同じ考え方でソフト開発を行うことができます。
Arduino UNOを使って動作確認を行ったことを下記リンクにまとめています。
Arduinoで学べるマイコンのソフト開発と標準ライブラリの使い方
Arduino開発環境を作る
Arduinoの開発環境であるArduino IDEのダウンロードからインストールまでの手順をまとめていきます。対象OSはWindows10です。
ダウンロード
Arduino IDEは下記のリンクから取得できます。
Arduino IDEのダウンロードーDownload the Arduino IDE
Download the Arduino IDEのページから「Windows」を選択します。クリックするとContribute to the Arduino Softwareのページに遷移します。寄付する場合は「CONTRIBUTE&DOWNLOAD」を選択します。ダウンロードだけの場合は「JUST DOWNLOAD」を選択します。
ダウンロードが終わったら「arduino-1.8.16-windows.exe」をクリックしてインストールを開始します。(1.8.16は2021年9月時点のバージョンです。)

インストール
インストールは基本的になにも設定することなくNextを選択しても問題なく行えます。
USBドライバーがインストールされていない場合インストールの途中にUSBドライバーをインストールするかを問われることがあります。ArduinoボードをUSBで接続して開発を行うためUSBドライバーも迷わずインストールしましょう。
Arduino IDEを起動する
Arduino IDEを起動すると初期画面にからのスケッチが表示されます。setup()関数内に各種機能の初期化処理を記述します。loop()関数には処理内容を記述します。
初期起動時はボードとしてArduino Unoが選択されています。他のシリーズを開発する際はボードを対象のシリーズを選択します。ボード選択は「ツール」内のボードからArduino AVRの中から選択します。
初心者でもライブラリーの使い方が分かるようにスケッチ例が準備されています。
スケッチ例を確認する
// digital pin 2 has a pushbutton attached to it. Give it a name:
int pushButton = 2;
// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
// make the pushbutton's pin an input:
pinMode(pushButton, INPUT);
}
// the loop routine runs over and over again forever:
void loop() {
// read the input pin:
int buttonState = digitalRead(pushButton);
// print out the state of the button:
Serial.println(buttonState);
delay(1); // delay in between reads for stability
}
スケッチ例を見ながらArduino環境におけるコーディングの仕方を学習することができます。スケッチ例から使えそうなコマンドをコピーしながら実際にマイコンで動作させることで効率よく学習できます。
スケッチ例はファイル内にあるスケッチ例の欄に各種ライブラリを使用したスケッチ例を選択することができます。今回はスケッチ例である「DigitalReadSerial」の動作確認を行います。
7行目のSerial.Begin(9600)でシリアル通信のボーレートを9600bpsに設定しています。8行目のpinMode(pushButton,INPUT)で2ピンがINPUT(入力ピン)に設定されます。
15行目のdigitalRead(pushButton)で2ピンの状態をリードしています。17行目のSerial.println(buttonState)で読み込んだ2ピンの状態を文字列として改行コードをつけてシリアルモニタに表示します。
スケッチ例を確認しながら動作目的に合うライブラリのAPIを探しながらソフト開発を行うことができます。

シリアル通信をシリアルモニターで確認する
DigitalReadSerialのスケッチ例とSoftwareSerialのスケッチ例を少し改造してシリアル通信をシリアルモニタを確認します。シリアルモニタの「送信ボタン」でUNOのRXに受信データが転送されます。そのデータをSoftwareSerialのRX(10:RX)に送信します。
DI7はプルアップされた入力ピン設定としポートの状態がLOWレベルになったとき、準備したデータをシリアルモニタ上に表示するようにしています。
準備したデータはバイナリーデータで「0x30、0x31、0x32、0x33」としています。(全体コードのbuf[]の部分)これらのバイナリーデータは文字コードの「0123」に相当するものであるためモニタ上で確認しやすくなります。
シリアルモニタはエディターの右上のマークをクリックするかツール欄からシリアルモニタを選択することで表示できます。
通常のSerialをシリアルモニタ用の表示に特化して使用するとデバッグしやすい開発になると思います。今回はボーレートを115200bpsにしましたが、ソフトウェアによるシリアル通信であるためシリアル通信専用のポートではありません。
上記の例では115200bpsでも行けましたが、複数バイトになると頻繁にデータを取りこぼす現象が発生しやすくなります。
Arduino UNOはシリアル通信専用ポートが1つしかないので複数使用したい場合はボーレートを高くしすぎない設定でSoftwareSerialを使用するしかなさそうです。
全体ソースコード
以下のソースコードはコンパイルして動作確認をしております。コメントなど細かな部分で間違っていたりやライブラリの更新などにより動作しなくなったりする可能性があります。参考としてお使いいただければと思います。
#include <SoftwareSerial.h>
#define PIN_DI1 7
bool flg= false;
uint8_t buf[]={0x30,0x31,0x32,0x33};
SoftwareSerial mySerial(10, 11); // RX, TX
void setup() {
Serial.begin(115200);
mySerial.begin(115200);
pinMode(PIN_DI1,INPUT_PULLUP);
}
void loop() {
if( !digitalRead(PIN_DI1)){
if(flg ){
flg = false;
for(uint8_t i = 0; i < sizeof(buf);i++ ){
mySerial.write(buf[i]);
Serial.write(buf[i]);
}
Serial.println();
}
}
else{
flg = true;
}
if(mySerial.available()){
Serial.println("mySerial-read");
Serial.println(mySerial.read());
}
if( Serial.available()){
mySerial.write(Serial.read());
}
}
関連リンク
Arduinoのライブラリを使って動作確認を行ったことを下記リンクにまとめています。
Arduinoで学べるマイコンのソフト開発と標準ライブラリの使い方
Seeeduino XIAOで学べるソフト開発と標準ライブラリの使い方
ESP32-WROOM-32Eで学べるソフト開発と標準ライブラリの使い方

最後まで、読んできただきありがとうございました。