Teensy 4.1を紹介します。
以前はArduino IDE 1.8.xx 環境でしか開発ができなかったのですが、いつの間にか2.0.x で開発ができるようになっていました。
基本的な使い方と開発環境の作り方について記載します。
紹介するもの
Teensy 4.1
特徴
Coretex-M7 搭載で標準600MHz から最大 1GHzまでクロックアップ可能。
接続 | Micro B |
CPU | ARM Coretex-M7 600MHz |
ROM | フラッシュメモリ 8MByte EEPROM 4KByte |
RAM | 1024KByte |
GPIO | 42 |
PWM | 35 (8bit 0 ~ 255) |
ADC | 18 (10bit 0 ~ 1023, 3.3V) |
UART | 8 (ブレッドボード上から利用できる数) |
I2C | 3 |
SPI | 2 |
ボタン | マイクロSDカードスロット Ethernet DP83825 PHY RESET LED 他 |
ピン配置
外観
400穴ブレッドボードでは、左右3列と2列ずつ使用することができます。
使ってみて
Arduino環境で使用できる最速の処理速度、十分な通信線や大量のGPIOピン、充実した機能が凝縮された一枚です。
とても使いこなせません。
オーバークロック(1MHz)を使用するとそれなりに発熱します。
冷却フィンなどがあると安心です。
Teensy4.0について
過去に計測したマイコンの単純な処理速度比較について
準備
ライブラリ
ボードライブラリ
Arduino IDEのボードマネージャからTeensy用のライブラリのインストールとボードの選択をします。
Arduino IDE2.0.x からはボードマネージャからライブラリのインストールができるようになりました。
ボードマネージャのURL | https://www.pjrc.com/teensy/td_156/package_teensy_index.json |
検索 | Teensy |
ボードライブラリ | Teensy by Paul atoffregen バージョン x.x.x |
選択するボード | Teensy > Teensy 4.1 |
モジュールライブラリ
機能やモジュールを使用しない場合インストールの必要はありません。
機能/モジュール | ライブラリ名 | 検索 | 確認時のバージョン |
---|---|---|---|
SSD1306 | Adafruit SSD1306 by Adafruit | SSD1306 | 2.5.1 |
ST7735 | Adafruit ST7735 and ST7789 Library by Adafruit | ST7735 | 1.9.3 |
関連 SSD1306 ST7735 | Adafruit GFX Library by Adafruit | GFX | 1.11.3 |
スケッチの書き込み
COMポートの選択には、Teensyを含むCOMポート名が表示されます。
(図はTeen4.0です)
画像例では、「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.1
【スケッチの説明】
プルダウンしたピンの状態がHighならLEDを点灯、LowならLEDを消灯させます。
【ライブラリ】
Teensy > Teensy 4.1
【準備】
GPIO13(LED) -> 保護抵抗(約200Ω) -> LED Anode, LED Cathode -> GND
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
説明
PWMを使ってLEDのフェード点灯(ゆっくり点灯させる)を行います。
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/
【マイコン基板】
Teensy 4.1
【スケッチの説明】
PWM出力でのフェード点灯(ゆっくり点灯)とフェード消灯(ゆっくり消灯)を行います。
【ライブラリ】
Teensy > Teensy 4.1
【準備】
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.1 | 配線 | LOLIN32 Lite |
---|---|---|
GPIO14(ADC) | 赤 | GPIO26(DAC) |
GND | 黒 | GND |
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/
【マイコン基板】
Teensy 4.1
【スケッチの説明】
入力された電圧を読み取ります。
【ライブラリ】
Teensy > Teensy 4.1
【準備】
Teensy 4.1 <-> 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から読み取ったデータをUART8に送信します。
UART8から読み取ったデータをCOMに送信します。
UARTn に対するオブジェクトはスケッチ上に対応表を記載しました。
配線
Teensy 4.1 | 配線 | FT232RL |
---|---|---|
GPIO35(UART8 TX) | 黄 | RX |
GPIO34(UART8 RX) | 緑 | TX |
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/
【マイコン基板】
Teensy 4.1
【スケッチの説明】
COMから読み取った情報を UART8へ出力します。
UART8から読み取った情報を COMへ出力します。
【ライブラリ】
Teensy > Teensy 4.0
【準備】
UARTの通信にFT232RLを使用します。
Teensy4.1(COM側) <-> FT232RL(UART2側)
GPIO35(UART8 TX) <-> RX
GPIO34(UART8 RX) <-> TX
(Uart番号とオブジェクト名)
COM - Serial
UART1 - Serial1
UART2 - Serial2
UART3 - Serial3
UART4 - Serial4
UART5 - Serial5
UART6 - Serial6
UART7 - Serial7
UART8 - Serial8
【バージョン情報】
2022/12/28 : 新規
**********************************************************************/
void setup()
{
Serial.begin(115200);
Serial8.begin(115200);
}
void loop()
{
if(Serial8.available() != 0) //UART5にデータがあれば、読み取った内容をUART0に送信
{
Serial.write(Serial8.read());
}
if(Serial.available() != 0) //UART0にデータがあれば、読み取った内容をUART5に送信
{
Serial8.write(Serial.read());
}
}
結果
結果はTeratermを2つ起動して確認します。
1つはCOM用で、もう一つはUART8用です。
結果は省略します。
COM用のTeratermに入力された文字は、UART8用のTeraterm画面に表示されます。
UART8用のTeratermに入力された文字は、COM用のTeraterm画面に表示されます。
I2C(SSD1306)
説明
I2Cを使ってSSD1306(OLED 0.96inch)モニタのサンプルを動作させます。
そのほかの図形描画サンプルは、Arduinoサンプルを参照してください。
ファイル(F) > スケッチ例 > Adafruit SSD1306 > ssd1306_128x64_i2c
配線
Teensy 4.1 | 配線 | SSD1306(0.96inch) |
---|---|---|
3.3V | 赤 | VCC |
GND | 黒 | GND |
GPIO19(SCL) | 青 | SCL |
GPIO18(SDA) | 黄 | SDA |
スケッチ
/**********************************************************************
【ライセンスについて】
Copyright(c) 2022 by tamanegi
Released under the MIT license
'http://tamanegi.digick.jp/about-licence/
【マイコン基板】
Teensy 4.1
【スケッチの説明】
SSD1306 OLEDの制御をします。
【ライブラリ】
Teensy > Teensy 4.1
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
GPIO25(SDA) <-> SDA //SDA2(Wire2の場合)
GPIO24(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 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire2, 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.1"));
display.display(); //バッファ転送(表示)
}
void loop()
{
}
結果
SSD1306のサンプルスケッチが動作しました。
SPI(ST7735)
説明
SPIを使ってST7735(LCD 1.8inch)モニタのサンプルを動作させます。
Teensy 4.1ではSPIを2系統使用できます。
サンプルはマクロにより使用するSPIを選択して動作します。
こちらの定義をコメントアウト、または削除するとSPI1を使用します。
#define SPI0
そのほかのグラフィックのサンプルはArduinoサンプルスケッチを参照してください。
ファイル(F) > スケッチ例 > Adafruit ST7735 and ST7789 Library > graphicstest
配線
Teensy 4.1 | 配線 | ST7735(1.8inch) |
---|---|---|
3.3V | 赤 | VCC |
3.3V | 赤 | LED |
GND | 黒 | GND |
GPIO10(SPI CS) | 黄 | CS |
GPIO20 | 青 | RESET |
GPIO21 | 橙 | AO |
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.1
【スケッチの説明】
ST7735 LCDの表示制御します。
デフォルトピンを使用しています。
【ライブラリ】
Teensy > Teensy 4.1
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_RST 20
#define TFT_DC 21
#define SPI0
#ifdef SPI0
#define TFT_CS 10
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
#else
#define TFT_CS 0
Adafruit_ST7735 tft = Adafruit_ST7735(&SPI1, TFT_CS, TFT_DC, TFT_RST);
#endif
//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のサンプルスケッチが動作しました。
コメント