ESP8266-BLADE-CLCDはESP-WROOM-02を単なるWiFiの無線LAN装置としてではなく、32ビットプロセッサを搭載した無線LAN機能付のMCUとして利用するために開発されたボードです。また、ESP8266の稼働時に必要となる様々な情報をモニタリングできるように、文字液晶ディスプレイを標準で搭載しています。
ネットショップ:
ESP8266-BLADE-CLCD
ESP8266-BLADE-CLCDの特徴を以下に示します。
ESP8266-BLADE-CLCD回路図
ESP8266-BLADE-CLCDの基板は用途に応じて複数の構成が採れるようになっています。このため、回路図には同時には利用しない複数の構成の回路が組み込まれています。
この回路図をESP8266-BLADE-CLCDとして利用する場合には、回路図の[MULTI I/O]の部分と、[OLED]の部分は利用されませんのでご注意ください。
ソフトウェア開発環境
ボード上の文字液晶ディスプレイの使用例を以下に示します。
ESP8266-BLADEでは、CLCD_ST7032ライブラリを利用して、文字液晶ディスプレイを簡単に利用することができます。
#include <CLCD_ST7032.h> #include <Wire.h> #define JAPANESE CLCD_ST7032 lcd; void setup() { // set up the LCD's number of columns and rows: lcd.begin(16, 2); // Print a message to the LCD. #ifdef JAPANESE lcd.print("\272\335\306\301\312 \320\305\273\335!"); #else lcd.print("hello, world!"); #endif } void loop() { // set the cursor to column 0, line 1 // (note: line 1 is the second row, since counting begins with 0): lcd.setCursor(0, 1); // print the number of seconds since reset: lcd.print(millis() / 1000); }
ESP8266の多くのスケッチでは、IPアドレスや無線接続、サーバーの状態など様々な情報をシリアルラインでPCに表示して、ESP8266の稼働状況をモニタリングするようになっています。しかしながら、無線で利用できることが最大の特徴であるESP8266をUSBでPCに有線で接続することを前提にスケッチを描くのは本末転倒ですね。
ESP8266-BLADEでは標準で文字液晶ディスプレイを搭載していますので、単体でも様々な情報をモニタリングすることができます。
液晶ドライバ:ST7032iの情報
現時点(2015/12)のArduino for ESP8266には、tone()/noTone()関数が実装されていませんが、変則的ではありますが、PWM機能を利用することによりtone()相当の機能を実現することができます。
ArduinoではanalogWrite()を利用することにより、PWM出力を利用することができます。Arduino for ESP8266でもanalogWrite()を利用することにより、任意の端子に対してPWM出力を行うことができます。Arduinoでは基本的にPWMの周波数を変更することはできませんが、Arduino for ESP8266ではanalogWriteFreq()を利用することにより、PWMの周波数を変更することができます。この機能を利用して、指定した周波数で音を鳴らすtone()相当の機能を実現することができます。
#include <CLCD_ST7032.h> #include <Wire.h> // ESP8266-BLADE-CLCD #define SW1 0 #define SW2 2 #define SW3 16 #define SOUNDER 15 CLCD_ST7032 lcd; void setup() { pinMode(SW1, INPUT) ; pinMode(SW2, INPUT) ; pinMode(SW3, INPUT) ; lcd.begin(16, 2); } void loop() { int hz = 0 ; if (digitalRead(SW1) == LOW) hz += 200 ; if (digitalRead(SW2) == LOW) hz += 400 ; if (digitalRead(SW3) == LOW) hz += 800 ; lcd.clear() ; lcd.print("FREQ: ") ; lcd.print(hz) ; if (hz != 0) { analogWrite(SOUNDER, 500) ; analogWriteFreq(hz) ; } else { analogWrite(SOUNDER, 0) ; } delay(100) ; }