LoginSignup
1
4

More than 5 years have passed since last update.

WiFi Kit 8(0.91インチOLED付きESP8266)を使ってみる

Last updated at Posted at 2019-02-17

IMG_1748.jpg

背景とか所感

  • 背景
    • ESP8266, ESP32のOLED付きのコンパクトなボードのポテンシャルを知りたいと思っていた。
    • M5Stackは魅力的だが価格的に結構するので、個人的に安価な構成でどこまで行けるかに興味がある。
    • 先日、メルカリで格安で出品されていたのを見つけ、試しに購入してみた。
    • ちなみに現在 Amazonで購入すると約1500円。
  • 所感
    • 独自のピンアサインを考慮するだけで、I2CのOLED付きArduinoとして普通に使える。
    • WifiのIPアドレスだとか、センサの検出値だとか、ステータスが表示できてとっても便利である。
    • スマホと連携したら外で結構使えそう。

WiFi Kit 8(OLED付きESP8266)

  • Spec
    • マスターチップ:ESP8266
    • OLED:0.91インチ 128x32 白
    • USBインターフェースチップ:CP2102
    • フラッシュ:32 Mbyte
    • 作動電圧:3.3V~7V
    • サポートモード:softAp、station、softAp+station、WiFi-Direct
    • 出力功率:19.5dBm @ 11b、16.5dBm @ 11g、15.5dBm @ 11n.
  • 製造元Webサイト
  • GitHub
  • Amazon含め、どこで買ってもマニュアルは付いて来ないので、使い方は自分で調べる必要がある。

環境セットアップ

  • iMac
    • MacOS High Sierra
  • UARTドライバ
    • 自分が購入した基板には「CP2104」というチップが実装されているので、以下のドライバを入れておく。
    • CP210x USB to UART Bridge VCP Drivers : SiLabsUSBDriverDisk 23-09-50-721.dmg
    • この新しい?バージョンでないと認識されず、ちょっとだけハマった。
  • Arduino IDE v1.8.5
    • ボード追加で、「ESP8266」を追加。
    • OLED制御用に「Adafruit SSD 1306」と「Adafruit GFX Library」を追加。

(たぶん不要)

  • 多少ハマったので、記載。
  • 製造元Webサイトを見るとGitHubへのリンクがあり、Macへのインストール方法が掲載されているが、自分が試した感じ、たぶんこれは要らない。
  • 結局、以下に記載の通り、自分のArduino IDE環境では「WiFi Kit 8」でコンパイルオプション選択メニューが表示されず、そのせいでコンパイルエラーが解消しなかった。
    • ボードは普通に「Generic ESP8266 Module」を選択すれば良い。
    • 要は、Pinアサインが独自なだけの普通のESP8266実装基板として使えば良い。
  • まあ一応、手順通りにするとhardware/heltecフォルダ配下にボードのピン構成とかの仕様書PDFが配置されるので、仕様書がローカルの手元に入手できるという点で、意味はある。
mkdir -p ~/Documents/Arduino/hardware
cd ~/Documents/Arduino/hardware
git clone https://github.com/Heltec-Aaron-Lee/WiFi_Kit_series.git heltec
cd heltec/esp32
git submodule update --init --recursive
cd tools
python get.py
cd ~/Documents/Arduino/hardware/heltec/esp8266
git submodule update --init --recursive
cd tools
python get.py
iMac-nabeshin:~ nabeshin$ cd Documents/Arduino/hardware/
iMac-nabeshin:hardware nabeshin$ ls
espressif
iMac-nabeshin:hardware nabeshin$ git clone https://github.com/Heltec-Aaron-Lee/WiFi_Kit_series.git heltec
Cloning into 'heltec'...
remote: Enumerating objects: 471, done.
remote: Counting objects: 100% (471/471), done.
remote: Compressing objects: 100% (363/363), done.
remote: Total 8494 (delta 115), reused 256 (delta 76), pack-reused 8023
Receiving objects: 100% (8494/8494), 87.87 MiB | 2.19 MiB/s, done.
Resolving deltas: 100% (3588/3588), done.
Checking out files: 100% (3157/3157), done.
iMac-nabeshin:hardware nabeshin$ cd heltec/
.git/             .gitmodules       PinoutDiagram/    SchematicDiagram/ esp8266/          
.gitignore        InstallGuide/     README.md         esp32/            
iMac-nabeshin:hardware nabeshin$ cd heltec/esp32/
iMac-nabeshin:esp32 nabeshin$ git submodule update --init --recursive
iMac-nabeshin:esp32 nabeshin$ cd tools/
iMac-nabeshin:tools nabeshin$ python get.py
System: Darwin, Info: Darwin-17.7.0-x86_64-i386-64bit
Platform: x86_64-apple-darwin
Downloading xtensa-esp32-elf-osx-1.22.0-80-g6c4433a-5.2.0.tar.gz
Done
Extracting xtensa-esp32-elf-osx-1.22.0-80-g6c4433a-5.2.0.tar.gz
Downloading esptool-2.6.0-macos.tar.gz
Done
Extracting esptool-2.6.0-macos.tar.gz
Downloading mkspiffs-0.2.3-arduino-esp32-osx.tar.gz
Done
Extracting mkspiffs-0.2.3-arduino-esp32-osx.tar.gz
Renaming mkspiffs-0.2.3-arduino-esp32-osx to mkspiffs
Done
iMac-nabeshin:tools nabeshin$ cd ~/Documents/Arduino/hardware/heltec/esp8266
iMac-nabeshin:esp8266 nabeshin$ git submodule update --init --recursive
iMac-nabeshin:esp8266 nabeshin$ cd tools/
iMac-nabeshin:tools nabeshin$ python get.py
Platform: x86_64-apple-darwin
Downloading x86_64-apple-darwin14.esptool-f80ae31.tar.gz
Done
Extracting dist/x86_64-apple-darwin14.esptool-f80ae31.tar.gz
Downloading x86_64-apple-darwin14.xtensa-lx106-elf-20ed2b9c.tar.gz
Done
Extracting dist/x86_64-apple-darwin14.xtensa-lx106-elf-20ed2b9c.tar.gz
Downloading x86_64-apple-darwin14.mkspiffs-7fefeac.tar.gz
Done
Extracting dist/x86_64-apple-darwin14.mkspiffs-7fefeac.tar.gz
iMac-nabeshin:tools nabeshin$ 
  • Arduino IDEを起動。
    • 前述の通り、「ツール」 -->「ボードマネージャ」で「WiFi_Kit_8」を選択してサンプルコードをコンパイルすると、こんなエラーが。。。
xtensa-lx106-elf-g++: error: {build.flash_flags}: No such file or directory
exit status 1
ボードWiFi_Kit_8に対するコンパイル時にエラーが発生しました。
  • xtensa-lx106-elf-g++ ってのは存在するが、コンパイルオプションで"{build.flash_flags}"が指定されてないようである。
    • /Users/nabeshin/Documents/Arduino/hardware/heltec/esp8266/tools/boards.txt.pyあたりを見ると、これに対応するオプションがArduino IDEの選択項目で選べないらしい。
  • 仕方ないので、"Generic ESP8266 Module"を選択するとあっさりコンパイルが通り、書込みも実行も正常にできた。
    • こちらのメニューには"{build.flash_flags}"に対応する選択項目「Flash Mode」が出ている。
    • う〜〜ん、、、"WiFi_Kit_8" なんて選ぶ必要ないじゃん。
  • まあ、これでとりあえずコンパイルが通り、ボードに書き込みが出来た。

EPS8266として扱う

  • 余計な時間を食われたが、気を取り直して作業再開。
  • そもそも本質的に捉えると、このボードはESP8266に独自に128*32のOLEDをくっつけただけ。
  • 要は、独自のピン配置だけ気をつけてコードを組めば普通に動くはず。

    • WiFi_Kit_8 のPinoutDiagramを見ると、ESP8266とOLEDは以下に接続されているようである。
  • WIFI_Kit_8_Diagram(new).pdf

OLED Pin ESP8266(WIFI_Kit_8) GPIO
OLED_SDA GPIO_4
OLED_SCL GPIO_5
OLED_RST GPIO_16
  • 尚、このOLEDのi2cアドレスは「0x3c」
  • 「Reset Method」は「nodemcu」にして置くのを忘れずに。(これは本家のマニュアルにも記載がある。)

OLEDの動作確認

  • OLED表示サンプルコードを開く
    • 「ファイル」 --> 「スケッチ例」 --> 「Adafruit SSD 1306」 --> 「ssd1306_128x32_i2c」
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET     16//4 // Reset pin # (or -1 if sharing Arduino reset pin)
  • 上記の行を"WiFi_Kit_8"の基板のピン配置に調整。
    • このボードはRESETピンがGPIO_16 に繋がっているので、番号を4 --> 16に変更。
  // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3C for 128x32
  • ここのi2cアドレスは 「0x3c」 のままでOK
  • これだけでコンパイル、書き込みが成功し、無事にOLED表示できた。

IMG_1759.JPG

OLEDの動作確認

  • ここまで出来ればあとは普通のArduinoである。
  • サクッとOLEDに超音波距離センサ(HC-SR04)の検出値を表示してみた。

IMG_1773.jpg

  • Pin接続
HC-SR04 ESP8266(WIFI_Kit_8) GPIO
Vcc 5V
Trig GPIO_12
Echo GPIO_13
Gnd Gnd

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 32 // OLED display height, in pixels

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET     16 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

int trig = 12; // HC-SR04 トリガー出力ピン
int echo = 13; // HC-SR04 エコー入力ピン

void setup() {
  Serial.begin(9600);

  pinMode(trig,OUTPUT);
  pinMode(echo,INPUT);

  // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3C for 128x32
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); // Don't proceed, loop forever
  }

  // Show initial display buffer contents on the screen --
  // the library initializes this with an Adafruit splash screen.
  display.display();
  delay(2000); // Pause for 2 seconds

  // Clear the buffer
  display.clearDisplay();
}

void loop() {
    // 超音波の出力終了
  digitalWrite(trig,LOW);
  delayMicroseconds(1);
  // 超音波を出力
  digitalWrite(trig,HIGH);
  delayMicroseconds(11);
  // 超音波を出力終了
  digitalWrite(trig,LOW);
  // 出力した超音波が返って来る時間を計測
  int t = pulseIn(echo,HIGH);
  // 計測した時間と音速から反射物までの距離を計算
  float distance = t*0.017;
  // 計算結果をシリアル通信で出力
  Serial.print(distance);
  Serial.println(" cm");


  display.clearDisplay();
  display.setTextSize(2); // Draw 2X-scale text
  display.setTextColor(WHITE);
  display.setCursor(0, 0);
//  display.println("Distance");
  display.print(distance);
  display.println(" cm");
  display.display();

  delay(1000);
}

まとめ

  • 期待通りコンパクトでいい感じ。
    • Arduinoで同じくLCDやOLEDと繋いで同じことやった事があるが、ディスプレイが一体になってるコンパクトさが良い。
  • ここまでできれば、あとは各種センサを繋いで値を表示したり、Wifiでどっかサーバに飛ばしたり、何でもできる。
  • 独自のピンアサインを考慮するだけで、I2CのOLED付きArduinoとして普通に使える。
    • 一応、本家のサイトにあるように環境をセットアップしたが、自分のArduino IDE環境ではコンパイル出来なかった。
    • Arduino IDE v1.8.5 で最新のESP8266ボードライブラリを持って来れば本家のツールは不要だったりするかも。
  • 次は、本格的にWifi使って色々試してみたい。
1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4