FREENOVE ESP8266

コンピュータ、組み込み

FREENOVEのESP8266を試してみます。

紹介するもの

FREENOVE ESP8266

特徴

接続Micro B
CPUXtensa LX106 80MHz (ESP8266)
GPIO12(1本はADCのみ)
ADC1 (10bit 0 ~ 1023)
PWM11 (8bit 0 ~ 255)
UART1 (USBシリアル共通)
I2C1
SPI1
ボタンRESET
そのほかLED(青 GPIO2)

製品Github 

ピン配置

外観

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

使ってみて

ESP系では小ぶりな部類なので試しに購入してみました。
FREENOVE自体品質や仕上がりは丁寧だと思います。

ESP8266ですので処理性能はそこそこですが、最近の基板と比べると古さがあり回路上も多少知識が必要です。
現在でも十分使用できるだけの性能と機能を備えた一枚です。

準備

ボードライブラリ

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

書き込み方法

USBケーブルを接続し、ArduinoIDEから書き込みボタンを押下する。

基本スケッチ

ボタンとLED

説明

タクトボタンとLEDの組み合わせの動作をします。

タクトボタンはPULLDOWN設定します。(押下したらHIGH)
タクトボタンを読み取り、押下されるとLEDが点灯します。
ボタンが離されるとLEDは消灯します。

FREENOVEのESP8266にはユーザボタンと基板実装LEDがあるためそちらを使用しています。
負論理なので、ボタン押下時にはLOW、離した時にはHIGHになります。
LEDはLOWで点灯、HIGHで消灯になります。

ジャンパワイヤなどで回路を作成する場合、ESP8266のdigitalReadにはPULLDOWN, PULLUPが使用できないのでPULLDOWN回路を作成します。

GPIO0へのPULLDOWNの参考回路

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

【マイコン基板】
FreeNove ESP8266

【スケッチの説明】
プルダウンしたピンの状態がHighならLEDを点灯、LowならLEDを消灯させます。

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

【準備】
GPIO2(LED) -> 保護抵抗(約200Ω) -> LED -> GND
3.3V -> タクトボタン -> GPIO(0) -> プルダウン抵抗(10KΩ) -> GND

ワイヤによる配線で行う場合は、保護抵抗の適値を求めて使用してください。

【バージョン情報】
2022/12/14 : 新規
**********************************************************************/

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

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/

【マイコン基板】
FREENOVE ESP8266

【スケッチの説明】
PWM出力でのフェード点灯(ゆっくり点灯)とフェード消灯(ゆっくり消灯)を行います。

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

【準備】
GPIO2 - 保護抵抗(約200Ω) - LED Anode, LED Cathode - GND

抵抗値は使用するLEDにより適切な抵抗値を求めてください。

【バージョン情報】
2022/12/14 : 新規
**********************************************************************/

#define PWM 2        //PWM 出力ピン

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/

【マイコン基板】
 FREENOVE ESP8266

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

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

【準備】
FREENOVE ESP8266 <-> LOLIN32 Lite
GPIO17(ADC)    <-> GPIO26(DAC)
GND            <-> GND

【バージョン情報】
2022/12/18: 新規
**********************************************************************/
//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で下降します。
グラフでは入力された電圧よりも数%高めにオフセットされているように見えます。
入力電圧に対して直線的ですが、950(AD)弱でサチレーションをしているように見えます。

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

UART

説明

UART0(COM)から読み取ったデータをUART1(ソフトウエアシリアル)へ送信します。
UART1(ソフトウエアシリアル)から読み取ったデータをUART0(COM)へ送信します。

ESP8266では、GPIO1(TX), GPIO3(RX)とUSBケーブルでの通信と同じ情報の送受信ができます。

配線

UART0はUSBケーブルを使用します。
UART1の配線は以下の表です。

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

【マイコン基板】
FREENOVE ESP8266

【スケッチの説明】
 UART0から読み取った情報を UART1へ出力します。
 UART1から読み取った情報を UART0へ出力します。

 UART1にはソフトウエアUARTを使用します。

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

【準備】
 UART0 側配線不要

 FREENOVE ESP8266 <-> FT232RL(UART1側)
 GPIO4(TX) <-> RX
 GPIO5(RX) <-> TX

【バージョン情報】
2022/12/18 : 新規
**********************************************************************/
#include <SoftwareSerial.h>
 
#define UART1_TX 4
#define UART1_RX 5
 SoftwareSerial mySerial(UART1_RX, UART1_TX);    // RX,TXの割り当て

void setup()
{
  Serial.begin(115200);                                   //基板中央のスルーホールTX, RXに入出力されます
  mySerial.begin(115200);
}

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

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

結果はTeratermを2つ起動します。
一つはESP8266のCOM(UART0)で、もう一つはソフトウエアシリアルに接続した(UART1)のFT232RL用です。

UART0用のTeratermの入力した文字は、UART1用のTeratermに表示されます。
UART1用のTeratermの入力した文字は、UART0用のTeratermに表示されます。

I2C(SSD1306)

説明

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

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

配線
FREENOVE ESP8266配線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/

【マイコン基板】
FREENOVE ESP8266 基板で利用できます。

【スケッチの説明】
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/12/18 : 新規
**********************************************************************/

#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("FREENOVE"));
  display.setCursor(25, 45);
  display.print(F("ESP8266"));

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

void loop()
{
}
結果

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

SPI(ST7735)

説明

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

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

配線
FREENOVE ESP8266配線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/

【マイコン基板】
FREENOVE ESP8266 基板で利用できます。

【スケッチの説明】
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/12/16 : 新規
**********************************************************************/

#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をコピーしました