LOLIN D1 Mini

コンピュータ、組み込み

小型のESP D1基板を入手しました。
LOLIN製の規格の初期のモデルになると思いますが、安かったのでどんなものなのか試してみます。

紹介するもの

LOLIN D1 Miniと LOLIN D1 Mini (Module)

特徴

どちらもD1 (ESP8266)ですが、片方はモジュール状態で実装されています。
同じ基板の規格に同じピンアサインです。

どちらもAli Expressでの購入になりますが、200~300円台で購入できる安さ。
技適未対応です。

項目LOLIN D1 MiniLOLIN D1 Mini(Module)
接続Micro CMicro B
CPUXtensa LX106 80MHz (ESP8266)Xtensa LX106 80MHz (ESP8266)
フラッシュMemory4MB4MB
GPIO12(1本はADCのみ)12(1本はADCのみ)
ADC1 (10bit 0 ~ 1023)1 (10bit 0 ~ 1023)
PWM11 (8bit 0 ~ 255)11 (8bit 0 ~ 255)
UART2(1本はスケッチ書き込み用)2(1本はスケッチ書き込み用)
I2C11
SPI11
ボタンRESETRESET
そのほかQWiic
LED(青 GPIO2)
LED(青 GPIO2)
ピン配置

どちらのピン配置は同じです。
モジュール側にはQwiicがありません。

外観

400穴ブレッドボードでは、左右1列ずつ使用することができます。

使ってみて

今時となるとCPUの性能も使い勝手もいまいち感があります。
ライブラリなども少し古いので、定義されている定数や使用できる関数が最近のものとのギャップを感じます。

それでも安価であり入手性もまずまずです。
LOLIN製がこの規格でモジュールを出してきているのでそれらを使って実験したり創作物を作ったりする用途としてはまだ使用できそうです。

同LOLINの別マイコン基板はこちらで紹介しています。

以下の記事は、モジュールタイプとの差分がないためどちらの基板を使用しても同じ結果が得られます。(試していませんが)

準備

ボードライブラリ

Arduino IDEのボードマネージャからESP32用のライブラリのインストールとボードの選択をします。

ボードマネージャのURLhttp://arduino.esp8266.com/stable/package_esp8266com_index.json
検索ESP8266
ボードライブラリesp8266 by ESP8266 Community x.x.x※
選択するボードツール > ボード > esp8266 > Generic ESP8266 Module
※ x.x.x Sep/2022 動作確認は3.0.2を使用しています

モジュールライブラリ

機能やモジュールを使用しない場合インストールの必要はありません。

機能/モジュールライブラリ名検索確認時のバージョン
SSD1306Adafruit SSD1306 by AdafruitSSD13062.5.1
ST7735Adafruit ST7735 and ST7789
Library by Adafruit
ST77351.9.3
関連
SSD1306
ST7735
Adafruit GFX Library by AdafruitGFX1.11.3

書き込み方法

スケッチの書き込みはESP32 のダウンロードモードにしなくても書き込みはできます。(GPIO0 と GNDをショートさせなくてもよい)
まれに失敗することがあるので、その時はGPIO0とGNDをショートさせてから書き込みを行います

基本スケッチ

ボタンとLED

説明

プルダウンしたピンの状態がHIGHならLEDを消灯、LOWならLEDを消灯させます。

ESP8266のdigitalReadにはPULLDOWN, PULLUPが使用できないのでPULLDOWN回路を作成します。

実装LEDは負論理なのでボタンの状態と反対の状態になります。

スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/

【マイコン基板】
LOLIN D1 MINI で利用できます。

【スケッチの説明】
プルダウンしたピンの状態がHIGHならLEDを消灯、LOWならLEDを消灯させます。
ESP8266のdigitalReadにはPULLDOWN, PULLUPが使用できないのでPULLDOWN回路を作成します。
実装LEDは負論理なのでボタンの状態と反対の状態になります。

【ライブラリ】
esp8266 > Generic ESP8266 Module

【準備】
LEDは基板実装(GPIO2 青)を使用します。
3.3V -> ボタンピン(GPIO1)

【バージョン情報】
2022/11/23 : 新規
**********************************************************************/
//LOLIN D1 MINI
// 16, 14, 12, 13, 15, 1, 3, 5, 4, 0, 2 //digitalWrite
// 16, 14, 12, 13, 15, 1, 3, 5, 4, 0, 2 //digitalRead
// ESP8266にはINPUT_PULLUP, INPUT_PULLDOWNがないので、PULLDOWNを回路で作る必要がある。

#define LED 2        //LED
#define BUTTON 1     //タクトスイッチ

void setup()
{
  pinMode(LED, OUTPUT);               //ピン出力設定
  pinMode(BUTTON, INPUT);             //プルダウンで入力
}

void loop()
{
  int iStat = digitalRead(BUTTON);
  digitalWrite(LED, iStat);           //ボタンの状態をLEDに出力
}
結果

ボタンを押下するとLEDが消灯しました。
ボタンを離すとLEDが点灯しました。

PWM

説明

PWMでLEDをゆっくり点灯しゆっくり消灯します。

スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/

【マイコン基板】
LOLIN D1 MINIで利用できます。

【スケッチの説明】
 PWMでLEDをゆっくり点灯しゆっくり消灯します。

【ライブラリ】
esp8266 > Generic ESP8266 Module

【準備】
 実装LED(GPIO2)を使用します。
 配線不要

【バージョン情報】
2022/11/24 : 新規
**********************************************************************/
//LOLIN D1 Mini
// 16, 14, 12, 13, 15, 1, 3, 5, 4, 0, 2 //PWM (8bit : 0 - 255)

#define PWM 2

void setup()
{
  pinMode(PWM , OUTPUT);
}

void loop()
{
  for(int i = 0; i < 256; i ++)
  {
    analogWrite(PWM, i);
    delay(2);
  }

  for(int i = 0; i < 256; i ++)
  {
    analogWrite(PWM, 255 - i);
    delay(2);
  }
}
結果

LEDがゆっくり点灯し、ゆっくり消灯しました。

ADC

説明

ADCに入力された電圧を読み取りCOMに出力します。

電圧の入力にLOLIN32 Liteを使用します。
0~255(約3.3V) まで2msごとに1ずつ上昇し、255(約3.3V)~0までを2msごとに1ずつ下降する設定を繰り返します。

配線
LOLIN D1 Mini配線LOLIN32 Lite
GPIO17(ADC)GPIO26(DAC)
GNDGND
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/

【マイコン基板】
 LOLIN D1 Mini で利用できます。

【スケッチの説明】
入力された電圧を読み取ります。

【ライブラリ】
esp8266 > Generic ESP8266 Module

【準備】
LOLIN D1 Mini <-> LOLIN32 Lite
GPIO17(ADC)    <-> GPIO26(DAC)
GND            <-> GND

【バージョン情報】
2022/11/24: 新規
**********************************************************************/
//LOLIN 1 Mini で設定できる analogRead (10bit 0 ~ 1023)
// 17

#define ADC 17

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

  pinMode(ADC, INPUT);
}

void loop()
{
  int iADC = 0;

  //外部から入力された電圧を読み取り、結果をCOMに出力します。
  iADC = analogRead(ADC);
  Serial.printf("(ADC) = %d\r\n", iADC);
  delay(2);
}
結果

入力した電圧を読み取った結果をグラフにしました。
電圧の変化は0V -> 3.3Vまでを約500msで上昇し、3.3V -> 0Vまで約500msで下降します。
グラフでは入力された電圧よりも数%高めにオフセットされているように見えます。
最近のESPに比べると分解能は低いが、入力電圧に対してノイズも少なく直線的で良い波形です。

電圧と読み取り値の同期はできていませんが、参考程度に入力電圧を添付します。

UART

説明

UART0(COM)から読み取ったデータをそのままUART0(COM)へ返答します。

配線

配線不要

スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/

【マイコン基板】
LOLIN D1 MINI で利用できます。

【スケッチの説明】
 COMから読み取った情報をそのままCOMにオウム返しします。

【ライブラリ】
esp8266 > Generic ESP8266 Module

【準備】
配線不要

【バージョン情報】
2022/11/24 : 新規
**********************************************************************/

void setup()
{
  Serial.begin(115200);                 //SerialオブジェクトはUART0 (COM)
}

void loop()
{
  if(Serial.available() != 0)          //UART1にデータがあれば、読み取った内容をUART0に送信
  {
      Serial.write(Serial.read());
  }
}
結果

結果はTeratermを起動して確認します。
LOLIN D1 MINI 受け取った文字をそのままオウム返しします。
Teratermの画面にはエコーバック機能を使用している場合、入力した文字とLOLIN D1 MINIの返答した文字の2文字ずつ表示されます。

I2C(SSD1306)

説明

I2Cを使ってSSD1306(OLED 0.96inch)モニタのサンプルを動作させます。
I2Cはデフォルトでピン定義されているため、ピン設定不要です。

そのほかの図形描画サンプルは、Arduinoサンプルスケッチを参照してください。
ファイル(F) > スケッチ例 > Adafruit SSD1306 > ssd1306_128x64_i2c

配線
LOLIN D1 MINI配線SSD1306(0.96inch)
3.3VVCC
GNDGND
GPIO4(SDA)SDA
GPIO5(SCL)SCL
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/

【マイコン基板】
LOLIN D1 MINI 基板で利用できます。

【スケッチの説明】
SSD1306 OLEDの制御をします。

【ライブラリ】
esp32 > Generic ESP8266 Module
Adafruit SSD1306 by Adafruit
Adafruit GFX Library by Adafruit

【準備】
マイコン基板 <-> SSD1306
3V3         <-> VCC
GND         <-> GND
GPIO4(SDA)  <-> SDA
GPIO5(SCL)  <-> SCL

【バージョン情報】
2022/11/22 : 新規
**********************************************************************/

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

#define SCREEN_WIDTH 128                //解像度 128 x 64 で使用します。
#define SCREEN_HEIGHT 64                //SCREEN_HEIGHTは 32 に設定することができます。

#define OLED_RESET     -1               //使用しないので -1を設定する。
#define SCREEN_ADDRESS 0x3C             //I2Cアドレスは 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
                                        //表示制御にはAdafruit製 SSD1306を使用する。
                                        
void setup()
{
  

  if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
    for(;;);
  }

  display.clearDisplay();               //何か表示されている場合に備えて表示クリア

  display.setTextSize(2);               //フォントサイズは2(番目に小さい)
  display.setTextColor(SSD1306_WHITE);  //色指定はできないが必要
  display.setCursor(20, 5);            //テキストの表示開始位置
  display.print(F("TAMANEGI"));         //表示文字列
  display.setCursor(20, 25);
  display.print(F("LOLIN D1"));
  display.setCursor(45, 45);
  display.print(F("MINI"));

  display.display();                    //バッファ転送(表示)
}

void loop()
{
}
結果

SSD1306のサンプルスケッチが動作しました。

SPI(ST7735)

説明

SPIを使ってST7735(LCD 1.8inch)モニタのサンプルを動作させます。

そのほかの図形描画サンプルは、Arduinoサンプルスケッチを参照してください。
ファイル(F) > スケッチ例 > Adafruit ST7735 and ST7789 Library > graphicstest

配線
LOLIN D1 Mini配線ST7735(1.8inch)
3.3VVCC
3.3VLED
GNDGND
GPIO15(CS)CS
GPIO4RESET
GPIO5AO
GPIO13(SPI MOSI)SDA
GPIO14(SPI SCK)SCK
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/

【マイコン基板】
LOLIN D1 MINI 基板で利用できます。

【スケッチの説明】
ST7735 LCDの表示制御します。
H/W SPIを使用するための方法についてサンプル記載します。

【ライブラリ】
esp8266 > Generic ESP8266 Module 

【準備】
マイコン基板 <-> ST7735
3V3           <-> VCC
GND           <-> GND
GPIO15(CS)    <-> CS
GPIO4(Reset)  <-> Reset
GPIO5(DC)     <-> AO
GPIO13(MOSI)  <-> SDA
GPIO14(SCK)   <-> SCK

【バージョン情報】
2022/10/24 : 新規
**********************************************************************/

#include <Adafruit_GFX.h> 
#include <Adafruit_ST7735.h>
#include <SPI.h>


//ピン番号設定
#define TFT_CS          15  // CS
#define TFT_RST         4  // Reset 
#define TFT_DC          5  // DC
#define TFT_MOSI        13  // MOSI
#define TFT_SCK         14  // Clock

Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);


//S/W SPIはこちら。遅いが任意のピンを使用できる。
//Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCK, TFT_RST);

void setup(void) 
{
  tft.initR(INITR_BLACKTAB);                //Init ST7735S初期化
  
  tft.fillScreen(ST77XX_BLACK);               //背景の塗りつぶし

  //テキスト表示
  tft.setRotation(3);                         //画面回転
  tft.setTextSize(3);                         //サイズ

  tft.setCursor(0, 20);                      //カーソル位置                      
  tft.setTextColor(ST77XX_RED);              //赤
  tft.printf("TAMANEGI\n");

  tft.setTextColor(ST77XX_GREEN);            //緑
  tft.printf("TAMANEGI\n");

  tft.setTextColor(ST77XX_BLUE);             //青
  tft.printf("TAMANEGI\n");

  tft.setTextColor(ST77XX_YELLOW);           //黄
  tft.printf("TAMANEGI\n");
}

void loop()
{
}
結果

ST7735のサンプルスケッチが動作しました。

コメント

タイトルとURLをコピーしました