いたずら
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円でした。
この互換機はCH341,FT232RLというドライバを読み込まなくてはなりません。インターネッとからダウンロードできます。
ドライバ
ブートローダー
ドライバをインストールしたら,ボードをNanoに替え,ポートを選択します。ツール,ProcessorでATmega328P (Old Bootloader)に変更します。後はUNOと変わらずにスケッチを書くことができます。全ての入出力が同じように使えます。pinの配列が違うのでシールドはそのままでは使えません。
使用例
スマートカーに使ってみました。ブレッドボードに乗せると小回りが利いてちょっとした改造が簡単にできます。
ICSP
USBが使えなくなってしまった場合はICSPを使ってプログラムを書き込むことができます。ICSPが働くのは/RESET端子がLOWの場合(リセットボタンを押しているとき)です。ICSP(in-circuit serial programming)はISP(In-System Programming)と同じだそうです。
ESP
Arduino ESP8266
Arduinoでwifiを使おうとしましたが,技適がないので日本では使えない様です。容量が多いのとスピードが速いのでそちらの方で活用しましょう。マイクロUSBコネクタでの接続なのでケーブル回りが軽くなります。
使ってはいけないけど売買はしてもよいそうです。2021/6/4加筆
2017年4月23日
Arduino UNO互換のEPS8266ボードを入手しました。例によって手こずっています。
ドライバをインストールが必要になります。
SBはCH341で認識してくれます。
ボードは少し複雑になります。
https://github.com/esp8266/Arduinoの
Stableボードマネージャを
ArduinoIDEでファイルの中の環境設定の下の方にある「追加のボードマネージャのURL」の右の欄に
http://arduino.esp8266.com/stable/package_esp8266com_index.json
「ツール」タグの「ボード」の中の「ボードマネージャ」をクリックして窓を開け,一番下のesp8266の欄をクリックします。インストールをクリックすると開始されます。時間がかかります。
終わったらボードを選択します。
今のところプログラムをマイコンに送れません。
warning: espcomm_sync failed
error: espcomm_open failed
error: espcomm_upload_mem failed
error: espcomm_upload_mem failed
コンパイラー後このようなメッセージが出て,エラーになってしまいます。リセット回路を変更すると書き込み可能なモードになるとインターネットで検索できました。GPIO0を押したままリセットすると書き込みができるということです。難しそうな回路図が載っていました。Switchサイエンスさんの所のリセット回路があるのですが作れません。時間があればなんとかできるかもしれませんが苦しいです。
GPIO0を押しながらということは0Vか5Vにするということなのだろうと考えて10kΩでプルアップしました。
プルアップしてリセットしても書き込むことはできませんでした。GNDに接続してリセットして,直ぐに離すとなんとなく反応はありましたが書き込めませんでした。
GNDに接続したままリセットして書き込むまで待つと大きな変化がありました。書き込むことができたようでLチカが始まりました。IDEのメッセージは赤で表示しているので心配ではありました。
GNDとGPIO0を直接接続して押した状態を保つようにしました。これで書き込みができました。書き込み後はGPIO0はGNDと切り離しておきましょう。
それにしても,このボードはメモリが1Mもあるのでびっくりしてしまいます。その割にはただのLチカで222kも使ってしまうのはなぜでしょう?
wifiが使えないのは残念です,なんとかならないものでしょうか。
Lチカ for ESP8266
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
void setup() {
pinMode(2, OUTPUT);
}
void loop() {
delay(1000);
digitalWrite(2, LOW);
delay(1000);
digitalWrite(22, HIGH);
}
1
2
3
4
5
6
7
8
9
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