「WordPressで学ぶPHP(2)データ構造(配列・オブジェクト)編」を発売しました。
本書は「WordPressで学ぶPHP(1)変数・制御構造編」の続編にあたり、PHPの「データ構造」(配列とオブジェクト)について解説します。
配列やオブジェクトは、頭の中で考えるだけでは、イメージがつかみにくいです。本書では図を多用して、配列やオブジェクトをなるべく分かりやすく解説することを心がけました。
Kindle本で、定価250円です。
Lolin ESP32 OLEDを試してみた
先日、Amazonを見ていると、ESP32とOLEDディスプレイが一体化した製品を見つけました。
面白そうなので入手して動作を試してみました。
1.製品の概要
この製品は、WiFi/BluetoothモジュールのESP32と、0.96インチOLEDディスプレイが一体になったものです。
WiFiなどで通信しつつ、0.96インチ/128×64ピクセルのディスプレイにグラフィックや文字などを表示することもできます。
一体化している分、小さなスペースで済むというメリットがあります。
2.購入まで
Amazonでは1,800円で売られていましたが、「AliExpressならもっと安く手に入るかも」と思って調べてみました。
すると、「Lolin ESP32 OLED」のような商品名になっていて、安いショップでは1,000円程度になっていました。
Amazonで買っても配送元が中国で、AliExpressで買っても到着までの日数はさほど変わらないので、AliExpressで注文してみました。
Lily Goというショップで注文したところ、10日ほどで届きました。
3.Arduino IDEで使う
Lolin ESP32 OLEDは、Arduino IDEからプログラムを書き込むことができます。
ESP32 DevKit-Cの場合と同じ手順で、ESP32用のライブラリ等をArduino IDEに組み込みます。
「ツール」→「ボード」メニューでは、「WEMOS Lolin 32」を選べば良いようでした。
ただし、プログラムの書き込みが終わるまで、Lolin ESP 32の裏面にある「Boot」のスイッチを押したままにしておく必要がありました。
また、書き込みが終わったら背面の「EN」のスイッチを押すことで、プログラムが実行されました。
4.OLEDに表示する
WiFi部分のプログラムの組み方は、ESP32 DevKit-Cの場合と同じです。
一方、OLEDに表示するには、ライブラリが別途必要になります。
GitHubからライブラリをダウンロードした後、Arduino IDEで「スケッチ」→「ライブラリをインクルード」→「.ZIP形式のライブラリをインストール」メニューを選び、ダウンロードしたZipファイルを選択します。
esp8266-oled-ssd1306ライブラリのダウンロード
ライブラリの基本的な使い方は、GitHubのページに記載されています。
SSD1306.hをインクルードし、「SSD1306 display(0x3c, 5, 4);」のようにしてdisplayオブジェクトを生成したあと、各種のメソッドで描画します。
ごく簡単な例として、以下の動画のようなものを作ってみました。
ソースコードは以下の通りです。
#include <SSD1306.h> #include <OLEDDisplay.h> SSD1306 display(0x3c, 5, 4); int x, p; OLEDDISPLAY_COLOR c; void setup() { // put your setup code here, to run once: display.init(); display.resetDisplay(); display.displayOn(); display.clear(); display.setColor(WHITE); x = 60; c = WHITE; p = -4; } void loop() { // put your main code here, to run repeatedly: int y, w, h; y = x / 2; w = 127 - x * 2; h = 63 - x; display.drawRect(x, y, w, h); display.display(); x += p; delay(50); if ((p == -4 && x == -4) || (p == 4 && x == 64)) { c = (c == WHITE) ? BLACK : WHITE; display.setColor(c); if (c == WHITE) { p = (p == -4) ? 4 : -4; } x = (p == -4) ? 60 : 0; } }