見出し画像

Arduino ESP32 ボード NTP時計製作例

Arduino ESP32ボードは、CQ出版の「トランジスタ技術」「Interface」でよく紹介されているボードです。
ESP32は、Wi-FiとBluetoothが搭載されているので、IoTなどが簡単に安くできるのが良いですね。
パソコンがあればArduino IDEをインストールすれば、サンプルプログラムもあるので簡単に遊べます。
また、ネットにはいろいろな工作例があるので探すのも面白いです。
私は、Wi-Fiを利用した正確なNTP時計を作りました。表示にLCD1602や7セグのTM1637やOLEDのSSD1306などいろいろあるので楽しめます。

画像1

Arduino IDEをhttps://www.arduino.cc/en/software からOSにあったソフトをDownloadしてください。

インストールが完了すればArduino IDEを起動してください。

[ESP32ボードを使用する場合]
「ファイル」「環境設定」を開き、追加のボードマネージャのURLに
https://dl.espressif.com/dl/package_esp32_index.jsonを追記してください。

画像2

次に「ツール」「ボード」「ボードマネジャ」を開きesp32と打ち込んでください。

画像3

Esp32 by Espressif Systemsをインストールしてください。
(右下のインストールをクリックする。)

【WEMOS(ESP32)ボードを使用する場合】

「ツール」「ボード」「esp32 arduino」からWEMOS D1 MINIESP32を選んでください。
UPLOAD Speedを115200にしてください。

画像4

これでArduino IDEの環境が出来ました。

参考資料としてNTP時計でLCD1602を使用するときは、

画像6

画像5

LCD1602配線を上図のように行い、参考プログラムで

ので添付のlcd_1602_ntp_wemos.inoの
// set WiFi ssid & password
const char* ssid = "aterm-cc3092-g";     変更してください
const char* password = "03b2ffc23e30d";   変更してください

LCD1602配線を上図のように行い、下記参考プログラムで
// set WiFi ssid & password
const char* ssid = "????";     変更してください
const char* password = "????";   変更してください

変更後書き込めば動作するはずです。
画面が・・・・表示されてNTP時刻を取り込んで日本時刻になります。
・・・しか表示しなければWi-Fiの受信環境が悪いかSSID PASSWORDが間違っています。
または、ネットからLCD ESP32 NTPと検索すればいろいろ出てきます。

LCD1602 NTP 時計のスケッチ

#include <WiFi.h>
#include <time.h>
#include <LiquidCrystal_I2C.h>

// set the LCD
int lcdColumns = 16;
int lcdRows = 2;//1614=4 1602=2
LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows);

#define JST 3600* 9
// set WiFi ssid & password
const char* ssid = "????";
const char* password = "????";

void setup() {
// initialize LCD
lcd.init();
// turn on LCD backlight
lcd.backlight();
//WiFi set up
WiFi.begin(ssid, password);
while(WiFi.status() != WL_CONNECTED) {
lcd.print(".");
delay(500);
}
lcd.clear();
lcd.print("Connected");
lcd.setCursor(0, 1);
lcd.print("IP:");
lcd.print(WiFi.localIP());
delay(1000);
lcd.clear();
configTime( JST, 0, "ntp.nict.jp", "ntp.jst.mfeed.ad.jp");
}

void loop() {
time_t t;
struct tm *tm;
static const char *wd[7] = {"Sun","Mon","Tue","Wed","Thr","Friday","Sat"};

t = time(NULL);
tm = localtime(&t);
lcd.home();
//lcd.clear();
lcd.printf("%04d/%02d/%02d (%s)",tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday,wd[tm->tm_wday]);
// lcd.print(" ");
// lcd.print(WiFi.localIP());

lcd.setCursor(0,1);
lcd.print(" Time: ");
lcd.printf("%02d:%02d:%02d",tm->tm_hour, tm->tm_min, tm->tm_sec);

// lcd.setCursor(0,3);
// lcd.print("NTP CLOCK");
//lcd.leftToRight();
// lcd.print(WiFi.localIP());
//lcd.printf("%02d:%02d:%02d",tm->tm_hour, tm->tm_min, tm->tm_sec);

delay(1000);
}

【注意点】
USBケーブルで接続するのでシリアルポートが間違っていると書き込めません。

画像7

画像8

Arduino IDEおよびパソコン(windows)でシリアルポートの設定が正しいか確認してください。

【設定が正しいか簡単な確認方法】

画像9

ボードやシリアルポートなど正しく設定されているかの簡単な確認方法として上記のArduino IDEのスケッチ例Blinkを書き込んでください。
エラーが無く書き込めるとLEDが点滅します。

作ったプログラムなどでエラーが出た場合、#include <****.h>でエラーが出る場合、機器のヘッダーファイルがインストールされていないためです。
例としてLCD1602を入れたプログラムの場合
#include <LiquidCrystal_I2C.h>がインストールされていないとエラーが発生します。
その場合「ステッチ」「ライブラリをインクルード」「ライブラリを管理」をクリックします。

画像10

画像11

写真のボードをクリックするとボードを販売しているメルカリshopsに飛びます。

画像12


この記事が気に入ったらサポートをしてみませんか?