Arduino
2017年1月13日
Arduinoピン配置
Arduino基盤の形
Arduinoを手に入れたので,プログラムの環境を整えて,プログラミングの練習をしていろいろなものを作っていきます。
その前に入手方法です。直接秋葉に買いに行くこともできます。私のような地方在住者は,通信販売が便利です。
・コアサイズ:8bit megaAVR
・クロック:20MHz
・プログラムメモリ:32kB
・EEPROM:1kB
・RAM:2kB
・GPIO:23pin
・UART/USART:1Ch
・I2C:1Ch
・SPI:1Ch
・タイマ:3Ch
Arduinoスペック
Arduino購入
用意するものは,パソコン,USBケーブル,Arduinoです。3240円で【永久保証付き】スイッチサイエンスの正規の製品が購入できます(Amazonでは送料無料)。
オリジナルはARDUINOのロゴが印刷され,pinソケットにもシルクが有ります。
クローン
設計図などが公表されていますのでだれでも同じものが作れます。そんな製品をクローンと言います。クローンは328P(28pinDIP)を使ったもので610円,328が交換できないものでは399円で買えてしまいます(関東は送料無料)。USBコネクタをマイクロUSBにしたArduino microという機種もあります。
Arduino nanoという余計なものがすべて排除されたものは380円です(pin配列・幅が違うので,シールドを使うことは難しそうです)。
クローンは328P(28pinDIP)を使ったもので1280円,328が交換できないものでは675円です(関東は送料無料)。
Arduino nanoは380円位です。
多少の誤差は有ります。あまり安いものは送料が高い場合もあります。
←MAKER UNO
↑Arduino nano
2020年11月22日
電波を使うWifiやBluetoothは技適マークのないものは日本国内では使用できません。安いものには注意しましょう。
Wemos D1 R32
esp-32wifi&bluetooth
ESP32_DEV KIT_V1
2021年4月12日 899円
2021年4月12日 1250円
Arduinoはクローンでも値上がりしてしまいましたので同じような価格帯のESP-32やSTM32もお得感が出てきました。
Arduino IDE
先ず,パソコンの準備です。
Arduino I,D,Eという統合環境をインストールします。
①インターネットでArduinoと検索します。
②中からDownloadをクリックします。
③Windows Installerをクリックすると最新の
IDE(Integrated Development Environment)
「統合開発環境」を手に入れることができます。
*別のバージョンが必要な時はARDUINO 1.0.6 / 1.5.x / 1.6.xから選べます。
Arduino Robotを使う時には1.60が必要です。
通常は一番新しいバージョンをインストールするといいでしょう。
ダウンロード
2022年6月24日Arduino 1.8.19
③’追加説明
ダウンロードを申し込む場面で寄付を募る入力がありますが,金額の下に表示されていない項目があります。
クリックすると表示される「ド」の部分を再度クリックすると,「JUST DOWNLOAD」と同じように寄付なしでダウンロードをします。
IDE起動
④インストールが終了するとIDEが起動します。
Sketch_jan13a などの日付が入ったタイトルの「スケッチの元」が表示されます。(初期画面)
では,さっそくLチカ
⑤スケッチを書く
Blink
BlinkというのはWinkに似ています。ウインクがパチリという感じでブリンクはチカチカというニュアンスです。LEDをチカチカということで「Lチカ」といいます。一番初めに行うマイコンのプログラムを作る練習です。
C言語の”Hello World”のようなものです。
Arduinoではプログラムのことをスケッチと呼びます。画板の中に簡単に下絵を描くようにプログラムが書けるという意味でしょう。
すぐ動く
すぐ動くスケッチ例です。コピペできます。
LED00
//初期設定
void setup(){
pinMode(13,OUTPUT);//内臓LED出力
}
//繰り返し
void loop(){
digitalWrite(13,HIGH);//LED灯
delay(1000);//1000ms待
digitalWrite(13,LOW);//LED消
delay(1000);//1000ms待
}
動かしてみることが大切です。
delayの1000mSを500とか2000などに変えてみましょう。
初期画面
どのようにしてスケッチを作るのかを学びましょう。
初期画面です。
Sketch_jan13a
setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}
テキストとボックスでArduino IDEのエディタ画面を模倣します。正確ではありませんが文字がはっきり読めます。画像よりもデータ数が少ないので有益です。
日本語の注釈を付けてみます。
Sketch_jan13a
setup(){
//put your setup code here,to run once:
//ここには設定する内容を書きます。
//一度だけ実行されます。
}
void loop(){
//put your main cood here,to run repeatly:
//中心となる内容を書きます。
//繰り返し実行されます。
}
C言語ではmain( )が中心となっていますが,Arduinoではsetup( )とloop( )が中心のプログラムとなります。
少し難しい話です。順序としてはここなのですが,飛ばして後で読み返してもいいと思います。
スケッチの4つの部分
//宣言部分
setup() {//初期設定部分
// put your setup code here, to run once:
//ここには設定する内容を書きます。
//一度だけ実行されます。
}
void loop() {//繰り返し部分
// put your main code here, to run repeatedly:
//繰り返し実行される,中心となる内容を書きます。
}
//関数・補助部分
設定部分と繰り返し部分で一応プログラムは書けますが,便利に使うために後2つの部分が有ります。
上の方に宣言部分があってインクルードファイル(ヘッダー)と言って一般によく使われているディバイスを扱うための関数を使えるようにするC++,hのファイル(ライブラリ)や変数の宣言を行う領域があります。
下の方には良く使う関数や補助のプログラムを書く場所のための関数・補助部分があります。
ライブラリ(インクルードファイル)の登録のしかたはこちらです。
スケッチ例
ファイルのタグをクリックするとスケッチ例
が5行目に見えます。
スケッチ例を選択するとスケッチの種類が表示されます。
内臓のスケッチ例の一番上01.Basicsを選択します。上から3番目Blinkを選択します。
ブリンクのスケッチ
LED
/*
Blink without Delay
Turns on and off a light emitting diode (LED) connected to a digital pin,
without using the delay() function. This means that other code can run at the
same time without being interrupted by the LED code.
The circuit:
- Use the onboard LED.
- Note: Most Arduinos have an on-board LED you can control. On the UNO, MEGA
and ZERO it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN
is set to the correct LED pin independent of which board is used.
If you want to know what pin the on-board LED is connected to on your
Arduino model, check the Technical Specs of your board at:
https://www.arduino.cc/en/Main/Products
created 2005
by David A. Mellis
modified 8 Feb 2010
by Paul Stoffregen
modified 11 Nov 2013
by Scott Fitzgerald
modified 9 Jan 2017
by Arturo Guadalupi
This example code is in the public domain.
http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
*/
// constants won't change. Used here to set a pin number:
const int ledPin = LED_BUILTIN;// the number of the LED pin
// Variables will change:
int ledState = LOW; // ledState used to set the LED
// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0; // will store last time LED was updated
// constants won't change:
const long interval = 1000; // interval at which to blink (milliseconds)
void setup() {
// set the digital pin as output:
pinMode(ledPin, OUTPUT);
}
void loop() {
// here is where you'd put code that needs to be running all the time.
// check to see if it's time to blink the LED; that is, if the difference
// between the current time and last time you blinked the LED is bigger than
// the interval at which you want to blink the LED.
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
// if the LED is off turn it on and vice-versa:
if (ledState == LOW) {
ledState = HIGH;
} else {
ledState = LOW;
}
// set the LED with the ledState of the variable:
digitalWrite(ledPin, ledState);
}
}
たくさん英語があってわかりにくいので,コメント(注釈){説明}の部分をとってみます。
スケッチの約束(注釈)
LED
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
// turn the LED on (HIGH is the voltage level)
delay(1000);// wait for a second
digitalWrite(LED_BUILTIN, LOW);
// turn the LED off by making the voltage LOW
delay(1000);// wait for a second
}
/*
この間はプログラムを説明する
注釈となります。
*/
//一行の中でこの記号の後は注釈です。
簡単にしたスケッチ
LED01
void setup() {
pinMode(LED_BUILTIN,OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN,HIGH);
delay(1000);
digitalWrite(LED_BUILTIN,LOW);
delay(1000);
}
注釈を除くとスケッチはこれだけです。
スケッチの意味
void は 「なんでもないもの」数でも文字でもないということです。
setup() は 「初めに設定する」ということです。
( )括弧の中身がないのは伝えることはないということです。
{}中括弧の中を1回だけ実行します。
pinMode は 指定したpinが入力か出力かを決めます。
LED_BUILTIN は内臓のLEDのつながっているPINです。13でも通じます。
OUTPUT は 出力に設定します。
loop( ) は 繰り返し行うことです。
digitalWrite( )は5Vか0Vで出力するということです。
HIGH は 5V LOW は 0Vです。
delay( ) は 待ち時間をmsで示しています。
日本語で注釈を書いてみます。
LED02
//初期設定
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
//内臓LED出力
}
//繰り返し
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
//内臓LED点灯
delay(1000);//1000ms待機
digitalWrite(LED_BUILTIN, LOW);
//内臓LED消灯
delay(1000);//1000ms待機
}
内蔵LEDはLEDだけでいいように思いますし,もっと簡単な言葉を使いたいところです。
このプログラムをArduinoに入れるために準備をします。
・ツール→ボード→Arduino unoを選択します。
・ツール→シリアルポート→接続しているポートを選択します。
ボードとポート
コンパイル✓
⑥コンパイル:✓記号をクリックすると
コンパイルします。
人間にわかりやすいプログラムからArduinoにわかる数字に変えます。
書き込み
⑦書き込み:USBケーブルでパソコンとArduinoをつなぎます。
ツールのタグをクリックするとボードとポートが有ります。
ボードはArduinoの型版です。私のはUnoです。
ポートはArduinoを接続したシリアルポートの番号です。
この2つを選択しておきます(ほぼ自動で選択されます)。
⇒記号をクリックするとコンパイルして書き込みをします。
確認
⑧確認:基板上のLEDが1秒ごとに点滅すれば成功です。
1秒ごとに内臓のLEDが点滅しました。成功です。
理解ができたら少し変えます。
いたずら
LED03
//初期設定
void setup(){
pinMode(13,OUTPUT);//内臓LED出力
}
//繰り返し
void loop(){
digitalWrite(13,HIGH);//LED灯
delay(1000);//1000ms待
digitalWrite(13,LOW);//LED消
delay(1000);//1000ms待
}
⑨いたずら(*これが大切だと思います)。
これでも動きます。LED_BUILTINと13は同等なのです。1000を変更すると点滅の時間が変わります。
スケッチ例はたくさん有りますので練習には事欠きません。いろいろなことをやってみましょう。下のリンクも参考にしてください。
スケッチはコピーして貼り付けても動きません,空白があるのでじゃまをしています。
同じようにタイプしてください。プログラムの練習になります。
注釈をなくして,これでも動きます。
LED04
void setup(){
pinMode(13,OUTPUT);
}
void loop(){
digitalWrite(13,HIGH);delay(1000);
digitalWrite(13,LOW);delay(1000);
}
注釈がなくても意味が分かるようになってきませんか?
更に,これでも動きます。
LED05
void setup(){pinMode(13,OUTPUT);}
void loop(){digitalWrite(13,HIGH);delay(1000);
digitalWrite(13,LOW);delay(1000);}
行をくずすともっと短くなりますが,意味が分からなくなってしまいます。これがプログラムとしては限界です。
LED05
void setup(){
pinMode(2,OUTPUT);
}
void loop(){
digitalWrite(2,HIGH);delay(1000);
digitalWrite(2,LOW);delay(1000);
}
見にくいのですが,コピペできます。IDEに移してから,半角スペースやTAB,注釈を入れると見やすくなります。
もっといたずら
上のスケッチは出力にデジタル2番ピンにしました。
D2とGNDにLEDをつなげてブリンクします。
スケッチ各部
Arduinoのスケッチは4つの部分に分けることができます。各部分に名前を付けました。
宣言部分まだ使っていません。
インクルードファイルや決まりごとスケッチ全体で使う変数などを記述します。
初期設定部分
初めに設定することを記述します。
繰り返し部分
本体に当たる部分で繰り返し行う事柄を記述します。
関数・補助部分まだ使っていません。
何回も使うような関数や補助的な文を書きます。
2つ以上のプログラムを合成する場合には,各部のスケッチを順序良く各場所に入れてやれば動くようになります。
Arduino Nano
電池で駆動するためにはUNOでは消費電流が多いので付属品の少ないNanoがいいのではないかと考えました。
Lチカしてみると点灯時28.5mA消灯時25.9mAです。PWR_DOWNでスリープにすると16.5mAになります。
ある程度UNOでスケッチやハードを開発してNanoに替えると効率がいいと思います。
2017年4月9日
Arduino Nano互換機を購入しました。Amazonでpinソケット付き360円でした。2022/10/16 1000円前後になってしまいました。
この互換機はCH341,FT232RLというドライバを読み込まなくてはなりません。インターネッとからダウンロードできます。
ドライバ
ブートローダー
ドライバをインストールしたら,ボードをNanoに替え,ポートを選択します。ツール,ProcessorでATmega328P (Old Bootloader)に変更します。後はUNOと変わらずにスケッチを書くことができます。全ての入出力が同じように使えます。pinの配列が違うのでシールドはそのままでは使えません。
使用例
スマートカーに使ってみました。ブレッドボードに乗せると小回りが利いてちょっとした改造が簡単にできます。
ICSP
USBが使えなくなってしまった場合はICSPを使ってプログラムを書き込むことができます。ICSPが働くのは/RESET端子がLOWの場合(リセットボタンを押しているとき)です。ICSP(in-circuit serial programming)はISP(In-System Programming)と同じだそうです。
Arduino ESP32
Arduinoでwifiを使おうとしましたが,容量が多いのとスピードが速いのでそちらの方で活用しましょう。マイクロUSBコネクタでの接続なのでケーブル回りが軽くなります。
2017年4月23日
Lチカ for ESP32
void setup() {//設定部
pinMode(2, OUTPUT);//LEDの接続はGPIO2
}
void loop() {//繰り返し部
digitalWrite(2, LOW);//LEDオフ
delay(1000);//1秒待ち
digitalWrite(2, HIGH);//LEDオン
delay(1000);//1秒待ち
}
1
2
3
4
5
6
7
8
9
Lチカの例文です。電波を出すプログラムは有りません。
Arduino ESP32
Arduinoでwifiを使おうとしています。技適がありますので,日本でも使えます。技適がないものもありますので,注意しましょう。マイクロUSBコネクタでの接続なのでケーブル回りが軽くなります。
32 bit
80-240M
ROM4M
RAM520K
技適マークです
日本国内で使用する,電波を扱う製品やディバイスは,このマークがないと法律違反になります。
2020年11月21日
Arduino UNO互換のESP32ボードを入手しました。例によって手こずっています
ArduinoでESP32を使うを検索すると「GIT」に詳しく
丁寧に説明があります。手順に従って準備します。
USBはCH340Cで制御しているようなのでドライバーは必要に応じて用意します。
ESP-32設定
ボード: "ESP32 Dev Module"
Upload Speed: "115200"に変更
(または 256000)
設定項目
Flash Mode: "QIO"
Flash Size: "4MB (32Mb)"
Partition Scheme: "初期値"
Flash Frequency: "80MHz"
PSRAM: “Disabled”
Upload Speed: "256000"
Core Debug Level: なし
シリアルポート: 自分のUSB(COM)ポート
書込み装置: なし
内臓LEDは pin2 です。
シリアル通信を使う場合はUpload Speed: "115200"としないと文字化けします。
内臓LED(D2)でLチカをしてみました。
LEDが明るすぎて見えにくいのですが手前のあかいLEDが点滅しています。
Lチカ for ESP32
1
2
3
4
5
6
7
8
9
void setup() {
pinMode(2, OUTPUT);
}
void loop() {
delay(1000);
digitalWrite(2, LOW);
delay(1000);
digitalWrite(22, HIGH);
}
D13でLチカをしてみました。
Lチカ for ESP32
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH);
digitalWrite(13, LOW);
delay(1000);
1
2
3
4
5
6
7
ここで使ったLEDは100円ショップで購入したクリスマス用の電飾の一部です。110円でLED10個と電池ケース単3電池2本分,更にスライドスイッチとコードが付いています。
ここで使ったLEDは100円ショップで購入したクリスマス用の電飾の一部です。110円でLED10個と電池ケース単3電池2本分,更にスライドスイッチとコードが付いています。
LEDをD13とGNDにつないでLチカとシリアル通信をやってみました。
シリアル通信
Lチカ for ESP32
1
2
3
4
5
6
7
8
9
10
11
void setup() {
Serial.begin(115200);
pinMode(13, OUTPUT);
}
void loop() {
Serial.println("Hello!ESP32");
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
シリアル通信を使う場合はUpload Speed: "115200"としないと文字化けします。
WIFI通信
ファイル☞スケッチ例☞Wifi☞SimpleWifiServerを開きます。
シリアルモニタを開いて速度を115200bpsにします。
Host: 192.168.10.128のようにローカルIPアドレスが表示されます。これをを開いて速度を115200bpsにします。
IP address:
192.168.10.128
HostのローカルIPアドレスが表示されます。
ウインドウズマーク ☞Windowsシステムツール
☞コントロールパネル☞ネットワークとインターネット
☞インターネットオプション☞接続☞LANの設定
☞プロキシサーバー
☞詳細設定
次で始まるアドレスにはプロキシを使用しない(N)
☞
IP address:
192.168.10.128を入力します。
セミコロン(;)を使用してエントリーを分けてください。
☞OKを押します。
☞はい,OKを繰り返します。設定が終了しました。
接例ウインドウを閉じましょう。
HostのローカルIPアドレスをブラウザのウエッブ アドレスに張り付けると
Click here to turn the LED on pin 5 on.
Click here to turn the LED on pin 5 off.
とブラウザに表示されます。
☑LANにプロキシサーバーを使用する(これらの設定はダイアルアップまたは
VPN接続には適用されません)
アドレス(E): ポート(T): 詳細設定
詳細設定
OK
キャンセル
1992.168.10.128
pin 5にLEDの+極をつなぎ-極を100から500Ωの抵抗を付けて
GNDにつなぎます。
消
ブラウザの上の行のhereをクリックするとLEDが点灯します。
ブラウザの下の行のhereをクリックするとLEDが消灯します。
WIFI
#include <WiFi.h>
const char* ssid = "yourssid";
const char* password = "yourpasswd";
WiFiServer server(80);
void setup()
{
Serial.begin(115200);
pinMode(5, OUTPUT); // set the LED pin mode
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
server.begin();
}
int value = 0;
void loop(){
WiFiClient client = server.available(); // listen for incoming clients
if (client) { // if you get a client,
Serial.println("New Client."); // print a message out the serial port
String currentLine = ""; // make a String to hold incoming data from the client
while (client.connected()) { // loop while the client's connected
if (client.available()) { // if there's bytes to read from the client,
char c = client.read(); // read a byte, then
Serial.write(c); // print it out the serial monitor
if (c == '\n') { // if the byte is a newline character
// if the current line is blank, you got two newline characters in a row.
// that's the end of the client HTTP request, so send a response:
if (currentLine.length() == 0) {
// HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
// and a content-type so the client knows what's coming, then a blank line:
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println();
// the content of the HTTP response follows the header:
client.print("Click <a href=\"/H\">here</a> to turn the LED on pin 5 on.<br>");
client.print("Click <a href=\"/L\">here</a> to turn the LED on pin 5 off.<br>");
// The HTTP response ends with another blank line:
client.println();
// break out of the while loop:
break;
} else { // if you got a newline, then clear currentLine:
currentLine = "";
}
} else if (c != '\r') { // if you got anything else but a carriage return character,
currentLine += c; // add it to the end of the currentLine
}
// Check to see if the client request was "GET /H" or "GET /L":
if (currentLine.endsWith("GET /H")) {
digitalWrite(5, HIGH); // GET /H turns the LED on
}
if (currentLine.endsWith("GET /L")) {
digitalWrite(5, LOW); // GET /L turns the LED off
}
}
}
// close the connection:
client.stop();
Serial.println("Client Disconnected.");
}
}
参照 Arduino,ESP32のsketch例ファイル☞スケッチ例☞Wifi☞SimpleWifiServer