ESP8266 AI MOD
amazonで¥470 で購入したUSB-シリアル変換つきです。
ESP8266MOD AI_Thinkerの製造です。
1 概 要
2 内蔵LEDの点滅
3 flashをデータメモリとして使う
1 概 要 2017.05.25
小型のブレッドボードにセットしてみました。
端子はこのようになっています。
回路図の詳細はhttps://github.com/nodemcu/nodemcu-devkit-v1.0/blob/master/NODEMCU_DEVKIT_V1.0.PDFにあります。
また、このモジュールの詳細はhttps://bennthomsen.wordpress.com/iot/iot-things/esp8266-wifi-soc/esp8266-getting-started-with-arduino-ide/#nodeMCU_LEDで知りました。
pinの整理はこのサイトが便利です。
このモジュールをArduino-IDEで使うときは、
ボードは Node MCU1.0 ESP-12E module を選択する
MCU freqは 80MHz
シリアル速度は 115200 bps
USBポートは ときに応じて
設定する。
基板上の青LEDは Vcc−LED−GPIO2(TXD1 D4) に繋がっている。
おなじく赤LEDは Vcc−LED−GPIO16(D0) に繋がっている。
技適マークはありません。→ 無線通信を使わない Arduino MCU として使う予定です。
2 内蔵LEDの点滅 2017.05.25
Arduino-IDEによる書込みのテストとして内蔵LEDの点滅プログラムを書き込みました。
このボードには、青LEDがVccとGPIO2の間に、赤LEDがVccとGPIO16の間に入っています。したがって、GPIO2とGPIO16をLOW,HIGHに切り替えると2つのLEDは点滅することになります。
Arduino-IDEでボードは Node MCU1.0 ESP-12E module を選んでいます。プログラムは例にあるblinkをpin番号を書き換えただけです。
/*
Blink AI MOD
*/
void setup() {
pinMode(2, OUTPUT);
pinMode(16, OUTPUT);
}
void loop() {
digitalWrite(2, HIGH);
digitalWrite(16, LOW);
delay(1000);
digitalWrite(2, LOW);
digitalWrite(16, HIGH);
delay(1000);
}
書込みは、cp2102のコンバーターがついているのでフラッシュやリセットのスイッチに手を触れることなくできました。
3 flashをデータメモリとして使う 2017.06.02
一般にESP8266は4MBのメモリを持っているようです。この項のチップ(AI製)も持っているようです。ボードの設定にFlasu Size:"4M(1M SPIFFS)" または 4M(3M SPIFFS) とあるのはプログラムメモリに1MBを使ったあと、1MBまたは3MBをデータメモリとして使う意味のようです。
このメモリにデータを書き込む方法は外部から一括して書き込む方法と、ESP8266が持つプログラムによって書き込む方法があるようです。
外部から書き込む方法:
現在、Arduino-IDEは ver 1.8.1(stable)を使っているので、この環境の話になりますが、まず、このページから ESP8266FS-0.3.0.zip をダウンロードします。
これを解凍すると \ESP8266FS\tool\esp8266fs.jar というファイルが含まれるフォルダができますのでこのフォルダごと自身の\Arduinoシステムの \toolsフォルダにコピーします。( drivers,hardware,libraries,reference等がある場所の\toolsです)
これによって「ツール」選択画面に「ESP8266 Sketch Data Upload 」の項目が出ます。
この書込み動作は、カレントのプログラムがあるフォルダの"data"フォルダにあるファイルを書き込みますので、「スケッチ」→「スケッチのフォルダを表示」で "data"フォルダを作り、その中に書き込むファイルを置きます。最後に「ESP8266 Sketch Data Upload 」をクリックします。この時、ファイルの大きさに関係なく SPIFFS を指定した範囲に書き込むようです。ファイルが小さい場合はSPIFFSの領域を小さくしておくほうが余分な時間がかかりません。
書き込んだファイルは次のプログラムで確認できます。
#include <FS.h>
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("");
SPIFFS.begin();
Dir dir = SPIFFS.openDir("/");
while (dir.next()) {
Serial.print(dir.fileName());
File f = dir.openFile("r");
Serial.println(String(" ") + f.size());
}
}
void loop() {
// put your main code here, to run repeatedly:
}
プログラムで書き込む方法:
web上のプログラムを変更して次のようなプログラムを書いてみるとファイルに書込み、それを読み取っているのは間違いないようですがファイルの中身がどうなっているのかわかりません。これでは、きっと、ファイルの先頭の数値を書き換えて読み取っているだけのようです。ファイルにはデータを蓄積していき、適当なところで取り出す、という作業をしたいのでまだまだ勉強です。
#include "FS.h"
int i = 1234;
void setup() {
char *chptr;
Serial.begin(115200);
Serial.println();
bool res = SPIFFS.begin();
if (!res) {
Serial.println("SPIFFS.begin fail");
return;
}
// 1. write
File fd = SPIFFS.open("/tmp2.txt", "w");
if (!fd) {
Serial.println("open error");
}
fd.println("data in file");
fd.close();
// 2. read
fd = SPIFFS.open("/tmp2.txt", "r");
String line = fd.readStringUntil('\n');
Serial.print("file read:");
Serial.println(line);
fd.close();
}
void loop() {
File fd = SPIFFS.open("/tmp2.txt", "w");
if (!fd) {
Serial.println("open error");
}
fd.println(i);
fd.close();
i++;
// 2. read
fd = SPIFFS.open("/tmp2.txt", "r");
String line = fd.readStringUntil('\n');
Serial.print("file read:");
Serial.println(line);
fd.close();
delay(1000);
}
SPIFFSの詳細は次にあります。
http://arduino-esp8266.readthedocs.io/en/latest/filesystem.html , https://translate.google.co.jp/translate?hl=ja&sl=en&u=http://arduino-esp8266.readthedocs.io/en/latest/filesystem.html&prev=search
工事中
2017.02.12