以下の内容はhttps://gijin77.blog.jp/archives/2025-08.htmlより取得しました。


◆下記AliexpressでMINI ESP32-S3-N16R8 開発ボード Xiaozhi Ai 音声対話ロボットモジュール
 として販売されている物を入手して遊んでみました。
   MINI ESP32-S3-N16R8 開発ボード

 サイズが小さくて、マイク、アンプ内蔵でOLEDも接続できるコスパの良いボードです。
 これをバッテリー駆動するのとケース代わりにアクリル板でサンドイッチ上にして
 持ち運べるようにしました。
 xh-s3e-ai
 
1.バッテリ駆動にする為に、下記モジュールを使いました。
 *出力電圧で3種類ありますが、5V出力のを購入しました。
 *これは、安くて、小さいながら使いやすい物でした。
 *バッテリは、手持ちの1200mAhの物を使用しました。
 タイプ C USB TP4057 1A リチウム電池充電保護ボードモジュールポリマー電池
 TP4056 温度保護付き


 tp4057

2.ケースとして
 ①100均で透明のアクリルケースを購入して4x4.5cmサイズに切り出しました。
 xh-s3e-ai-0

 ②完成後の正面写真(下の青く光っているのが充電モジュール)
 xh-s3e-ai-F

 ➂右側より見た写真
 xh-s3e-ai-R

 ④左側より見た写真
 xh-s3e-ai-L

 ⑤後側より見た写真(こちらにスピーカを付けました。黒い四角いやつ)
 xh-s3e-ai-B

 ⑥裏側より見た写真
 xh-s3e-ai-D

 ⑦上側より見た写真(右の青いSWは、電源SWです。)
 xh-s3e-ai-U

3.GPIOピンアサイン

#define AUDIO_I2S_MIC_GPIO_WS   GPIO_NUM_4
#define AUDIO_I2S_MIC_GPIO_SCK  GPIO_NUM_5
#define AUDIO_I2S_MIC_GPIO_DIN  GPIO_NUM_6
#define AUDIO_I2S_SPK_GPIO_DOUT GPIO_NUM_7
#define AUDIO_I2S_SPK_GPIO_BCLK GPIO_NUM_15
#define AUDIO_I2S_SPK_GPIO_LRCK GPIO_NUM_16

#define BUILTIN_LED_GPIO        GPIO_NUM_48
#define BOOT_BUTTON_GPIO        GPIO_NUM_0
#define TOUCH_BUTTON_GPIO       GPIO_NUM_47
#define VOLUME_UP_BUTTON_GPIO   GPIO_NUM_40
#define VOLUME_DOWN_BUTTON_GPIO GPIO_NUM_39

#define DISPLAY_SDA_PIN GPIO_NUM_41
#define DISPLAY_SCL_PIN GPIO_NUM_42
#define DISPLAY_WIDTH   128

以上

 


ブログトップへ

◆ESP32-S3等が載っているボードを購入した時、購入時のファームウェアをバックアップ
 しておいて、いつでも元に戻せる状態にする為の、「esp32_flash_tool」を作ってみました。
 esp32_flash_tool

1.準備
 ①バッチファイルを保存する適当なフォルダを作成します。
 ②書き込みツールの「esptool.exe」を探してそのフォルダにコピペします。
  私の環境では、"C:\Users\yoshito\AppData\Local\Arduino15\packages\esp32\tools\
  esptool_py\5.0.0\esptool.exe"をコピペしました。

2.下記のバッチファイルを「1-①」のフォルダへ保存します。
 *エデッタで保存する時は、シフトJISで保存しないと、漢字表示が乱れます。
  (保障無しの自己責任で)

:esp32_flash_tool.bat
@echo off
:: ============================================
:: ESP32 / ESP32-S3 Flash Backup & Restore Tool
:: V2025/08/24 By JK1VCK
:: 必要: esptool.exe (同じフォルダに置く)
:: ============================================

setlocal ENABLEDELAYEDEXPANSION

:: バッチファイルの第1引数をバックアップファイル名に利用
if "%~1"=="" (
    set BACKUP_FILE=factory_backup.bin
) else (
    set BACKUP_FILE=%~1
)

set BAUD=460800
set PORT=COM7
set CHIP=ESP32-S3
set FLASH_SIZE=16M
set FLASH_HEX=0x1000000

:MENU
echo.
echo =================================================
echo   ESP32 Flash Backup / Restore Tool
echo                        V2025/08/24 By JK1VCK
echo =================================================
echo   バックアップファイル = %BACKUP_FILE%
echo =================================================
echo   1. ポート選択 (現在: %PORT%)
echo   2. チップ選択 (現在: %CHIP%)
echo   3. フラッシュサイズ選択 (現在: %FLASH_SIZE%=%FLASH_HEX%)
echo   4. フラッシュ全体をバックアップ
echo   5. バックアップから復元
echo   6. 自動でチップ,フラッシュサイズ取得(flash-id)
echo   7. バックアップファイル名変更
echo   8. ディレクトリ表示(dir)
echo   9. 終了
echo =================================================
set /p choice="番号を入力してください: "

if "%choice%"=="1" goto PORT_SELECT
if "%choice%"=="2" goto CHIP_SELECT
if "%choice%"=="3" goto SIZE_SELECT
if "%choice%"=="4" goto BACKUP
if "%choice%"=="5" goto RESTORE
if "%choice%"=="6" goto AUTO_SIZE
if "%choice%"=="7" goto FILE_CHANGE
if "%choice%"=="8" goto FILE_DIR
if "%choice%"=="9" exit
goto MENU

:FILE_DIR
dir
pause
goto MENU

:FILE_CHANGE
set /p BACKUP_FILE=新しいバックアップファイル名を入力してください: 
goto MENU


:PORT_SELECT
echo.
echo [接続されている COM ポートを検索中...]
setlocal enabledelayedexpansion
set COUNT=0

rem PowerShellでCOMポート一覧を取得
for /f "tokens=*" %%a in ('powershell -Command "Get-CimInstance Win32_SerialPort | ForEach-Object { $_.DeviceID + ' - ' + $_.Name }"') do (
    set /a COUNT+=1
    set PORT!COUNT!=%%a
    echo !COUNT!: %%a
)
if %COUNT%==0 (
    echo *** COMポートが見つかりません ***
    pause
    exit /b
)
set /p SEL=番号を選択してください (1-%COUNT%):
for /f "tokens=1 delims= " %%b in ("!PORT%SEL%!") do set PORT=%%b
endlocal & set PORT=%PORT%
echo 選択されたポート = %PORT%
pause
goto MENU


:CHIP_SELECT
echo.
echo 対応チップ:
echo   1. ESP32
echo   2. ESP32-S2
echo   3. ESP32-S3
echo   4. ESP32-C3
echo   5. ESP32-P4
set /p ch="番号を入力してください: "
if "%ch%"=="1" set CHIP=ESP32
if "%ch%"=="2" set CHIP=ESP32-S2
if "%ch%"=="3" set CHIP=ESP32-S3
if "%ch%"=="4" set CHIP=ESP32-C3
if "%ch%"=="5" set CHIP=ESP32-P4
goto MENU

:SIZE_SELECT
echo.
echo 代表的なフラッシュサイズ:
echo   1. 2MB  (0x200000)
echo   2. 4MB  (0x400000)
echo   3. 8MB  (0x800000)
echo   4. 16MB (0x1000000)
set /p sz="番号を入力してください: "
if "%sz%"=="1" set FLASH_SIZE=2MB & set FLASH_HEX=0x200000
if "%sz%"=="2" set FLASH_SIZE=4MB & set FLASH_HEX=0x400000
if "%sz%"=="3" set FLASH_SIZE=8MB & set FLASH_HEX=0x800000
if "%sz%"=="4" set FLASH_SIZE=16MB & set FLASH_HEX=0x1000000
goto MENU

:AUTO_SIZE
echo.
echo [フラッシュサイズを自動取得中...]
for /f "tokens=*" %%i in ('esptool.exe --port %PORT% flash-id') do (
    echo %%i

    rem チップ名を取得
    echo %%i | find "Detecting chip type..." >nul
    if not errorlevel 1 (
        for /f "tokens=4" %%a in ("%%i") do set CHIP=%%a
    )

    rem フラッシュサイズを取得
    echo %%i | find "Detected flash size:" >nul
    if not errorlevel 1 (
        for /f "tokens=4" %%a in ("%%i") do set FLASH_SIZE=%%a
    )
)
echo 検出されたチップ名 = %CHIP%
echo 検出されたフラッシュサイズ = %FLASH_SIZE%

REM MB → HEX に変換
if "%FLASH_SIZE%"=="2MB"  set FLASH_HEX=0x200000
if "%FLASH_SIZE%"=="4MB"  set FLASH_HEX=0x400000
if "%FLASH_SIZE%"=="8MB"  set FLASH_HEX=0x800000
if "%FLASH_SIZE%"=="16MB" set FLASH_HEX=0x1000000
if "%FLASH_SIZE%"=="32MB" set FLASH_HEX=0x2000000
if "%FLASH_SIZE%"=="64MB" set FLASH_HEX=0x4000000

echo 書き込みに使用するサイズ: %FLASH_SIZE% = %FLASH_HEX%
echo.
pause
goto MENU

:BACKUP
if "%PORT%"=="" (
    echo [エラー] ポートが未設定です
    pause
    goto MENU
)
if "%CHIP%"=="" (
    echo [エラー] チップが未設定です
    pause
    goto MENU
)
if "%FLASH_SIZE%"=="" (
    echo [エラー] フラッシュサイズが未設定です
    pause
    goto MENU
)
echo.
echo [バックアップ開始] → %BACKUP_FILE%
esptool.exe --chip %CHIP% --port %PORT% --baud %BAUD% read-flash 0 %FLASH_HEX% %BACKUP_FILE%
echo.
echo [バックアップ完了] → %BACKUP_FILE%
pause
goto MENU

:RESTORE
if not exist %BACKUP_FILE% (
    echo [エラー] バックアップファイル %BACKUP_FILE% が存在しません
    pause
    goto MENU
)
echo.
echo [復元開始] ← %BACKUP_FILE%
esptool.exe --chip %CHIP% --port %PORT% --baud %BAUD% write-flash 0 %BACKUP_FILE%
echo.
echo [復元完了]
pause
goto MENU
 
3.バッチファイルを起動します。
 ◆コマンドとして下記の9個が選択できます。
  1. ポート選択 (現在: COM7)
  2. チップ選択 (現在: ESP32-S3)
  3. フラッシュサイズ選択 (現在: 16M=0x1000000)
  4. フラッシュ全体をバックアップ
  5. バックアップから復元
  6. 自動でチップ,フラッシュサイズ取得(flash-id)
  7. バックアップファイル名変更
  8. ディレクトリ表示(dir)
  9. 終了

 *初期状態では、バックアップファイル名は「factory_backup.bin」となっています。
  コマンド「7」で変更できます。 
 *あるいは、バッチコマンドに引数として、ファイル名を指定して実行すると
  それが、バックアップファイル名となります。
 
 ①まず最初にボードを接続してシリアルポートを設定します。
 esp32_flash_tool-1

 ②チップを選択します。
 esp32_flash_tool-2

 ➂フラッシュサイズを選択します。
 esp32_flash_tool-3
 
 ここで、②➂を自動で取得するには、コマンド「6」を実行します。
 esp32_flash_tool-6

 ④バックアップを実行します。
 ⑤復元を実行します。

◆これにて、いつでも元に戻せる状態に出来ます。

以上



ブログトップへ

◆MicroSDに保存してあるバイナリファイルを選択して起動できる
 「Launcher」なるソフトがあることが分かり、早速試してみました。
 CYD-2432W328は、インストールして問題なく動きました。
 しかし、JC3248W535Cは、表示がおかしく動きませんでした。
 ESP32-4848S040Cは、サポートすら無いボードでした。
 サイトを見るとソースファイルが公開されていましたので、表題の2ボードを
 動くように修正して何とか動くようになりました

 Launcher_cyd_1

 Launcher_cyd_2

1.「Launcher」について
 ①下記サイトに行き、自分の持っているボードが有れば選択してインストールして
  みて下さい。
  「Launcher」

 web_launcher
 
 ②「Launcher」について詳しい使い方などは、下記「macsbug」氏のサイトを
  参照して下さい。
  macsbug CYD Launcher

2.私の場合、不具合や、そこに無いボードでしたのでソースを修正することにしました。
 ①下記サイトよりソースファイル一式(zip)をダウンロードします。
  bmorcelli/Launcher
  
3.ソースの修正にあたり、「Visual Studio Code」「PlatfomeIO」のインストールが必要です。
 私は、今までAruduinoIDE環境で開発していましたが、今回の「Launcher」は、
 「VSC」「PIO」環境で開発されていましたので、ネットで調べて開発環境を整えました。

4.ソースの修正
 ①まず、表示がおかしいJC3248W535C(CYD-3248W535)を調べてみました。
 
5.JC3248W535Cボードでのオリジナルとの比較です。
 ◆比較用のソフトは、「WinMerge」を使っています。
  下記よりダウンロード出来ます。
  WinMerge 日本語版
 
 ◆フォルダ構成(下記6個のファイルを修正しています。)
 root---platfomeio.ini
           +-src---display.cpp
           l        +-main.cpp
           l        +-tft.h
           +-boards---CYD-2432S028---interfase.cpp
                                                       +-platfomeio.ini
 ①ルートフォルダ
 ファイル比較root

 ②platfomeio.iniの修正箇所
  *元のボードをコメントアウトし、CYD-3248W535C を追加しました。
  *ライブラリのバージョンを最新にししました。
 ファイル比較root_platfomeio_ini

 ➂srcフォルダ
 ファイル比較src

 ④display.cppの修正箇所
  *Ard_eSPI を Arduino_Canvas から継承してコンストラクタを定義しました。
 ファイル比較display_cpp

 ⑤main.cppの修正箇所
  *デバッグ用に追加しました。(多分なくても良い)
 ファイル比較main_cpp

 ⑥tft.hの修正箇所
  *Ard_eSPI を Arduino_Canvas から継承してコンストラクタを定義しました。
 ファイル比較tft_h

 ⑦boardフォルダ
 ファイル比較boards

 ⑧interface.cppの修正箇所
  *タッチ操作でワンタッチでツータッチになったのでその部分を
   全部書き換えしました。
 ファイル比較interface_cpp

 ⑨platfomeio.iniの修正箇所
  *大元で指定しているのでコメントアウトしましました。
  *MicroSDカードのピン番号を追加しましました。
 ファイル比較platfomeio_ini
 
 ➉以上6個のファイルをzipにしたものです。オリジナルと交換して再ビルド
  すれば、JC3248W535C 用の「Launcher」が出来ると思います。
  (保障無しの自己責任で)  CYD-3248W535C.zip

6.ESP32-4848S040Cボードでのオリジナルとの比較です。
 ファイル比較root-4
  
 ①こちらも同様ですので、以下に修正ファイルのzipファイルを示します。
  (保障無しの自己責任で)  CYD-4848S040C.zip

7.JC3248W535Cでの実行例
 ①立ち上がり時の画面(LAUNCHERをタップ)
 Launcher_0

 ②メニュー画面(SDを選択後「SEL」をタップ)
 Launcher_1

 ➂SD内ファイル表示画面
  (実行したいbinファイルを「NEXT又はPREV」で選択して「SEL」をタップ)
 Launcher_2

 ④SDファイル操作画面
  (実行したいコマンドを「NEXT又はPREV」で選択して「SEL」をタップ)
   ◆ここではInstallを選択
 Launcher_3

 ⑤インストール中
 Launcher_4

 ⑥インストールされたbinファイルが実行されます。
 Launcher_5

8.開発環境を構築するのが大変という方に下記二つの.binファイルをzipにしたものを
  ダウンロードして下さい。

  (1)CYD-bin\CYD-3248W535C.bin
  (2)CYD-bin\CYD-4848S040C.bin
   (保障無しの自己責任で)  CYD-bin.zip
 
  ①書き込みツールは、下記よりダウンロード後解凍し
  「flash_download_tool_3.9.7.exe」を実行して、ボードへ書き込みます。
   Flash Download Tool (バージョン3.9.7) 

  ②ボードをPCへ接続します。 
  ➂起動後、「ESP32S3」選択し「OK」をクリック
 fdt397-1

  ④当該.binファイルを選択し、アドレスを「0x0」を設定
   シリアルポートを設定
 fdt397-2

  ⑤「START」をクリックすると書き込みが始まります。
 fdt397-3

  ⑥「FINISH」終了を確認し「X」で閉じます。
 fdt397-4

 ⑦ボードをリセットし再起動します。


以上 JC3248W535C ESP32-4848S040C で「Launcher」を動かす事が出来ました。

ブログトップへ

◆M5Stack Tab5 でWiFiがArduino IDE環境で使えるようになったのでインターネットラジオを
 作ってみました。
 tab5_radio2

 「M5Unified」を使うとMP3データを扱う時にドライバの競合によるエラーでリブートを
 繰り返す事象が発生しました。
 
 対策①「M5Unified」を使わず音出しが出来るようにしました。
 対策② 同じくタッチスクリーが使えるようににしました。
     これについては、下記ブログ内記事を参照して下さい。
     ・M5Stack Tab5 で「M5Unified」無しでタッチスクリーンを試してみた
      
1.対策①について最も苦労しました。
 ①Tab5で音出ししている「ES8388」のドライバをIDE環境で探す事から始めました。
  色々探していて、M5Stack オーディオモジュールで「ES8388」が使用されているのが
  分かりました。これ用のドライバで実験しましたら音を出すことが出来ました。
  下記参照
  (1)スイッチサイエンスのURL
   M5Stack オーディオモジュール(STM32G030)

  (2)本家のURL
   Module Audio

 ②ドライバを下記よりダウンロードしZIPファイルでライブラリにインストールします。
   M5モジュールオーディオ

2.参考資料等
 ①「M5Stack Tab5」について回路図等詳しくは、
   下記ブログ内記事の最後の方を参照して下さい。
  ・M5Stack TAB5 ArduinoIDE M5GFX RTC 環境でニキシー管時計もどきを表示してみた

 ②M5StackのI2Cアドレスは、下記で分かります。
  M5StackデバイスのI2Cアドレス(7ビット)

3.開発環境 2025/08/04時点
  ①Windows11 X64 Pro 24H2 
  ②Arduino IDE 2.3.6
  ➂ESP32ボードバージョンV3.3.0
  ④M5STACK Tab5 ボードバージョンV3.2.2
  ⑤M5GFX ライブラリv0.2.9
  ⑥bb_captouch ライブラリv1.3.1

4.スケッチ及びコンパイル時の設定
 ①ボード設定「M5Stack -> M5Tab5」
 ②コンパイル時設定
 tab5_ide

 ➂LCD表示用のライブラリは、「M5GFX」を使用していますが、書式として
  「Arduino_GFX_Library」に準拠するように変更しています。

 5:#include <M5GFX.h>
 
 59:M5GFX tft;
 60:LGFX_Device* gfx = &tft;  // ← これで gfx->begin() の形式が使える

 ④今回GUIに1280x720のバックグランドのイメージデータを使用して
  その上にラジオ局名、再生中データ、WiFi接続状況、時計表示をしています。

 ⑤デバッグ時にタッチ操作の範囲を確認する為、枠を表示して確認しました。
  真ん中のでっかい再生ボタンは、今回使用していません。
  次に、MP3プレイヤーを作るときに使おうと思っています。
 tab5_radio1
 
 ⑥スケッチ構成(zipファイルにて)
  (1)「tab5_inet_radio.ino」--本体スケッチ
  (2)「img_radio.h」---画像データ
  (保障無しの自己責任で)  tab5_inet_radio.zip

5.実際の実行の様子
 
 


以上


ブログトップへ



以上の内容はhttps://gijin77.blog.jp/archives/2025-08.htmlより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14