このチュートリアルでは、リアルタイムクロック(RTC)と、ESP32およびOLEDディスプレイとのインターフェースについて学習します。
DS3231 RTCモジュールを使用して正しい時刻を追跡し、マイクロコントローラーとしてESP32を使用してSPIOLEDに表示します。ESP32は単なるマイクロコントローラーではありません。内部にWi-FiとBluetoothチップがあり、39個のGPIOピンがあります。SPI、I2C、UARTなどのすべての通信プロトコルをサポートします。ESP32を初めて使用する場合は、最初にESP32入門チュートリアルを実行してください。
RTCとは??
DS3231はRTC (リアルタイムクロック)モジュールです。これは、ほとんどのエレクトロニクスプロジェクトの日付と時刻を維持するために使用されます。このモジュールには独自のコイン型電源があり、主電源が切断された場合やMCUがハードリセットされた場合でも日付と時刻を維持します。したがって、このモジュールで日付と時刻を設定すると、常にそれを追跡します。DS1307、DS3231などのRTCICにはいくつかの種類があります。
以前 、以下のプロジェクトでArduinoでDS3231RTCを使用し ました。
- Arduinoを使用した自動ペットフィーダー
- Arduinoデータロガー
注: このモジュールを初めて使用するときは、日付と時刻を設定する必要があります。RTC IC DS1307を使用することもできます。これまで、ArduinoでDS1307を使用していました。
OLEDディスプレイについて知る:
OLEDという用語は「 有機発光ダイオード」の 略で、ほとんどのテレビで使用されているのと同じ技術を使用していますが、それらに比べてピクセル数が少なくなっています。これらのかっこいいディスプレイモジュールがあると、プロジェクトがかっこよく見えるので、とても楽しいです。ここでは、OLEDディスプレイとそのタイプに関する記事全体を取り上げました。
私たちは、使用しているモノクロ7ピンSSD1306 0.96” OLEDディスプレイを。このディスプレイを選択する理由は、SPI 3ワイヤーモード、SPI 4ワイヤーモード、IICモードなどの3つの異なる通信プロトコルで動作できるためです。このチュートリアルでは、モジュールをSPI 4線モードで使用する方法について説明します。これは、通信の最速モードであり、デフォルトのモードであるためです。
ピンとその機能は、以下の表で説明されています。
ピン番号 |
ピン名 |
他の名前 |
使用法 |
1 |
Gnd |
接地 |
モジュールのアースピン |
2 |
Vdd |
Vcc、5V |
電源ピン(3-5V許容) |
3 |
SCK |
D0、SCL、CLK |
クロックピンとして機能します。I2CとSPIの両方に使用 |
4 |
SDA |
D1、MOSI |
モジュールのデータピン。IICとSPIの両方に使用 |
5 |
RES |
RST、RESET |
モジュールをリセットします(SPI中に役立ちます) |
6 |
DC |
A0 |
データコマンドピン。SPIプロトコルに使用 |
7 |
CS |
チップセレクト |
SPIプロトコルで複数のモジュールを使用する場合に便利です |
このチュートリアルでは、モジュールを4線式SPIモードで操作するだけで、残りは他のチュートリアルに残します。
Arduinoコミュニティは、これを非常に簡単にするために直接使用できる多くのライブラリをすでに提供しています。いくつかのライブラリを試してみたところ、Adafruit_SSD1306ライブラリは非常に使いやすく、グラフィックオプションがいくつかあることがわかったため、このチュートリアルでも同じものを使用します。ただし、プロジェクトにメモリ/速度の制約がある場合は、U8gライブラリを使用してみてください。これは、動作が速く、プログラムメモリの占有量が少ないためです。
また、OLEDをRaspberrypiおよびArduinoとインターフェースしました。
必要な材料:
- ESP32
- DS3231RTCモジュール
- 7ピン128×64OLEDディスプレイモジュール(SSD1306)
- オス-メスワイヤー
- ブレッドボード
回路図:
RTC3231をESPボードに接続するための回路図を以下に示します。
RTC DS3231 ICは、I2Cモードの通信を使用します。SCL、SDA、Vcc、GNDピンが出ています。RTCモジュールとESP32の接続を以下に示します。
- RTCのSCL-> ESP32のSCL、つまりピンD22
- RTCのSDA-> ESP32のSDA、つまりピンD21
- RTCのGND-> ESP32のGND
- RTCのVcc-> ESP32のVcc
ここでは、SPIモードを使用して128×64 OLEDディスプレイモジュール(SSD1306)をESP32に接続しています。したがって、7ピンを使用します。ESP32との接続は次のように与えられます。
- OLEDのCS(チップセレクト)ピン-> ESP32のPIND5
- OLEDのDCピン-> ESP32のPIND4
- OLEDのRESピン-> ESP32のPIND2
- OLEDのSDAピン-> PIN D23、つまりESP32のMOSI
- OLEDのSCKピン-> PIN D18、つまりESP32のSCK
- OLEDのVdd-> ESP32のVcc
- OLEDのGND-> ESP32のGND
ESP32用のボードファイルが必要です。ESP32開発キット用のArduinoIDEのボードマネージャードロップダウンメニューをチェックインします。表示されない場合は、以下のリンクに記載されている手順に従ってください。
circuitdigest.com/microcontroller-projects/getting-started-with-esp32-with-arduino-ide
このプロジェクトでESP12を使用することもできます。ここで、ESP12の使用方法を学習してください。
コードの説明:
ESP32の完全なコードは、記事の最後に記載されています。ここでは、コードのいくつかの重要な部分について説明します。
以下のリンクからダウンロードできるコードで使用するいくつかのライブラリが必要です。
1. Adafruit_SSD1306:https://github.com/adafruit/Adafruit_SSD1306
2. SPI:https://github.com/PaulStoffregen/SPI
3. Adafruit_GFX:https://github.com/adafruit/Adafruit-GFX-Library
4. RTClib:https://github.com/adafruit/RTClib
だから私たちはすべてのライブラリを含めました
#include
次に、OLEDのすべてのピンを定義します。これらのピンはすでにWIREライブラリで定義されているため、RTCモジュールのピンを定義する必要はありません。
#define OLED_MOSI 23 #define OLED_CLK 18 #define OLED_DC 4 #define OLED_CS 5 #define OLED_RESET 2 Adafruit_SSD1306 display(OLED_MOSI、OLED_CLK、OLED_DC、OLED_RESET、OLED_CS);
では 、セットアップ 機能、我々は、関数を呼び出します rtc.adjust(日時(__ DATE__、__TIME__)) 私たちのPCの時間に応じて時間を設定します。
void setup() { Serial.begin(9600); if(!rtc.begin()){ Serial.println( "RTCが見つかりませんでした"); while(1); } rtc.adjust(DateTime(__ DATE __、__ TIME__));
その後、表示関数を呼び出してOLEDに表示します。
display.begin(SSD1306_SWITCHCAPVCC); display.clearDisplay(); display.setTextColor(WHITE); //display.startscrollright(0x00、0x0F); //この行のコメントを解除して、oled display.setTextSize(2);で テキストをスクロールできます。display.setCursor(0,5); display.print( "時計"); //これはOLEDに時計を3秒間表示し ますdisplay.display(); delay(3000); }
次に、最後に ループ 関数で、時間を事前定義された DateTime 変数に 格納し、setTextSize、setCursor などの表示関数を使用して時間を表示します。必要に応じてこれらを設定し、 display.println 関数を使用してOLEDに表示します。
void loop() { DateTime now = rtc.now(); display.clearDisplay(); display.setTextSize(2); display.setCursor(75,0); display.println(now.second()、DEC);
つまり、これがESP32を使用してOLEDで時間を表示する方法であり、ご存知のとおり、ESPはIoT機能で知られているため、これを使用してインターネットで時間を公開できます。次の記事では、RTCモジュールを使用せずにESPでインターネット時間を表示する方法を紹介します。