コンパクトな Teensy 4.0 をArduino環境で使ってみた

コンピュータ、組み込み

Teensy 4.0を紹介します。
以前はArduino IDE 1.8.xx 環境でしか開発ができなかったのですが、いつの間にか2.0.x で開発ができるようになっていました。
基本的な使い方と開発環境の作り方について記載します。

紹介するもの

Teensy 4.0

特徴

コンパクトな基板に、Coretex-M7 搭載で標準600MHz から最大 1GHzまでクロックアップ可能。

接続Micro B
CPUARM Coretex-M7 600MHz
ROMフラッシュメモリ 2MByte
EEPROM 1080Byte
RAM1024KByte
GPIO24
PWM31 (8bit 0 ~ 255)
ADC14 (10bit 0 ~ 1023, 3.3V)
UART5 (ブレッドボード上から利用できる数)
I2C2
SPI1
ボタンRESET
LED

Teensy 4.0 紹介サイト

ピン配置

外観

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

使ってみて

Arduino環境で使用できる最速の処理速度、十分な通信線や無駄なく配置されたGPIOピン、使いやすいサイズ感ですべてが最高ランクです。
最近知りましたが、開発環境がArduino 2.0にも対応していてますます使いやすくなってきました。(後述)

単純なCPU性能比較をしてみましたが、いまだ最速は健在です。[2022/12]

上位互換のTeensy 4.1

準備

ライブラリ

ボードライブラリ

Arduino IDEのボードマネージャからTeensy用のライブラリのインストールとボードの選択をします。
Arduino IDE2.0.x からはボードマネージャからライブラリのインストールができるようになりました。

ボードマネージャのURLhttps://www.pjrc.com/teensy/td_156/package_teensy_index.json
検索Teensy
ボードライブラリTeensy by Paul atoffregen バージョン x.x.x
選択するボードTeensy > Teensy 4.0
※ x.x.x 動作確認では1.57.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

スケッチの書き込み

COMポートの選択には、Teensyを含むCOMポート名が表示されます。
画像例では、「COM6」 と Teensyポートのセクションに 「COM6 Serial(Teensy 4.0)」とありますが、どちらを選択しても同じ結果が得られます。

COMポートを選択したら、書き込みボタンを押下することで書き込みを行えます。
Teensyのウインドウが表示されますが、特に何もする必要はありません。

基本スケッチ

ボタンLED

説明

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

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

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

【マイコン基板】
Teensy 4.0

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

【ライブラリ】
Teensy > Teensy 4.0

【準備】
3.3V -> タクトスイッチ -> GPIO0

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

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

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

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

ボタンが押下されるとLEDは点灯しました。
ボタンが離されるとLEDは消灯しました。

PWM,DAC

説明

PWMを使ってLEDのフェード点灯(ゆっくり点灯させる)を行います。

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

【マイコン基板】
Teensy 4.0

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

【ライブラリ】
Teensy > Teensy 4.0

【準備】
GPIO13 - 保護抵抗(約200Ω) - LED - GND

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

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

#define PWM 13        //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ずつ下降する設定を繰り返します。

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

【マイコン基板】
 Teensy 4.0

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

【ライブラリ】
 Teensy > Teensy 4.0

【準備】
Teensy 4.0 <-> LOLIN32 Lite
GPIO14(ADC)       <-> GPIO26(DAC)
GND               <-> GND

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

#define ADC 14

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で下降します。

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

UART

説明

COMから読み取ったデータをUART5に送信します。
UART5から読み取ったデータをCOMに送信します。

UARTn に対するオブジェクトはスケッチ上に対応表を記載しました。

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

【マイコン基板】
 Teensy 4.0
 
【スケッチの説明】
 COMから読み取った情報を UART5へ出力します。
 UART5から読み取った情報を COMへ出力します。

【ライブラリ】
Teensy > Teensy 4.0

【準備】
 UARTの通信にFT232RLを使用します。

 Teensy 4.0(COM側) <-> FT232RL(UART2側)
 GPIO20(UART5 TX) <-> RX
 GPIO21(UART5 RX) <-> TX

 (Uart番号とオブジェクト名)
 COM - Serial
 UART1 - Serial1
 UART2 - Serial2
 UART3 - Serial3
 UART4 - Serial4
 UART5 - Serial5
 
【バージョン情報】
2022/12/28 : 新規
**********************************************************************/

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

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

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

結果はTeratermを2つ起動して確認します。
1つはCOM用で、もう一つはUART5用です。
結果は省略します。

COM用のTeratermに入力された文字は、UART5用のTeraterm画面に表示されます。
UART5用のTeratermに入力された文字は、COM用のTeraterm画面に表示されます。

I2C(SSD1306)

説明

I2Cを使ってSSD1306(OLED 0.96inch)モニタのサンプルを動作させます。

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

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

【マイコン基板】
Teensy 4.0

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

【ライブラリ】
Teensy > Teensy 4.0
Adafruit SSD1306 by Adafruit
Adafruit GFX Library by Adafruit

【準備】
マイコン基板 <-> SSD1306
3V3         <-> VCC
GND         <-> GND
GPIO18(SDA) <-> SDA         //SDA(Wireの場合)
GPIO19(SCL) <-> SCL

GPIO17(SDA) <-> SDA         //SDA1(Wire1の場合)
GPIO16(SCL) <-> SCL

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

#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 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire1, 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(15, 15);            //テキストの表示開始位置
  display.print(F("TAMANEGI"));         //表示文字列
  display.setCursor(10, 35);
  display.print(F("Teensy4.0"));

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

void loop()
{
}
結果

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

SPI(ST7735)

説明

SPIを使ってST7735(LCD 1.8inch)モニタのサンプルを動作させます。
Teensy 4.0ではSPIを1系統使用できます。

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

配線
Teensy 4.0配線ST7735(1.8inch)
3.3VVCC
3.3VLED
GNDGND
GPIO10(SPI CS)CS
GPIO20RESET
GPIO21AO
GPIO11(SPI MOSI)SDA
GPIO13(SPI CLK)SCK
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/

【マイコン基板】
Teensy 4.0

【スケッチの説明】
ST7735 LCDの表示制御します。
デフォルトピンを使用しています。

【ライブラリ】
Teensy > Teensy 4.0
Adafruit ST7735 and ST7789 Library
Adafruit GFX Library

【準備】
VSPIを使用する場合
マイコン基板 <-> ST7735
3V3            <-> VCC
GND            <-> GND
GPIO10(CS)     <-> CS
GPIO20(Reset)  <-> Reset
GPIO21(DC)     <-> AO
GPIO11(MOSI)   <-> SDA
GPIO13(SCK)    <-> SCK

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

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

#define TFT_CS    10
#define TFT_RST   20
#define TFT_DC    21
#define TFT_MOSI  11
#define TFT_SCK   13

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