ブログだいちゃん

ブログだいちゃん

趣味のブログ

ブログだいちゃん

ESP32 Web Radio のLCD表示に時々不具合が出る

ウエブラジオのLCDに表示される画像(放送局のロゴマーク)などが時々崩れる症状が出ていました。
原因を調べてみたところ、LCDが原因ではなく画像ファイルを格納してあるSDカードとESP32までの配線に問題があることが分かりました。

下の画像のようにLCDと本体基板との間を繋げているフラットケーブルの長さが原因で、この配線をなるべく短くすると良いようです。


対 策

しかし、配線を短くすると余裕がなくなり作業性が悪くなります、考えた結果本体基板とLCDを一体化することにしました。
今使用している基板は使えないので最初から作り直しです。

ユニバーサル基板は両面スルーホールの95×75mmを必要な長さにカットして使用します、MP3デコーダーはピンヘッダーの関係で後ろ向きに取付けました、基板の裏側にはLCD取付用のピンヘッダーメスを取付けます。


LCD基板に取付けるとこんな感じになります、配線のごちゃごちゃはスピーカーと電源周りです。

それでも表示に不具合が出る場合は
TFTライブラリーの tft.cpp 215行目あたりの
if(_id==0){_freq = 40000000; TP_vers=0;}
80000000 → 40000000 に変更してみる。

また、タッチスクリーンのボタンを押しても反応しない場合は MiniWebRadio.ino の671行目あたりにある
tft.setRotation(1); // Use landscape format
LCD画面を上下反転してみる 3→1 に変える(ILI9341の場合)

結 果

時々画像が崩れて表示されていた起動画面、またタッチスクリーンのボタン、ロゴ画像も正常に表示されました。

雷サージにより速度が極端に落ちたNASを取替えることに

大分前になりますが、使っていたIOデータのNASランディスク)が、近所に落ちた雷のサージにより、損傷を受けたようで、テレビなどは問題なかったですが、モデムは使えなくなり交換し、ランディスクは速度が11MB/S程しか出なくなりました、幸い中のデーターは無事でしたので最悪は免れましたが。

使っていたNASはIOデータのHDL-GT(LAN Disk)1TB HDDを4基積んでRAID5で使用していました、もう生産終了ですがこんな物でした、もう10年以上も使用しています。

f:id:blogdaichan:20190211161650j:plain

なにせ転送速度が出ないのと、そろそろHDDも寿命を迎える頃なので取替えることにしました。
購入した物は人気の、Synology DiskStation DS218j

最近値が下がってきたので先日購入したのですが、購入してから1週間くらいで 1K 程下がっています、まだまだ下がりそうですのでちょっと買い急いだかもしれませんね。

HDDも古い物は使いたくないので、3TB WD Red NAS用 WD30EFRX 5400rpm も1台 購入しました、2台が理想ですが取敢えず手持ちの外付けUSB_HDDでバックアップすることにします。

このNASはパッケージも数多くありいろいろ出来そうですが、ファイルのバックアップが主な目的ですので必要最小限のインストールにとどめました。
使用するパッケージは
GoogleDriveなどに保管している重要ファイルとリアルタイムに同期をとるため Cloud Station Serverr
それに
外付けUSB_HDDにNASのバックアップを取るため Hiper Backup をインストールしました。

さて、転送速度ですがNASは家の2階に設置し1階にあるPCとはカテゴリー4のLANケーブルで繋がっています。
以前のNASでは11MB/S程度でしたが、CrystalDiskMark 6 で測定してみました。

f:id:blogdaichan:20190212072124j:plain

Read はほぼ満足ですが Write は約半分の速度しか出ていません、それでも前のよりは6倍くらい速くなっていますが。
書込み速度が遅い原因は何でしょうか???・・・

時間をおいて再度測定した結果です、読み込み書込みとも同程度の速度が出ました、バックグラウンドで何か動いていたのでしょうね、一安心です。

f:id:blogdaichan:20190212191616j:plain

ESP32にAlexa をインストールしてみる

1年くらい前にRaspberry Pi3 と Google AIY VoiceKit を使い Amazon Alexa を入れてみました、下がその時の記事です 。

ESP32に興味を持っていて、ネットでおもしろそうな記事を探していたところESP32にAlexaを入れた記事がありました。

手持ちのパーツもそこそこ揃っているので作成してみました、相当ハマったので備忘録として記事にしておきます。

 

使用パーツ

ESP32 DEV KitC:秋月電子

SPH0645LM4H搭載 I2S MEMSマイクモジュール:スイッチサイエンス

MAX98357A搭載 I2S 3W D級アンプボード:スイッチサイエンス

スピーカー

ブレッドボード、配線用ワイヤー

ESP-IDF環境の構築

ソフトウエアは Git Hub にあります、しかし中を見てみるといつもと違うファイル形式です、ESP32への書込みは Arduino IDE を使用していましたが、ESP-IDF なるものを使うみたいです、こんなの使ったことありません。

ネットで調べてみると使い方を説明しているサイトがありました、ありがたいです参考にさせていただきました。

インストールの仕方は上記記事を見て頂くとして、簡単に説明します。 

まず、ここからTool_chain(msys2) をダウンロードします、ダウンロード出来たら解凍して出来たフォルダー(msys32)をCドライブなどの直下に置きます、私の場合はDドライブの直下に置きましたのでDドライブでの説明です。

次に、msys32フォルダ内の「mingw32.exe」をダブルクリックして起動します、するとコマンドプロンプト画面みたいなウインドウが開きます、以後は殆どこの画面で設定を進めます。

いったんこの画面を閉じて、msys32 → home → 「ユーザー名」フォルダーに移動し、「esp」フォルダを作成します。

「mingw32.exe」を起動し

cd /d/msys32/home/user-Name/esp

でespフォルダーに移動し

git clone --recursive https://github.com/espressif/esp-idf.git

でESP-IDFをクローンします。

次に以下のようにしてESP-IDFにパスを通します。

export IDF_PATH="D:/msys32/home/User-Name/esp/esp-idf"

そして

export PATH="$PATH:/d/msys32/usr/bin:/d/msys32/mingw32/bin:/d/msys32/opt/xtensa-esp32-elf/bin"

一端画面を閉じて再度起動してパスが通っているか確認するため以下のコマンド実行。

printenv IDF_PATH
printenv PATH

パスが間違いなかったら Alexa のインストールに進めます。

GitHubからAlexaをクローンする

「mingw32.exe」を起動し D:/msys32/home/User-Name に移動し下記のコマンドを実行しAlexaをクローンする。

git clone https://github.com/MrBuddyCasino/ESP32_Alexa.git

クローン出来たら ESP32_Alexa フォルダに移動し下記のコマンド実行しアップデートする。

git submodule init && git submodule update

Alexaの設定をし保存する

まず、下記を参考にESP32 DEV-KitC のMACアドレスを取得します。

取得できたら、GitHubに書かれているように「https://alexa.boeckling.net/」にアクセスしMACアドレスを入力して認証トークンを作成しコピーする。

次に、d:/msys32/home/user-name/ESP32_Alexa/main/Kconfig.projbuild をテキストエディタで開き以下を設定しUTF8で保存する。

 

下記の赤字箇所を変更する

default "myssid" → 自宅の無線ルーターSSID

default "myssid" → 自宅無線ルーターのpassword

string "Authentication Token" → 取得したトーク

 

赤字箇所を追加する

choice
prompt "API Endpoint"
default US
help
Select API endpoint URL.

config ALEXA_ENDPOINT_EU
bool "EU"
config ALEXA_ENDPOINT_US
bool "US"
config ALEXA_ENDPOINT_FE
bool "JA"
endchoice

config ALEXA_ENDPOINT
string
default "https://avs-alexa-na.amazon.com" if ALEXA_ENDPOINT_US
default "https://avs-alexa-eu.amazon.com" if ALEXA_ENDPOINT_EU
default "https://avs-alexa-fe.amazon.com" if ALEXA_ENDPOINT_FE

choice
prompt "Language"
default ALEXA_LOCALE_EN_US
help
Select locale.

config ALEXA_LOCALE_EN_US
bool "en-US"

config ALEXA_LOCALE_JA_JP
bool "ja-JP"

endchoice

config ALEXA_LOCALE
string
default "en-US" if ALEXA_LOCALE_EN_US
default "en-GB" if ALEXA_LOCALE_EN_GB
default "ja-JP" if ALEXA_LOCALE_JA_JP

 ここまで出来たら「mingw32.exe」を立ち上げ、ESP32_Alexa フォルダに移動し下記コマンドを実行します、

make menuconfig

しばらくすると設定画面が立ち上がります。

f:id:blogdaichan:20190124144522j:plain

まず、Serial flasher config 項目を開きESP32のシリアルポート設定、また Flash size を4MBに設定します。

f:id:blogdaichan:20190124144559j:plain

 次に、Alexa config に入り、日本語(JA、ja-JP) に設定、 認証トークンなど確認します。

f:id:blogdaichan:20190124144639j:plain

以上が終わったら <seve> して終了します。

ESP32にAlexaを書き込む

ESP32をUSBでPCに接続し「mingw32.exe」を立ち上げ、ESP32_Alexa フォルダに移動し下記コマンドを実行します。

make flash

Arduino IDE に比べ相当時間が掛りますので待ちます。

ESP32の配線

書込みが終了したらESP32をブレッドボードに装着し配線をします、GitHubに配線について書かれています。

アンプの配線

ESP pin - I2S signal
----------------------
GPIO25/DAC1    - LRCK
GPIO26/DAC2    - BCLK
GPIO22       - DATA
5V          - Vcc
GND         - GND

マイクモジュールの配線

ESP pin - I2S signal
----------------------
GPIO18    - LRCK
GPIO17    - BCLK
GPIO05    - DATA
3.3V          - Vcc
GND         - GND

配線チェックが終わったらUSBに接続します、しばらくしてスピーカーから笑い声が聞こえたらひとまず成功です。

f:id:blogdaichan:20190124153234j:plain

Alexaの詳細設定はスマフォアプリで

スマフォにAlexaアプリをダウンロードし開くと、ディバイスの中にESP32_Alexaのディバイスが表示されていますので選択して住所など細かい設定を行います。

ESP32のBOOTボタンを押して「アレクサ、今日の天気を教えて」などと言えばスマフォで設定した住所の天気を教えてくれます。

電動精密ドライバー

充電式の小型電動ドライバーも持っていますが、趣味のラジコンや電子工作などで使用するにはトルクがありすぎて使えません主に木工用に使っています。 

 

 

小さなネジ止めには精密ドライバーセットを使用しています。

 f:id:blogdaichan:20190115182338j:plain

 

 

しかし、ノートパソコンの裏蓋を開けるときなどネジが多すぎて手が疲れますね。

小型でトルクの調整が出来る電動精密ドライバーがないか探していたところこんなのがありました、12種類のビットが付属しています。

f:id:blogdaichan:20190115182838j:plain
f:id:blogdaichan:20190115183309j:plain


850mAのリチウムイオン電池内蔵でUSBから充電します、1回の充電で300本くらいネジ締めが出来るようなことが書いてありますが本当でしょうか。

英語表記の説明書の一部です。

f:id:blogdaichan:20190115183929j:plain

 

トルク調整は1~5までの5段階とカスタマイズできるAポジションがあります、トルクは1の1kgf/cm~5の6.5kgf/cmまで調整でき、このクラスでは最大トルクが大きいですね。

当然手締めも出来て、40kgf/cmのトルクまでOKだそうです。

Aポジションではトルクと回転数を調整でき自分好みに設定できます。

私は海外から買いましたがアマゾンにもありました。 

ESP32 WebRadio ケース作成

当初ノートPC用のアンプ付外部スピーカーにして本体だけケースにしようと思いましたが移動が面倒だし、1.5インチの小さなスピーカーがありますので一体型のケースにしコンパクトに仕上げます。

有り合せのパーツで

追加のパーツは有り合せのものを使用しました。

アンプ:PAM8403 3Wステレオアンプ、スイッチ付のアンプでラジオの電源スイッチとしても使います。

f:id:blogdaichan:20190103101336j:plainf:id:blogdaichan:20190103101333j:plain
3Wステレオアンプ

スピーカー:1.5インチ(38mm)防磁タイプ、小型化するために使用しましたが50mm程度が良かったかも。

f:id:blogdaichan:20190103101346j:plain
1.5インチスピーカー

ケースはいつもの2色

ケースの大きさは幅200mm×高さ90mm×奥行き60mmで充填率50%で印刷、ケースの厚さ5mmで各スピーカーは仕切りましたのでこの大きさが限度でした、フロントパネル4時間、ケース17時間程掛かりました。

エンクロージャーには吸音材を入れ密閉性を良くするためネジを多めに、小さいスピーカーなので低音域はいまいちですがこんなもんでしょう。

f:id:blogdaichan:20190103101343j:plainf:id:blogdaichan:20190103101339j:plain
WebRadio

出来上がってから気が付きましたが、ケースを少し上向きになるよう作成すれば良かったなと、再度印刷するとまた17時間(^_^;)諦めます。

それと、スピーカーにカバーを付けないと傷つけそうで怖いですね。

スピーカーグリル

スピーガーがむき出しでみすぼらしいので、3Dプリンターでスピーカーグリルを作ってみました、単純な形状ですが。

f:id:blogdaichan:20190103101108j:plain
WebRadio

関連記事

blogdaichan.hatenablog.com

blogdaichan.hatenablog.com

blogdaichan.hatenablog.com

blogdaichan.hatenablog.com

ESP32でWebRadioを作成 その3ブラウザで設定する

WebRadioの番組登録・修正はSDカード内にある「stations.txt」の中身を書き換えることにより出来ますが、ブラウザで設定出来るようになっていますのでこちらの方が設定しやすいです。

WebRadioのIPアドレスを調べる

WebRadioが自宅WiFiのどのIPアドレスを使用しているのか調べないとWebRadioにアクセスして設定することが出来ません。

ウエブラジオのIPアドレスLCDディスプレイの下段にmyIP:192.168.○.○と表示されていますのでこのIPアドレスをブラウザに打ち込み設定画面を表示させます。

WebRadioの設定

接続すると以下の画面が表示されます、左上のラジオのアイコンが反転表示され確認出来ます、各ボタンで番組切り替え音量・音質などを調整できます。

f:id:blogdaichan:20190103102401j:plain

まず最初に虫眼鏡マークのボタンを押し番組の登録を行います、好きな番組を選び修正して登録します。

f:id:blogdaichan:20190103102357j:plainf:id:blogdaichan:20190103102411j:plain

最後に WebRadioのSDカードに登録してブラウザを閉じます。

f:id:blogdaichan:20190103102408j:plain

ダウンロードしたロゴファイルは、編集したラジオ局と同じ名前にしてSDカード内の「logo」フォルダーに入れるとLCDに表示されます。

一部不具合はありますがこれで仮組みでの設定は出来ました、さてどのようなケースにして組み込むかこれから考えます。

関連記事

blogdaichan.hatenablog.com

blogdaichan.hatenablog.com

blogdaichan.hatenablog.com

blogdaichan.hatenablog.com

ESP32でWebRadioを作成 その2

前の記事でESP32とVS1053 MP3モジュールの最小構成でWebRadioが動作するのが確認出来たので、続きの作業としてLCDタッチパネルとリモコンを取付け動作確認を行います。

回路図とパーツの配線

参考動画の説明欄よりGithubに移動しZipファイルをダウンロードし解凍します、additional_infoフォルダー内に回路図、プログラム説明、画像などが入っています。

回路図の画像を開き確認しながら配線していきますが、使用しているLCDがHX8367Dで今回使用する手持ちのLCD(ILI9341)とは違います修正が必要なので画像に手を加えました、適当にLCDの端子を割り当てただけですので実物の端子位置とは異なります、LCD及びIRモジュールは3.3V使用、MP3モジュールは5Vです。

f:id:blogdaichan:20190103103730j:plain
回路図

動作確認のため仮組みしてみました、最終的にはケースを作成して組み込みます。

f:id:blogdaichan:20190103103726j:plainf:id:blogdaichan:20190103103723j:plain

スケッチの書込み

additional_infoフォルダー内にある英語表記のPDFファイルに設定方法が書いてあります、またMiniWebRadio.inoファイルのコメント欄にも8項目ほど書かれていますので1番目から設定していきます。

私の環境での設定

1)スケッチ容量が大きいのでパーティションテーブルを書き換える。 解凍したMiniWebradioフォルダー内にあるdefault.csvArduinoData/packages/esp32 /hardware/esp32/1.0.0/ tools / partitions /フォルダ内のdefaut.csvと置き換える。 boards.txtのしきい値を1310720から3145728に設定します、具体的にはArduinoData/packages/esp32 /hardware/esp32/1.0.0/ にあるboards.txtを開きesp32.name=ESP32 Dev Moduleの項目のesp32.upload.maximum_size=3145728に書き換えて保存する。 これをしないとメモリーオーバーで書き込めません。

2)Timezoneを日本時間(JST-9)を指定する。

3)Content_on_SD_Card.zipファイルを解凍しSDカードに書き込む。

4)WiFiSSIDPassを設定する、SDカードのnetworks.txtにも記入する。

5)ESP32 DEV Module の場合GPIOの変更は必要なし。

6)必要なライブラリをMiniWebRadio.inoと同じフォルダーに入れるPDFファイル参照。

7)tft.hの#include "fonts / Times_New_Roman.h"のコメントを外します。

8)TFTコントローラはILI9341ですのでtft0)に設定。

リモコンはこのままではコードが合いませんので自分が使用するリモコンに合わせてコードを書き換えます、書き換えるファイルはIR.cppです、私のリモコンの場合下記のように書き換えました。

f:id:blogdaichan:20190103103720p:plain

リモコンのコードの確認法は以前の記事にあります、同じリモコンであれば多分このコードでいけると思います。

以上を設定してスケッチを書き込みます。

動作確認

結線を確認し電源を入れてみました。

f:id:blogdaichan:20190103103738j:plainf:id:blogdaichan:20190103103735j:plain

番組の一覧はSDカード内のstations.txtに記載されていますが内容が海外の物ばかりです、上の画像は番組内容を日本版に書換たものです。

タッチパネルの反応が悪く、また時間の表示などで文字化けみたいに表示され使い物になりませんでしたこれは検討課題です、リモコンは正常動作しますので番組の切り替え音量調節などはリモコンで出来ます。

また、ブラウザで番組の登録削除など出来ますので次回の記事で紹介します。

追 記

この記事を作成した後に Github が更新され Arduino IDE ではなく sloeber を使用した書込み方法が書かれております、この方法が書き込みやすいし Arduino IDE の設定変更も必要ありませんのでお勧めです。

実際にやってみましたが問題なく書き込めました、以後この方法で書き込んでいます。

タッチパネルの反応の悪さはディスプレイの上下反転で正常になりました、また文字化けのような症状の改善は「ESP32 Web Radio のLCD表示に時々不具合が出る」に記載しています。

書込みエラーが出た場合

対処法は、この記事にありました。

記事の中の「手動書込み」方法でで行なうと書込み出来ました。

手 順
  1. ESP32のBOOTボタンを押しっぱなしにする。
  2. ENボタンを1回押す。
  3. sloeber の書込みボタンを押す。
  4. 書込み開始の横バーが表示されたらBOOTボタンをはなす。
  5. 書込みが終了したらENボタンを1回押す。

以上です。

関連記事

blogdaichan.hatenablog.com

blogdaichan.hatenablog.com

blogdaichan.hatenablog.com

blogdaichan.hatenablog.com