デジタル壁時計の組み立て

前回の記事「ESP32と32×8フルカラーLEDでデジタル壁時計をつくる」では配線とプログラムについて説明しました。

ここではESP32とLEDマトリックスをケースに収めて和室の長押(なげし)の上に取り付けた例を紹介します。長押の隙間にACアダプター入れてESP32のUSBに給電しています。

OLYMPUS DIGITAL CAMERA

ケースは2mm厚のボール紙をレーザーカッターで加工して、5枚重ねの中にESP32とLEDマトリックスを埋め込みました。LEDとの配線はESP32に直接ハンダ付けをして最小限の高さにしています。

ESP32をはめ込む場所の周囲は熱を分散させる目的でアルミテープを貼っています(この写真撮影の後でWiFiアンテナの近傍はまずいだろうということでアンテナ付近のアルミテープを除去しました)

LED組み込みフレームの前面にはLED光を拡散させるために和紙を糊付けしました。チューブの先にスポンジキャップが付いた糊で手軽に塗ったらムラになってしまいました。ムラは使っている時にはまったく目立たないので良しとしました。ESP32組み込みフレームを白のマスキングテープで固定して完成です。

OLYMPUS DIGITAL CAMERA

プログラムは少し変更しました。分単位で時刻表示が変わりますので、切り変わる10秒前になると色相が左から右に変化します。0秒になった時にその時点の色で時刻を表示します。表示のためのループを高速で回すために1秒ごとの時刻更新はタイマー機能を使うことにしました。
また、寝ている時にはまぶしくないように23時から6時までは表示を暗くしています。

 

 

 

 

ESP32と32×8フルカラーLEDでデジタル壁時計をつくる

「夜中に目が覚めた時、もう一寝入りするか、そろそろ起きるか、知りたくなりますね。身動きせずにねぼけた目を開けるだけで時刻がわかる大きなデジタル時計が欲しいと思いました。日中は明るくカラフルで楽しい表示でも、暗くなったらまぶしくない明るさで落ち着いた色で表示してくれる時計があったらいいですね。」

2年前に作った「手作りの大型7セグメントフルカラー表示器を使った置き時計」はその後もブレッドボードのまま動作を続けています。壁に掛けられるようにリメークしようかと思いましたが、大きなサイズのフルカラーLEDマトリックスが3699円で売っていたので、これを使った方が楽にできると思って新しく作ることにしました。

OLYMPUS DIGITAL CAMERA

構成
(1) ESP32でWiFi LANに接続し、NTPで時刻を定期的に取得する。
(2) ESP32でTimeライブラリを使い、NTP時刻で定期的に校正しながら1秒ごとに時刻を得る。
(3) ESP32でFastLEDライブラリを使い、32×8 LEDマトリックスを制御する。
(4) 時刻表示用数字フォントはComic San MS Bold Italic 96pointをベースにして8×7のグレースケールフォントを自作する。

部品リスト
(1) ESP32(MH-ET LIVE ESP32 MiniKit):AliExpressで$6ぐらいで購入できます。
(2) フルカラーLEDマトリックス(32×8 10mmピッチ):Quimat Arduino用RGB LED パネル…..

配線
ESP32 MiniKit-J2-6pin(5V) —– LED Matrix 5V
ESP32 MiniKit-J2-8pin(GND) —– LED Matrix GND
ESP32 MiniKit-J2-10pin(IO16) —– LED Matrix Din

OLYMPUS DIGITAL CAMERA

Arduino IDEへの追加
ESP32ボードの追加 「Arduinoで遊ぶページ」などを調べてください。
FastLEDライブラリの追加 「ArduinoでNeopixel操作」などを調べてください。

Arduinoプログラム
青色で1秒ごとに時刻を表示するプログラムです。
– NTPサーバーに300秒ごとにアクセスしますが、loop()関数の if(SecCount>=xxxx)で自由に変更してください。
– FastLEDライブラリは高度な色指定ができますので自由に改造してください。
– フォントデータは、3次元配列 NumFont[10][FontHeight][FontWidth]です。好きなフォントに改造してください。

 

OLYMPUS DIGITAL CAMERA

WiFi LANでのESP32環境センサーノードとESP32データロガー

ESP32 environment sensor node and data logger on WiFi LAN

Overview
In order to investigate the temperature distribution in the indoor space, we created a system that records data from multiple environmental sensor nodes wirelessly to a data logger. The environmental sensor node performs intermittent operation by connecting the BME280 environmental sensor to the ESP32 as a battery drive to facilitate installation. The data logger connects the real-time clock and SD card to the ESP 32 and records the received time and data in a file for each sender. Assign a fixed IP address with the ESP32 MAC address using a dedicated WiFi router. Data is sent from the environmental sensor node to the data logger’s IP address using UDP, and the data logger learns the environmental sensor node number from the sender IP address.

概要
屋内空間の温度分布を調べるために、複数の環境センサーノードから無線でデータロガーに記録するシステムを作りました。環境センサーノードは設置を容易にするために電池駆動としてESP32にBME280環境センサーを接続して、電池の交換頻度を減らすために間欠動作を行います。データロガーはESP32にリアルタイムクロックとSDカードを接続して、受け取った時刻とデータを送信元ごとのファイルに記録します。専用のWiFi ルーターを使って使用するESP32のMACアドレスで固定IPアドレスを割り当てます。環境センサーノードからデータロガーのIPアドレスに向けてUDPでデータを送り、データロガーは送信元IPアドレスから環境センサーノードの番号を知ります。

使用した機材

ESP32: MH-ET LIVE ESP-32 Mini kit

10ピン4列のピンソケットには分割ロングピンソケット 1x42 [FHU-1x42SG] (秋月電子通商)を使用しました。
http://mh.nodebb.com/topic/5/mh-et-live-esp-32-devkit-mini-kit-user-guide-updating

環境センサー: BME280 GYBMEP

ライブラリ:BlueDot BME280 Library

BME280 : ESP32
VIN           : 3.3V
GND         :GND
SCL           :IO22
SDA          :IO21

マイクロSDモジュール:

ライブラリ: ESP32標準 SD(esp32)

配線
SD             : ESP32
CS             : IO5
SCK          : IO18
MOSI       : IO23
MISO       : IO19
VCC          : VCC
GND         : GND

リアルタイムクロック: DS3231 ZS-042モジュール


充電できないCR2032を使用するため充電用パターンをカットしました。

ライブラリ:DS3231FS

配線
DS3231      : ESP32
32K             : NC
SQW           : NC
SCL             : IO22
SDA            : IO21
VCC            : VCC
GND          : GND

無線LANポータブルルーター: エレコムWRH-300BK3-S

ESP32のMACアドレスを調べて、MACアドレスとIPアドレスを紐付けにします。SSIDのスティルス機能を使い、登録されたMACアドレス以外は接続を拒否しています。

電池ケース: マルツGB-BHS-3X4C-LW(単3×4本 スイッチ・フタ・リード線付き)
ESP32のVDDに+6V、ESP32のGNDに0Vを接続します。

 

動作の安定性について
ESP32環境センサーノードは送信時に毎回起動するような動作のため安定して動作します。ESP32データロガーは連続動作のためWiFi LANへの接続不良の場合やSDへの記録が正常に行えない場合はESP32をリスタートすることにしました。

 

ESP32環境センサーノードのスケッチ

 

 

ESP32データロガーのスケッチ

 

 

 

ESP32でYMF825音源のデモ(音色データ、音階、和音)

ヤマハのFM音源YMF825をArduino UNOで制御できましたので、ESP32に移植しました。
ESP32で使うと何がうれしいか !! —- >> タッチセンサーとBLEが使えます。

Arduino UNOの例は下記の記事を参照してください。
http://keisoku-lab.mond.jp/2018/02/09/ヤマハfm音源lsi-ymf825搭載モジュールのデモプログラム/

ESP32は3.3V系ですから、5V系のUNOで使っていたYMF825モジュールを接続するのはちょっと注意が必要です。ウダ電子の公式ページでは5Vと3.3V電源を接続し、抵抗を外し、ハンダを盛ってジャンパーする旨書かれています。3.3V単独電源になるなら頑張れますが、5Vも供給しなければいけないのは面倒ですから、YMF825モジュールは5Vのままで、SPIの信号を調整する方向で考えます。信号線はSCK, MISO, MOSI, SSとリセット信号の5本です。ESP32から出力する信号は3.3VなのでそのままでもYMF825に伝わりますので気にしないことにします。ESP32に5V信号が入ってくると壊れてしまいますが、入力はMISOだけです。MISOはレジスタの値を読み取る時に使われますが、読まないと決めればつなぐ必要がないことに気がつきました。SPIライブラリの中ではMISOも指定しないとエラーになりますのでMISOも割り当てますが、配線はしません。

OLYMPUS DIGITAL CAMERA
OLYMPUS DIGITAL CAMERA

但し、後日何か問題が起こった時に配線チェックをして、抜けている線を発見すると反射的に結線してしまう可能性がありますので注意が必要です。何気なくMISOを結線するとESP32を壊してしまいます。Vfが2VぐらいのLEDの+側をYMF825のMISO、-側をESP32のMISO入力端子に接続しておけば、思い出すきっかけにもなりますし、破壊する心配も無くなります。

ESP32のSPIでYMF825を使う方法は
ywabikoさんの記事がたいへん参考になりました。

YMF825モジュール <<—->> ESP32
RST_N <<—->> IO32
5V <<—->> USB 5V
GND <<—->> USB GNDとESP32 GND
SCK <<—->> IO18
MISO <<—->> 接続しない (IO19)
MOSI <<—->> IO23
SS <<—->> IO5

(180213)

 

ESP32(MH-ET LIVE ESP32 MiniKIT)のタッチセンサー

ESP32には10本ものタッチセンサーがあります。しかも、インタラプト関数が用意されているので便利に使えそうです。

OLYMPUS DIGITAL CAMERA

ESP32の安価でコンパクトなボードを購入したので試しに使ってみようと思います。特にアフィリエイトが得られるわけではありませんが、購入先は下記URLです。

https://ja.aliexpress.com/item/MH-ET-LIVE-D1-mini-ESP32-ESP-32-WiFi-Bluetooth-Internet-of-Things-development-board-based/32816658883.html?spm=a2g0s.9042311.0.0.u50SMy

このボードはLチカ用LEDが付いているのが原因だと思いますが、T2は使えません。また、T8とT9が入れ替わっているようです。

T0–IO04
T1–IO0
T3–TDO
T4–TCK
T5–TDI
T6–TMS
T7–IO27
T8–IO32
T9–IO33

フラットケーブルを使ったら60ぐらいあったタッチセンサーの出力が20ぐらいまで低下して、検知できるギリギリですがなんとか使えています。

(18.02.11)

 

ヤマハFM音源LSI YMF825搭載モジュールのデモプログラム

Arduino UNO互換機でYMF825を動作させてみました。

複数の音色パラメータから音色データを生成して、西洋音階で和音を鳴らします。ヘッドフォンアンプが付いていますが、スピーカーにつないでいます。

購入先はスイッチサイエンスです。
https://www.switch-science.com/catalog/3399/

OLYMPUS DIGITAL CAMERA

音の雰囲気が伝わるように動画を作りました。
https://www.facebook.com/koji.ohashi.12/videos/1635981226477849/

音色パラメータが4種類入っているのでプログラムが長くなっていますが、実際に使えるものを作ろうとするとこのぐらいの機能は必要になるのでまとめてみました。

lineNo.304-307にバグがありましたので修正しました。(180213)

(18.02.09)

参考にさせてもらったサイト

https://kanpapa.com/today/2017/08/ymf825-fm-board.html

https://sites.google.com/site/himagine201206/home/arduino/ymf825/030

 

NeoPixelのDemo

ArduinoのNeoPixelライブラリのサンプルは参考になりますが、盛りだくさん過ぎて分かりにくい印象があります。

OLYMPUS DIGITAL CAMERA

シンプルでカラフルに書いてみました。

ついでに、「グルグル巻けば円筒ディスプレイ」用のDemoプログラムも紹介します。10mmピッチのLEDを200個φ60mm(よりも少し太い)のボトルに巻きつけました。一周21個で縦に9個の(狙いは20個✖️10個でしたが、)円筒ディスプレイです。

 

ESP32のArduino IDEでBLEを試してみました

ESP32はWiFiに加えてBLEも使えるということで注目されています。Arduino IDEでは、2017年の10月頃からBLEがサポートされ始めました。

ボードも入手しやすくなってMH-ET LIVE D1 mini ESP32という小型のボードは$7.5ぐらいでAliExpressで購入できました。

https://ja.aliexpress.com/item/MH-ET-LIVE-D1-mini-ESP32-ESP-32-WiFi-Bluetooth-Internet-of-Things-development-board-based/32816658883.html?spm=a2g0s.9042311.0.0.Zbsxqj

今回はそのESP32を2個使って、サーバーとクライアントで動作させてみました。どちらもArduino IDEでプログラミングできるので楽なのではないかと思います。サーバーには照度センサーNJL7502Lがあり、クライアントが接続すると照度のデータを送ります。クライアントが接続している間はゆらゆら人形が揺れます。クライアントはデータをもらってシリアルでPCにデータを表示します。

電気回路:
3.3Vを照度センサの+側(長い足)、照度センサの-側(短い足)は10kΩでGNDに接続して、短い足の電圧をアナログ入力AI6(IO34)に接続します。データシートを見ると1000luxで3Vの出力になるようです。ゆらゆら人形はIO5とGNDに接続します。ゆらゆら人形はDaisoのソーラーゆらゆらを改造して、コイル両端を回路から外して外部に取り出します。
クライアント側はUSBでPCに接続します。

BLEライブラリの導入には以下のURLの情報を参考にしました。
「Arduino IDEでESP32 BLEライブラリを導入」
https://qiita.com/tomorrow56/items/afa06e206eec9fafcc7a

 

OLYMPUS DIGITAL CAMERA
OLYMPUS DIGITAL CAMERA

BLEライブラリはArduinoっぽくないので、「山勘で書いて、動いた」というレベルですのでもっと良いサンプルを誰かが書いてくれると思います。現状で分かっている問題点としては、サーバーが電源OFFで停止するとクライアントがハングアップして、クライアントの電源をOFF-ONしないと復帰しない点です。

 

サーバー側のスケッチ(ベースにしたのはBLE_notify)

 

クライアント側のスケッチ(ベースにしたのはBLE_client)