SPRESENSE All Band Radio
SPRESENSE 480×320 All Band Radio 2026.03.01
SPRESENSE 3.5″ 480×320 Display と SI4732 DSP で
ALL BAND RADIOを 製作しました。
周波数は LW ( 153 – 279 kHz ) , AM (MW) ( 520 – 1710 kHz )
SW ( 2.3 – 30.0 MHz ) , FM (VHF) ( 64 – 108 MHz ) です。

開発環境:
HARD :
SPRESENSE + SPRESENSE 拡張ボード
3.5″ 480×320 SPI ILI9341 Display Interface
SI4732 Interface
SOFT :
Arduino IDE 2.3.8
esp32 by Espressif System 3.3.7
Library / pe0mgb : SI4735-Radio-ESP32-Touchscreen-Arduino
SI473X_2.8_TFT_V3.5 を移植しました。
Library : LovyanGFX 1.2.19
Library implementation : PU2CLR Si4735 Arduino Library : 2.1.4
DUCUMENT : Si47xx PROGRAMMING GUIDE
DownLoad:
Rev 0: SPRESENSE_All_Band_Radio.zip
Mac : リンクをマウスの右ボタンでDragし「リンク先を別名で保存..」,
[xx.zip_.pdf]のpdfを削除し.zipにし変換します。
Windows : Please see below
How to Download a WordPress Website – Step-by-Step Guide | MacsBug
製作:
🟢 GAME with SPRESENSE:3.5″ 480×320 LCD Interface の記事です。
回路図、LCD Interface 基板、部品リスト、工作 が記載されています。
| LCD Interface, LCD Side | LCD Interface |
|
|
🟢 SPRESENSE FM RADIO:SI4732 DSP FM RADIO の記事です。
回路図、製作、部品リスト が記載されています。
SI4732 Board は PCBWAY 又は aitendo の2つがあります。
PCBWAY:Making the SI4732 board を参照ください。

| LCD と SI4232 Interface | Spresens 拡張 borad |
|
|
🟢 480×320 All Band Radio:480×320 Size All Band Radio の記事です。
HARD、移植、操作方法、アンテナ、移植 が記載されています。


移植メモ:
ESP32 では データー保存の為に EEPROM を使用しています。
SPRESENSE は EEPROM を使用できますが 今回 使用していません。
EEPROMの部分はコメントアウトしてあります。
必要な場合は コメントアウトを削除し 追加修正をしてください。
受信;🟢 受信するには バンドに対応したアンテナが必要です。
AM :
Donut AM Antenna(500kHz-2000kHz) や Rod ANTENNA(60cm)で受信できました。
594KHz NHK in japan は受信できました。
Outdoors 595KHz:
Rod antenna(60cm) : RSSI=60dBmV,SNR=15dB
Donut AM Antenna : RSSI=68dBmV,SNR=25dB
Indoor 595KHz:
Donut AM Antenna : RSSI=33dBmV,SNR=9dB。
FM :
Rod ANTENNA (60cm) や Donut WB Antenna(10kHz-180MHz)で受信できました。
80.00MHz TOKYO FM in japan は受信できました。
Outdoors 80.00MHz:
Rod antenna(60cm) : RSSI=62dBmV,SNR=32dB
Donut WB Antenna : RSSI=47dBmV,SNR=30dB
Indoor 80.00MHz:
Rod antenna(60cm) : RSSI=53dBmV,SNR=18dB
Donut WB Antenna : RSSI=43dBmV,SNR=16dB。
SW : 短波
Donut SW Antenna L(4MHz-12Mkz) で受信できました。
6.055MHz JOZ2 Radio NIKKEI No1 in japan は受信できました。
Outdoors 6.055MHz:
Donut SW Antenna L : RSSI=50dBmV,SNR=19dB
6.115MHz Radio NIKKEI No2 in japan は受信できました。
Outdoors 6.115MHz:
Donut SW Antenna L : RSSI=45dBmV,SNR=18dB
ラジオNIKKEI第1:終日6.055MHz。[補完] 3.925MHz、9.595MHz
ラジオNIKKEI第2:6.115MHz(8:00~19:00),3.945MHz(19:00~23:00),[補完] 9.760MHz
短波用やアマチュア無線用の大きなアンテナが必要です。
アマチュア無線は 周波数を捉えにくく受信できません。
Arduio IDE 環境:
//===================================================================== // Dev environment : Arduino IDE 2.3.8 // esp32 by Espressif Systems : 3.3.7 //--------------------------------------------------------------------- // HARD : Spresense // HARD : Spresense Expantion Board // HARD : 3.5inch 480x320 ILI9488 SPI Display XPT2046 Touch // HARD : LCD Interface : GAME with SPRESENSE : Some wiring changes // https://macsbug.wordpress.com/2024/03/24/game-with-spresense/ //===================================================================== // Spresense I2C : https://qiita.com/TaroYoshino/items/eccb6793888db0c96d96 //===================================================================== // Library / pe0mgb : SI4735-Radio-ESP32-Touchscreen-Arduino // : SI473X_2.8_TFT_V3.5 // https://github.com/pe0mgb/SI4735-Radio-ESP32-Touchscreen-Arduino // PU2CLR Si4735 Arduino Library : 2.1.4 // https://pu2clr.github.io/SI4735/extras/apidoc/html/index.html // Library : LovyanGFX 1.2.19 // : https://github.com/lovyan03/LovyanGFX/ //=====================================================================
Arduio IDE 設定:
//===================================================================== // Dev environment : Arduino IDE 2.3.8 //--------------------------------------------------------------------- // Board : “Spresense" // Upload Speed : “115200” // Core : "MainCore" // Memory : "768 KB (Default)" // Port : “/dev/cu.usbserial-8340” //=====================================================================
感想:
プログラム開発:
480×320 All Band Radio から SPRESENSE版に移植しました。
画面サイズ 480×320 は 見やすいです。
画面は大きく タッチ操作で 機能追加も容易です。
ESP32では EEPROMを使用しています。
SPRESENSEのEEPROMは 使用可能ですが、未調査の為に コメントアウトしました。
SI4732 価格:
低価格の販売店を探してください。
ANTENNA:
SI4732のアンテナは 50Ωより高いと聞いています。
接続するアンテアは 50Ωで インピーダンスは 合っていません。
FM1 アンテナに直列接続する Capacitorの多くの事例は 1nFです。
結果的に インピーダンスはマッチしないものの 100pF が容易です。
SPRESENSE , SI4732 , ALL BAND RADIO , 3.5″ 480×320 ILI9488 Display ,
M5Stack ALL BAND RADIO
M5Stack ALL BAND RADIO 2026.02.26
M5Stack と SI4732 DSP で ALL BAND RADIOを 製作しました。

ALL BAND は 以下の周波数です。
LW band support ( 153 – 279 kHz )
AM (MW) band support ( 520 – 1710 kHz )
SW band support ( 2.3 – 30.0 MHz )
FM (VHF) support ( 64 – 108 MHz )
M5 Core SI4732 FM RADIO の解説は M5Stack FM Radio です。
M5 Core2 SI4732 FM RADIO の解説は M5Core2 All Band Radio です。
開発環境:
HARD:M5Stack Core
HARD:Use ILI9488 with M5Stack:3.5″ 480×320 TFT ILI9488 Display
Arduino IDE 2.3.8
esp32 by Espressif System 3.3.7
M5Stack 2.1.4 : 🔴 ver 3 以下でないと #include rom/miniz.h でエラーが出ます。
Library / pe0mgb : SI4735-Radio-ESP32-Touchscreen-Arduino
🟢 SI473X_2.8_TFT_V3.5 を移植しました。
Library : LovyanGFX 1.2.19
PU2CLR Si4735 Arduino Library : 2.1.4:Libraryの説明。
DUCUMENT: Si47xx PROGRAMMING GUIDE
DownLoad:
Rev 0:M5_All_Band_Radio.zip
Mac : リンクをマウスの右ボタンでDragし「リンク先を別名で保存..」,
[xx.zip_.pdf]のpdfを削除し.zipにし変換します。
Windows : Please see below
How to Download a WordPress Website – Step-by-Step Guide | MacsBug
操作方法:
🟢 480×320 All Band Radio:480×320 Size All Band Radio の記事です。
HARD、移植、操作方法、移植 が記載されています。


製作:
M5Stackの基本:
🟢 Use ILI9488 with M5Stack
3.5″ 480×320 TFT ILI9488 Display と M5Stack の記事です。
🟢 M5Stack FM Radio:SI4732 Interface の記事です。
回路図、SI4732Interface 基板、製作、部品リスト が記載されています。


SI4732 Board は 🟢 Making the SI4732 board を参照ください。

Arduio IDE 設定:
//===================================================================== // Dev environment : Arduino IDE 2.3.8 // Board Manager : esp32 by Espressif SysteMM 3.1.7 //. M5Stack : 2.1.4 //--------------------------------------------------------------------- // Board : “M5 Core” // Port : “/dev/cu.usbserial-015E6CC3” //--------------------------------------------------------------------- // CPU Frequency : “240MHz (Wifi/BT)” // Core Debug Level : “None” // USB DFU On Boot : “Disabled” // Eraze All Flash Before Sketch Upload : "Disable" // Events Run On : “Core 1” // Flash Frequency : “80MHz” // Flash Mode : “QIO” // Flash Size : “4MB (32Mb)” // JTAB Adapter : "Disable" // Arduino Runs On : “Core 1” // Partition Scheme : “Huge APP (3MB No OTA/1MB SPIFFS)” // Upload Speed : “1500000” //=====================================================================
感想:
プログラム開発:
480×320 All Band Radio から M5Stack ILI9488に移植しました。
画面サイズ 480×320 は 見やすいです。
画面は大きく タッチ操作で 機能追加も容易です。
SI4732 価格:
低価格の販売店を探してください。
ANTENNA:
SI4732のアンテナは 50Ωより高いと聞いています。
接続するアンテアは 50Ωで インピーダンスは 合っていません。
FM1 アンテナに直列接続する Capacitorの多くの事例は 1nFです。
結果的に インピーダンスはマッチしないものの 100pF が容易です。
M5Stack , SI4732 , ALL BAND RADIO , 3.5″ 480×320 ILI9488 Display ,
480×320 All Band Radio
480×320 サイズの All Band Radio を製作しました。 ORG . 2026.02.20
構成は 4“ 480×320 と 3.5” 480×320 と SI4732 DSP です。



![]() |
BROAD をタッチした表示 : FW から SW までの Switch |
|
|
CYD は 5種類 あります。
CYD 4.0 inch は 4.0″ LCD display (4.0″ 320×480 ST7796 with Touch) です。
CYD 3.5 inch は ESP32-3248S035R (3.5″ 320×480 ILI9341 with Touch) です。
Library は PU2CLR / SI473X_2.8_TFT_V3.5 を 移植しました。
移植:操作は 全てタッチで行います。
汎用:LCDサイズが 320×480 ならば 他のLCDでも Driverの変更で使用できます。
ALL BAND は 以下の周波数です。
LW band support ( 153 – 279 kHz )
AM (MW) band support ( 520 – 1710 kHz )
SW band support ( 2.3 – 30.0 MHz )
FM (VHF) support ( 64 – 108 MHz )
開発環境:
Hard :
3.5″は 🟢 ESP32-3248S035R FM Radio のボードを使用しました。
ESP32-3248S035R、回路図、SI4732 Board の詳細が書かれています。
FMアンアテナは配線されています。AMアンテナも配線が必要です。
4.0″は 3.5″と同じ回路で、基板サイズを 4.0″サイズにしました。

Hard :
SI4732 Board は 🟢 Making the SI4732 board を参照ください。
CYDは GPIOが少ない為に SI4732 RESET端子は CRで行い 配線を省略しています。
3.5″:IO_22=SI4732-SDA, IO_16=SI4732-SCL, IO_27=SI4732-RST
4.0″:IO_32=SI4732-SDA, IO_25=SI4732-SCL, IO_16=SI4732-RST

参照 : ESP32-2432S028R, 240×320 SPI ILI9341 LCD with Touch and SI4732 Board
🟢 CYD FM Radio
SOFT:
Dev environment : Arduino IDE 2.3.6
Board Manager : esp32 by Espressif System 3.3.6
移植:オリジナルは PU2CLR SI473X_2.8_TFT_V3.5
1. CYD 3.5″ ESP32-3248S035R と CYD 4.0″ LCD へ移植。
2. Encoder と Swicth は タッチ操作に変更。
DownLoad:
Rev 0:CYD_3.5_All_Band_Radio.zip
Rev 0:CYD_4_All_Band_Radio.zip
Mac : リンクをマウスの右ボタンでDragし「リンク先を別名で保存..」,
[xx.zip_.pdf]のpdfを削除し.zipにし変換します。
Windows : Please see below
How to Download a WordPress Website – Step-by-Step Guide | MacsBug
移植と追加機能:
移植:プログラムの特徴:詳細は リンク先を参照ください。
無線の状態は ESP32の EEPROM に保存されます。
7 SEG Fontは DSEG7_34.h から LovyannGFX内蔵の DejaVu72 を使用。
注意:オリジナルは 未完成な所もありますが そのまま移植しました。
注意:移植は オリジナルが膨大な為に 不足な部分があるかもしれません。
注意:全ての周波数を 正しい表示 及び 受信できるか 試せていません。
追加機能:
周波数操作;周波数は 各桁毎に +1 UP 又は -1 DOWN できます。
右のスライドバーは UP 又は DOWN を 1〜9 の幅で 大きく操作できます。
周波数SCAN : 以下をScanし RSSIをグラフ表示します。
ScanFM:76.00 – 108.00 MHz
ScanAM:520.00–1710.00 KHz
ScanSW:2.3 – 30.0 MHz
Scan操作:Scan下をスライドし選択すると周波数を支持し表示します。
ボタン操作:
画面のボタンは 2画面でしたが 1画面にしました。
Push時にボタンの色と文字の色を変化させ 見やすくしました。
操作方法:左側から説明します。(Freq = Frequency)
1. Scan実施後 Scan Select部をスライドすると Scan部の周波数を表示します。
2. Freq部(7箇所)をPushすると周波数を +1 又は -1 します。
3. Freq表示の下(Scanエリア)をタッチし 変更するFreqを選択します。
Freqの下に 白い枠が表示されます。
右端のFreq up 又は Freq down のスライドバーで 1〜9 までの量で
Freqを速く変更できます。
4. MHz + を Push し + 又は – にします。各操作で + 又は – の動作をします。
5. Volume down をタッチすると Volumeは -1 低下します。
Volume up をタッチすると Volumeは +1 増加します。最大は 63です。
6. PRESETをタッチすると 設定された Freq と Station name が表示されます。
再度タッチすると次が表示されます。戻すときは MHz + を MHz – にします。
決定は FREQをタッチします。

BUTTON and FUNCTION :
| No. | Button | Function |
| 0 | ![]() |
MUTE : ON/OFF Audio出力の ON 又は OFF |
| 1 | ![]() |
AGC : ON/OFF |
| 3 | ![]() |
Registered frequency : 登録周波数を表示 PRESET Pushで 次の登録周波数 FREQ Pushで 周波数設定 |
| 2 | ![]() |
STEP : Non-FM : 1KHz,5KHz,9KHz,10KHz FM : 200KHz,100KHz,10KHz |
| 4 | ![]() |
RDS : 受信 ON / OFF |
| 5 | ![]() |
BFO : ON/OFF |
| 6 | ![]() |
HAM BAND : BEACON,630M,160M,80M,60M,40M, 30M,20M,17M,15M,12M,10M |
| 7 | ![]() |
AGCSET : 0 to 26 |
| 8 | ![]() |
LSB,USB,AM,CW : |
| 9 | ![]() |
Frequency Settings : |
| 10 | ![]() |
DISPL : LCD Brightness |
| 11 | ![]() |
STATUS : Software version, setup Infomation |
| 12 | ![]() |
BROAD : FM,LW,MW,120M,90M,75M,49M,41M,31M, 25M,22M,19M,16M,15M,13M,11,CB,SW |
| 13 | ![]() |
AM Filter in KHz : 1.0,1.8,2.0,2.5,3.0,4.0,6.0 FM Filter in KHz : AUT,110,84,60,40 USB Filter in KHz : 0.5,1.0,1.2,2.2,3.0,4.0 |
| 14 | ![]() |
ScanFM : 76.0 to 108.0 MHz 76 〜 108MHZ の受信(RSSI)を グラフ表示 |
| 15 | ![]() |
ScanAM : 520 to 1710 KHz 520〜1710KHz の受信(RSSI)状態を グラフ表示 |
| 16 | ![]() |
ScanSW : 2.3 to 30.0 MHz 2.3〜30.0MHz の受信(RSSI)状態を グラフ表示 |
| 17 | ![]() |
CHIP : Firmware Infomation |
| No. | Button | Function |
| 2 | ![]() |
Non-FM : 1KHz,5KHz,9KHz,10KHz |
|
||
| 2 | ![]() |
FM : 200KHz,100KHz,10KHz |
|
||
| 6 | ![]() |
ten key : |
|
||
| 9 | ![]() |
HAM BAND : BEACON,630M,160M,80M,60M,40M, 30M,20M,17M,15M,12M,10M |
|
||
| 12 | ![]() |
FM,LW,MW,120M,90M,75M,49M,41M,31M, 25M,22M,19M,16M,15M,13M,11,CB,SW |
|
||
| 13 | ![]() |
CW Filter in kHz |
|
||
| 13 | ![]() |
FM Filter in kHz |
|
||
| 13 | ![]() |
LSB Filter in kHz |
|
||
| 13 | ![]() |
USB Filter in kHz |
|
||
| 13 | ![]() |
AM Filter in kHz |
|
||
![]() |
Software version setup Infomation |
![]() |
CHIP Infomation |
![]() |
![]() |
||
受信;🟢 受信するには バンドに対応したアンテナが必要です。
AM :
Donut AM Antenna(500kHz-2000kHz) や Rod ANTENNA(60cm)で受信できました。
594KHz NHK in japan は受信できました。
Outdoors 595KHz:
Rod antenna(60cm) : RSSI=60dBmV,SNR=15dB
Donut AM Antenna : RSSI=68dBmV,SNR=25dB
Indoor 595KHz:
Donut AM Antenna : RSSI=33dBmV,SNR=9dB。
FM :
Rod ANTENNA (60cm) や Donut WB Antenna(10kHz-180MHz)で受信できました。
80.00MHz TOKYO FM in japan は受信できました。
Outdoors 80.00MHz:
Rod antenna(60cm) : RSSI=62dBmV,SNR=32dB
Donut WB Antenna : RSSI=47dBmV,SNR=30dB
Indoor 80.00MHz:
Rod antenna(60cm) : RSSI=53dBmV,SNR=18dB
Donut WB Antenna : RSSI=43dBmV,SNR=16dB。
SW : 短波
Donut SW Antenna L(4MHz-12Mkz) で受信できました。
6.055MHz JOZ2 Radio NIKKEI No1 in japan は受信できました。
Outdoors 6.055MHz:
Donut SW Antenna L : RSSI=50dBmV,SNR=19dB
6.115MHz Radio NIKKEI No2 in japan は受信できました。
Outdoors 6.115MHz:
Donut SW Antenna L : RSSI=45dBmV,SNR=18dB
ラジオNIKKEI第1:終日6.055MHz。[補完] 3.925MHz、9.595MHz
ラジオNIKKEI第2:6.115MHz(8:00~19:00),3.945MHz(19:00~23:00),[補完] 9.760MHz
短波用やアマチュア無線用の大きなアンテナが必要です。
アマチュア無線は 周波数を捉えにくく受信できません。
|
Donut AM Antenna 500kHz-2000kHz |
Donut SW Antenna 4MHz-24MHz |
Donut BW Antenna 10k-180MHz |
![]() |
![]() |
![]() |
Program notes:
Touch Area;
周波数やVolimeの為のタッチアエリアを表示するには
以下の //frame(); のコメントを削除すると 画面に範囲を表示します。
画像の緑の枠がタッチアエリアです。
void setup(){
vol_disp(); // macsbug
//frame(); // touch area
}// end of setup //
Preset Frequency:登録周波数
以下の設定を変更する事により 他の周波数が可能です。
FM_Preset preset[] = {
8000 , "TOKYO FM", // 00 West // macsbug
7650 , "InterFM765", // 00 West // macsbug
8830 , "J-WAVE", // 00 West // macsbug
8930 , "West", // 00 West
8970 , "InterFM897 T", // 00 West // macsbug
9050 , "TBS RADIO", // 00 West // macsbug
9160 , "Bunka Broadcast", // // macsbug
9300 , "NPO R1", // 01 Nippon Broadcast // macsbug
9260 , "NPO R2", // 02 NPO R2
9680 , "NPO R3-FM", // 03 NPO R3-FM
9470 , "NPO R4", // 04 NPO R4
9340 , "RIJNMOND", // 05 RIJNMOND
9050 , "SUBLIME", // 06 SUBLIME
9130 , "BNR", // 07 BNR
9520 , "SLAM", // 08 SLAM
9620 , "ZFM", // 09 ZFM
9760 , "DECIBEL", // 10 DECIBEL
10040 , "QMUSIC", // 11 QMUSIC
10150 , "SKYRADIO", // 12 SKYRADIO
10270 , "RADIO 538", // 13 RADIO 538
10320 , "VERONICA", // 14 VERONICA
10380 , "RADIO 10", // 15 RADIO 10
10460 , "100% NL", // 16 100% NL
//9220 , "L-FM", // 17 L-FM
10760 , "FEELGOOD" // 18 FEELGOOD Radio
};
Touch 操作:
配列に Touch Area の X,Y, widht, high の範囲を設定します。
範囲に対応した Tb 0,1,2,,, ができます。
touch.ino に Tb 0,1,2,,, に対応する処理を記載します。
例:4 __.__X.__ FREQ
int c[14][5]={ // touch point table
// 0X, 1Y, 2X, 3Y Tb 01.234.56
{ 4, 26, 31, 69}, // 0 X_.___.__ FREQ
{ 36, 26, 31, 69}, // 1 _X.___.__ FREQ
{ 68, 26, 31, 69}, // 2 __.X__.__ FREQ
{100, 26, 31, 69}, // 3 __._X_.__ FREQ
{132, 26, 31, 69}, // 4 __.__X.__ FREQ
{176, 26, 31, 69}, // 5 __.___.X_ FREQ
{208, 26, 31, 69}, // 6 __.___._X FREQ
{245, 26, 75, 57}, // 7 MHz + , MHz -
{322, 26, 40, 68}, // 8 Volume -
{361, 26, 40, 68}, // 9 Volume +
{ 0, 135,240, 34}, //10 frequency scan select
{ 0, 0, 10, 10}, //11 Re-Boot
{440, 0, 40,160}, //12 freq up/dn vertical
{ 0, 101,240, 33} //13 freq select horizontal
};
touch.ino
void touch(){ //
if (tft.getTouch(&tX, &tY)){ //
float cf = currentFrequency; //
float ic = 0.0; //
//----------------------------------------------------------
//----------------------------------------------------------
// 0 : X_.___.__ : frequency change : 周波数設定 ------------
if(Tb(0)){ // X_.___.__
if ( ba == "FM" ){ ic = 1000000;} // FM
if ( ba == "SW" ){ ic = 10000;} // SW
if ( ba == "LW" ){ ic = 10000;} // LW
if ( ba == "MW" ){ ic = 10000;} // MW
if ( pm){cf=cf+ic;} // plus
if (!pm){cf=cf-ic;} // minus
if (cf >= 100000){cf=cf-ic;} // max
tft.fillRect(c[0][0],c[0][1],c[0][2],c[0][3],BG);
si4735.setFrequency(cf); // si4732 set frequency
disp_freq(cf,cm); // MHz or KHz display
delay(250); return;} //
//----------------------------------------------------------
Button Area , table , number;
移植:
オリジナルのボタンサイズ 80×40(3200byte) を 80×50に変更しました。
データーの中央部分を10行増やし 80×50(4000byte) にしています。
Button size;80×50 で構成されています。

Button Layout は 名前と button No. 0-17 で表示されます。 例:MUTE=0
変更例:MUTE を XXX に変更すると 表示が変わります。
{ "MUTE" , 0 , 80, 50 , 0, 170}, // 0
{ "AGC" , 1 , 80, 50 , 80, 170}, // 1
{ "STEP" , 2 , 80, 50 , 160, 170}, // 2
{ "PRESET", 3 , 80, 50 , 240, 170}, // 3
{ "RDS" , 4 , 80, 50 , 320, 170}, // 4
{ "BFO" , 5 , 80, 50 , 400, 170}, // 5
{ "HAM" , 6 , 80, 50 , 0, 220}, // 6
{ "AGCSET", 7 , 80, 50 , 80, 220}, // 7
{ "MODE" , 8 , 80, 50 , 160, 220}, // 8
{ "FREQ" , 9 , 80, 50 , 240, 220}, // 9
{ "DISPL" , 10 , 80, 50 , 320, 220}, // 10
{ "STATUS", 11 , 80, 50 , 400, 220}, // 11
{ "BROAD" , 12 , 80, 50 , 0, 270}, // 12
{ "BANDW" , 13 , 80, 50 , 80, 270}, // 13
{ "ScanFM", 14 , 80, 50 , 160, 270}, // 14
{ "ScanAM", 15 , 80, 50 , 240, 270}, // 15
{ "ScanSW", 16 , 80, 50 , 320, 270}, // 16
{ "CHIP" , 17 , 80, 50 , 400, 270} // 17
// button Layout w
// |<-80->|<-80->|<-80->|<-80->|<-80->|<-80->| h
// |------|------|------|------|------|------|---
// | 0 | 1 | 2 | 3 | 4 | 5 | ^ button No.
// | MUTE | AGC | STEP |PRESET| RDS | BFO | 50 Nomen
// |------|------|------|------|------|------|---
// | 6 | 7 | 8 | 9 | 10 | 11 | ^ button No.
// | HAM |AGCSET| MODE | FREQ |DISPL |STATUS| 50 Nomen
// |------|------|------|------|------|------|---
// | 12 | 13 | 14 | 15 | 16 | 17 | ^ button No.
// |BROAD |BANDW |ScanFM|ScanAM|ScanSW| CHIP | 50 Nomen
// |------|------|------|------|------|------|---
ボタン画像データーと操作;
ボタンの色は Black,Blue,Green,Red,Amber
ボタンのサイズは 80×50 です。
spr.createSprite(80,50); spr.fillScreen(BG);
draw_1_Button(“Red”);
spr.drawString(bb[n].Bbandname,40,25,1);
spr.pushSprite(bb[n].BbbandX, bb[n].BbbandY);
spr.deleteSprite();
1. createSprite(80,50) で ボタンサイズを設定。
2. draw_1_Button(“Red”) で ボタンを設定。
3. drawString で 文字を設定。
4. pushSprite で ボタンに文字を重ねて表示。
5. deleteSprite で Spriteを削除。
Ardui IDE : 設定
//===================================================================== // Dev environment : Arduino IDE 2.3.6 // Board Manager : esp32 by Espressif SysteMM 3.3.6 //--------------------------------------------------------------------- // Board : “ESP32 Dev Module” // Port : “/dev/cu.usbmodem83401” //--------------------------------------------------------------------- // CPU Frequency : “240MHz (Wifi)” // Core Debug Level : “None” // USB DFU On Boot : “Disabled” // Eraze All Flash Before Sketch Upload : "Disable" // Events Run On : “Core 1” // Flash Frequency : “80MHz” // Flash Mode : “QIO” // Flash Size : “4MB (32Mb)” // JTAB Adapter : "Disable" // Arduino Runs On : “Core 1” // Partition Scheme : “Huge APP (3MB No OTA/1MB SPIFFS)” // PSRAM : “Disabled” // Upload Mode : “UART0 / Hardware CDC” // Upload Speed : “460800” // Zigbee Mode : “Disabled” //--------------------------------------------------------------------- // Library / pe0mgb : SI4735-Radio-ESP32-Touchscreen-Arduino // : SI473X_2.8_TFT_V3.5 // https://github.com/pe0mgb/SI4735-Radio-ESP32-Touchscreen-Arduino // PU2CLR Si4735 Arduino Library : 2.1.4 // https://pu2clr.github.io/SI4735/extras/apidoc/html/index.html // Library : LovyanGFX 1.2.19 // : https://github.com/lovyan03/LovyanGFX/ //=====================================================================
感想:
SI4732の多数の機能を使用した オリジナルに基づき 移植しました。
スイッチとエンコーダーの工作は 面倒です。
スイッチとエンコーダーを使用せず タッチ操作で完結しています。
オリジナルは 良く出来ているソフトです。
キーボードの管理と 多数のモードがあり 複雑になっています。
私には 内容が膨大で複雑です。
表示が不完全な場合があるかもしれません。
必要に応じて随時 修正する予定です。
オリジナルのソフトのメモ;
SEEKUP,SEEKDNは 周波数が変化するのみで意味がありません。
対応:削除し ScanFM, ScanAM, ScanSW にしました。
RSSIの数値とグラフの位置が合っていない。
対応;補正をしましたが ピッタリではない。
ボタン操作:ボタンを押した表現が無く分かりずらい。
対応;ボタンの基本の色は そのまま Blue 表示。文字の色は Yellow。
対応;ボタンを押した時は Red のボタンを表示。文字の色は Green。
対応;ボタンが機能している時は Amberボタン。文字の色は Green。
SI4735のプログラム仕様書は 膨大で把握が大変です。
理解し 使いこなせば 素晴らしい受信機ができます。
海外では 上記のオリジナルを使用し アレンジされた作品があります。

CYD , ESP32-2432S-28R , ESP32 , PU2CLR , SI473X_2.8_TFT_V3.5 ,
SI4732 ,
M5Core2 All Band Radio
M5Core2 と SI4732 DSP で All Band Radio ORG:2026.02.01
Rev.1 : 2025.02.14 : MW input add
M5Core2 は 2″ 240×320 LCD と ESP32 with Touch です。
SI4732 DSP は FM/AM/SW/LW Band Receiver です。
Library は PU2CLR / SI473X_2.8_TFT_V3.5 を 使用しました。
上記を移植した CYD 2.8″ All Band Radio (240×320) を M5Core2へ移植しました。
移植:全て タッチ操作で行います。

| First screen | Second screen |
![]() |
![]() |
プログラムの特徴:詳細は リンク先を参照ください。
LW band support ( 153 – 279 kHz )
AM (MW) band support ( 520 – 1710 kHz )
SW band support ( 2.3 – 30.0 MHz )
FM (VHF) support ( 64 – 108 MHz )
Radioの状態は ESP32の EEPROM に保存されます。
SCAN機能 追加:FM (76.00–108.00 MHz) をScanし RSSIをグラフ表示します。
注意:オリジナルは 未完成な所もありますが そのまま移植しました。
注意:移植は オリジナルが膨大な為に 不足な部分があるかもしれません。
注意:M5Core2は 画面が小さく指先では 操作しにくいです。
移植と追加機能:
全ての周波数を 正しい表示 及び 受信できるか 試せていません。
SCAN:76.0 〜 108.00 MHZ の受信(RSSI)を グラフ表示。
ボタン動作:Push時の表示を見やすくしました。
Screnn Shot:画面をSDに保存する事ができます。
受信; 🟢 受信するには バンドに対応したアンテナが必要です。
1. FM受信:画像の様なアンテナでも受信できます。
Rod ANTENNA (60cm) や Donut WB Antenna(10kHz-180MHz)で受信できました。
80.00MHz TOKYO FM in japan は受信できました。
Outdoors 80.00MHz:
Rod antenna(60cm) : RSSI=62dBmV,SNR=32dB
Donut WB Antenna : RSSI=47dBmV,SNR=30dB
Indoor:
Rod antenna(60cm) : RSSI=53dBmV,SNR=18dB
Donut WB Antenna : RSSI=43dBmV,SNR=16dB。

2. AM受信:
NHK 東京 (ラジオ第1:594kHz、ラジオ第2:693kHz)
Donut AM Antenna(500kHz-2000kHz) や Rod ANTENNA(60cm)で受信できました。
594KHz NHK in japan は受信できました。
Outdoors 595KHz:
Rod antenna(60cm) : RSSI=60dBmV,SNR=15dB
Donut AM Antenna : RSSI=68dBmV,SNR=25dB
Indoor:
Donut AM Antenna : RSSI=33dBmV,SNR=9dB。
3. 短波受信:
Donut SW Antenna L(4MHz-12Mkz) で受信できました。
6.055MHz JOZ2 Radio NIKKEI No1 in japan は受信できました。
Outdoors 6.055MHz:
Donut SW Antenna L : RSSI=50dBmV,SNR=19dB
6.115MHz Radio NIKKEI No2 in japan は受信できました。
Outdoors 6.115MHz:
Donut SW Antenna L : RSSI=45dBmV,SNR=18dB
ラジオNIKKEI第1:終日6.055MHz。[補完] 3.925MHz、9.595MHz
ラジオNIKKEI第2:6.115MHz(8:00~19:00),3.945MHz(19:00~23:00),[補完] 9.760MHz
短波用やアマチュア無線用の大きなアンテナが必要です。
アマチュア無線は 周波数を捉えにくく受信できません。
|
Donut AM Antenna 500kHz-2000kHz |
Donut SW Antenna 4MHz-24MHz |
Donut BW Antenna 10k-180MHz |
![]() |
![]() |
![]() |
開発環境:
M5Stack : M5Unified
Dev environment : Arduino IDE 2.3.6
Board Manager : esp32 by Espressif System 3.3.6
Hard : SI4732 Board は Making the SI4732 board を参照ください。
Hard : 240×320 LCD は CYD FM Radio (ESP32-2432S028R) を参照ください。
移植:オリジナルは PU2CLR SI473X_2.8_TFT_V3.5
2.8″ ESP32-2432S028R へ移植し 次は M5Core2 へ移植。
DownLoad:Rev.1 : MW input add : 2026.02.14
M5core2_All_Band_Radio.zip:WordPress
Mac : リンクをマウスの右ボタンでDragし「リンク先を別名で保存..」,
[xx.zip_.pdf]のpdfを削除し.zipにし変換します。
Windows : Please see below
How to Download a WordPress Website – Step-by-Step Guide | MacsBug
回路図:
Hard : 🟢 M5Stack FM Radio (M5Stack Core) を参照ください。
Hard : 🟢 CYD FM Radio (ESP32-2432S028R と SI4732 Board) を参照ください。
Hard : 🟢 SI4732 Board は Making the SI4732 board を参照ください。

配線:

実装:M5Stack FM Radio


実装:Making the SI4732 board

BUTTON and FUNCTION :
| No. | Button | Function |
| 1 | ![]() |
MUTE : ON/OFF Audio出力の ON 又は OFF |
| 2 | ![]() |
AGC : ON/OFF |
| 3 | ![]() |
Registered frequency : 登録周波数を表示 PRESET Pushで 次の登録周波数 FREQ Pushで 周波数設定 |
| 4 | ![]() |
STEP : |
| 5 | ![]() |
HAM BAND : BEACON,630M,160M,80M,60M,40M, 30M,20M,17M,15M,12M,10M |
| 6 | ![]() |
AGCSET : 0 to 26 |
| 7 | ![]() |
Frequency Settings : |
| 8 | ![]() |
LSB,USB,AM,CW : |
| 6 | ![]() |
BROAD : FM,LW,MW,120M,90M,75M,49M,41M,31M, 25M,22M,19M,16M,15M,13M,11,CB,SW |
| 10 | ![]() |
SCAN : 76.0 to 108.0 MHz 76 〜 108MHZ の受信(RSSI)を グラフ表示 |
| 11 | ![]() |
AM Filter in KHz : 1.0,1.8,2.0,2.5,3.0,4.0,6.0 FM Filter in KHz : AUT,110,84,60,40 USB Filter in KHz : 0.5,1.0,1.2,2.2,3.0,4.0 |
| 12 | ![]() |
to PREV screen |
| No. | Button | Function |
| 1 | ![]() |
RDS : 受信 ON / OFF |
| 9 | ![]() |
BFO : ON/OFF |
| 3 | ![]() |
SCAN2 : 76.0 to 108.0 MHz 76〜108MHz の受信(RSSI)状態を グラフ表示 |
| 4 | ![]() |
DISPL : |
| 5 | ![]() |
SEEK UP : 87.50 to 107.90 周波数が変化するのみで機能はありません |
| 6 | ![]() |
opt5 : Spare |
| 7 | ![]() |
STATUS : Software version, setup Infomation |
| 8 | ![]() |
CHIP : Firmware Infomation |
| 9 | ![]() |
SEEK DOWN : 107.90 to 87.50 周波数が変化するのみで機能はありません |
| 10 | ![]() |
opt4 : Spare |
| 11 | ![]() |
opt2 : Spare |
| 12 | ![]() |
PREV : to Firast display |
|
周波数:緑の数値部をTouchし変更。 MHzをPush。MHz+は増加。MHz-は低下。 Volume:左側で低下。右側で増加 |
![]() |
FM:76.0 to 108.0 MHz 周波数と感度をグラフ表示 グラフの下で周波数の位置表示 |
|
![]() |
![]() |
||
![]() |
Preset Frequency:登録周波数 PRESETボタンで 次の周波数表示 FREQボタンで 周波数を決定 |
![]() |
Frequency Input テンキーで周波数を入力 |
![]() |
![]() |
||
![]() |
HAM BEACON,630M,,10Mを選択 |
![]() |
BROAD FM,LW,MW,,11M,CB,SWを選択 |
![]() |
![]() |
||
![]() |
AM Filter in KHz 1.0,1.8,,4.0,6.0 を選択 |
![]() |
FM Filter in KHz AUT,110,84,60,40 を選択 |
![]() |
![]() |
||
![]() |
USB Filter in KHz 0.5,1.0,,3.0,4.0 を選択 |
![]() |
MODE LSB,USB,AM,CW を選択 |
![]() |
![]() |
||
![]() |
Software version setup Infomation |
![]() |
CHIP Infomation |
![]() |
![]() |
||
Program notes:
Touch Area;
周波数やVolimeの為のタッチアエリアを表示するには
以下の //frame(); のコメントを削除すると 画面に範囲を表示します。
画像の緑の枠がタッチアエリアです。
void setup(){
vol_disp(); // macsbug
//frame(); // touch area
}// end of setup //

Preset Frequency:登録周波数
以下の設定を変更する事により 他の周波数が可能です。
FM_Preset preset[] = {
8000 , "TOKYO FM", // 00 West // macsbug
7650 , "InterFM765", // 00 West // macsbug
8830 , "J-WAVE", // 00 West // macsbug
8930 , "West", // 00 West
8970 , "InterFM897 T", // 00 West // macsbug
9050 , "TBS RADIO", // 00 West // macsbug
9160 , "Bunka Broadcast", // // macsbug
9300 , "NPO R1", // 01 Nippon Broadcast // macsbug
9260 , "NPO R2", // 02 NPO R2
9680 , "NPO R3-FM", // 03 NPO R3-FM
9470 , "NPO R4", // 04 NPO R4
9340 , "RIJNMOND", // 05 RIJNMOND
9050 , "SUBLIME", // 06 SUBLIME
9130 , "BNR", // 07 BNR
9520 , "SLAM", // 08 SLAM
9620 , "ZFM", // 09 ZFM
9760 , "DECIBEL", // 10 DECIBEL
10040 , "QMUSIC", // 11 QMUSIC
10150 , "SKYRADIO", // 12 SKYRADIO
10270 , "RADIO 538", // 13 RADIO 538
10320 , "VERONICA", // 14 VERONICA
10380 , "RADIO 10", // 15 RADIO 10
10460 , "100% NL", // 16 100% NL
//9220 , "L-FM", // 17 L-FM
10760 , "FEELGOOD" // 18 FEELGOOD Radio
};
Touch 操作:
配列に Touch Area の X,Y, widht, high の範囲を設定します。
範囲に対応した Tb 0,1,2,,, ができます。
touch.ino に Tb 0,1,2,,, に対応する処理を記載します。
例:4 __.__X.__ FREQ
int c[12][5]={ // touch point table
//0X, 1Y, 2X, 3Y Tb 01.234.56
{ 14, 18, 28, 57}, // 0 X_.___.__ FREQ
{ 43, 18, 28, 57}, // 1 _X.___.__ FREQ
{ 73, 18, 28, 57}, // 2 __.X__.__ FREQ
{102, 18, 28, 57}, // 3 __._X_.__ FREQ
{131, 18, 28, 57}, // 4 __.__X.__ FREQ
{161, 18, 28, 57}, // 5 __.___.X_ FREQ
{190, 18, 28, 57}, // 6 __.___._X FREQ
{240, 18, 80, 57}, // 7 MHz + , MHz -
{240, 80, 40, 40}, // 8 Volume -
{280, 80, 40, 40}, // 9 Volume +
{ 0, 93,240, 26}, //10 frequency scan select
{240, 0, 80, 20} //11 Screen Shot
};
touch.ino
void touch(){ //
tc = tft.getTouch(&tX, &tY); // Touch X,Y
if (tc){ // tX, tY
//----------------------------------------------------------
// 4 : __.__X.__ : frequency change : 周波数設定 -----------
if(Tb(4)){ FirstLayer=true; // __.__X.__
if ( ba == "FM" ){ ic = 100 ;} // FM
if ( ba == "SW" ){ ic = 1 ;} // SW
if ( pm){cf=cf+ic;} // plus
if (!pm){cf=cf-ic;} // minus
if (cf >= 100000){cf=cf-ic;} // max
si4735.setFrequency(cf);disp_freq(cf,"FM");// freq set & display
delay(250); return;} //
//----------------------------------------------------------
Button Area , table , number;
移植:オリジナルのボタン位置を変更しました。
移植:横のデザインは 右端のボタンを下側に移動しました。
Button Layer;FirstLayer と ThirdLayer の2つで構成されています。
Button Layout は position の値で表示されます。 例:MUTE=8
Button number:表示は button No. 0-11 で表示されます。例:MUTE=4
Button size;80×40 で構成されています。
// FirstLayer , ThirdLayer position button No.
{ "HAM" , 0 , "SEEKUP", 0 , Xbut0 , Ybut0 }, // 0
{ "BROAD" , 4 , "SEEKDN", 4 , Xbut1 , Ybut1 }, // 1
{ "FREQ" , 2 , "STATUS", 2 , Xbut2 , Ybut2 }, // 2
{ "AGC" , 9 , "BFO" , 9 , Xbut3 , Ybut3 }, // 3
{ "MUTE" , 8 , "RDS" , 8 , Xbut4 , Ybut4 }, // 4
{ "SCAN" , 5 , "opt4" , 5 , Xbut5 , Ybut5 }, // 5
{ "MODE" , 3 , "CHIP" , 3 , Xbut6 , Ybut6 }, // 6
{ "BANDW" , 6 , "opt2" , 6 , Xbut7 , Ybut7 }, // 7
{ "STEP" , 11 , "DISPL" , 11 , Xbut8 , Ybut8 }, // 8
{ "AGCSET", 1 , "opt5" , 1 , Xbut9 , Ybut9 }, // 9
{ "PRESET", 10 , "SCAN2" , 10 , Xbut10, Ybut10 }, // 10
{ "NEXT" , 7 , "PREV" , 7 , Xbut11, Ybut11 } // 11
FirstLayer ThirdLayer
<-80-> <-80-> <-80-> <-80-> <-80-> <-80-> <-80-> <-80->: 80x40
x= 1 , 2 , 3 , 4 1 , 2 , 3 , 4
|------|------|------|------| |------|------|------|------| ^
| 8 | 9 | 10 | 11 | | 8 | 9 | 10 | 11 | |y=-1 position
| MUTE | AGC |PRESET| STEP | | RDS | BFO |SCAN2 |DISPL | 40 Nomen
| 4 | 3 | 10 | 8 | | 4 | 3 | 10 | 8 | | button No.
|------|------|------|------| |------|------|------|------| ^
| 0 | 1 | 2 | 3 | | 0 | 1 | 2 | 3 | |y=0 position
| HAM |AGCSET| FREQ | MODE | |SEEKUP| opt5 |STATUS| CHIP | 40 Nomen
| 0 | 9 | 2 | 6 | | 0 | 9 | 2 | 6 | | button No.
|------|------|------|------| |------|------|------|------| ^
| 4 | 5 | 6 | 7 | | 4 | 5 | 6 | 7 | |y=+1 position
|BROAD | SCAN |BANDW | NEXT | |SEEKDN| opt4 | opt2 | PREV | 40 Nomen
| 1 | 5 | 7 | 11 | | 1 | 5 | 7 | 11 | | button No.
|------|------|------|------| |------|------|------|------| ^
Arduino IDE:
//===================================================================== // M5Core2_All_Band_Radio : Ported SI473X_2.8_TFT_V3.5 //===================================================================== // Dev environment : Arduino IDE 2.3.6 // Board Manager : esp32 by Espressif SysteMM 3.3.6 //--------------------------------------------------------------------- // Hard : M5Strack Core2 , 2" 240x320 ILI9341 with touch // SI4732 : Making the SI4732 board // https://macsbug.wordpress.com/2025/12/06/making-the-si4732-board/ // LW : 153 – 279 KHz // AM (MW) : 520 – 1710 KHz // SW : 2.3 – 30.0 MHz // FM (VHF) : 64 – 108 MHz // : aidendo : DSP RADIO MODULE [M4732A] // : https://www.aitendo.com/product/21287 // ANTENNA : SRH805S Mini Short Antenna : VHF UHF, 45mm //--------------------------------------------------------------------- // Board : “M5Core2” // Port : “/dev/cu.usbserial-01E4C9B3” //--------------------------------------------------------------------- // CPU Frequency : “240MHz (Wifi/BT)” // Core Debug Level : “None” // USB DFU On Boot : “Disabled” // Eraze All Flash Before Sketch Upload : "Disable" // Events Run On : “Core 1” // Flash Frequency : “80MHz” // Flash Mode : “QIO” // Flash Size : “16MB (128Mb)” // Arduino Runs On : “Core 1” // Partition Scheme : “Huge APP (3MB No OTA/1MB SPIFFS)” // PSRAM : “Enabled” // Upload Speed : “1500000” //--------------------------------------------------------------------- // Library / pe0mgb : SI4735-Radio-ESP32-Touchscreen-Arduino // : SI473X_2.8_TFT_V3.5 // https://github.com/pe0mgb/SI4735-Radio-ESP32-Touchscreen-Arduino // PU2CLR Si4735 Arduino Library : 2.1.4 // https://pu2clr.github.io/SI4735/extras/apidoc/html/index.html // Library : LovyanGFX 1.2.19 // : https://github.com/lovyan03/LovyanGFX/ //=====================================================================
感想:
CYD 2.8″ All Band Radio を M5Core2 へ 移植しました。
表示が不完全な場合があるかもしれません。
必要に応じて随時 修正する予定です。
タッチは静電式の為に 指先で押す必要があります。
画面が小さい為に 操作性が低いです。
導電性の細いタッチペンを使用すると操作し易いです。
M5Core2 , Unified , ESP32 , PU2CLR , SI473X_2.8_TFT_V3.5 , SI4732 ,
CYD 2.8″ All Band Radio
CYD 2.8″ と SI4732 DSP で FM/AM/SW/LW All Band Radio ORG:2026.01.27
Rev.1 2026.02.14 (MW inout added)
Rev.2 2026.03.11 (CYD 2USB Type add)
CYD は ESP32-2432S028R(2.8″ 240×320 ILI9341 with Touch) です。
Library は PU2CLR / SI473X_2.8_TFT_V3.5 を 移植しました。
移植:操作は タッチで行います。
汎用:LCDサイズが 240×320ならば 他のLCDでも Driverを変更し使用できます。



プログラムの特徴:詳細は リンク先を参照ください。
LW band support ( 153 – 279 kHz )
AM (MW) band support ( 520 – 1710 kHz )
SW band support ( 2.3 – 30.0 MHz )
FM (VHF) support ( 64 – 108 MHz )
無線の状態は ESP32の EEPROM に保存されます。
SCAN機能 追加:FM (76.00–108.00 MHz) をScanし RSSIをグラフ表示します。
注意:オリジナルは 未完成な所もありますが そのまま移植しました。
注意:移植は オリジナルが膨大な為に 不足な部分があるかもしれません。
移植と追加機能:
全ての周波数を 正しい表示 及び 受信できるか 試せていません。
SCAN:76.0 〜 108.00 MHZ の受信(RSSI)を グラフ表示。
ボタン動作:Push時の表示を見やすくしました。
Screnn Shot:画面をSDに保存する事ができます。
開発環境:
Dev environment : Arduino IDE 2.3.6
Board Manager : esp32 by Espressif System 3.3.5
Hard : SI4732 Board は 以下を参照ください。
🟢 Making the SI4732 board
Hard : ESP32-2432S028R, 240×320 SPI ILI9341 LCD with Touch and SI4732 Board
🟢 CYD FM Radio
ESP32-2432S028R は 2つのタイプがあります。
Pin assign : 3. Other Components:Rev.2 2026.03.11
1. 1 USB Type : ( USB micro): LCD ILI9341
IO22:SI4732-SDA, IO16:SI4732-SCL, IO27:SI4732-RST
2. 2 USB Type : ( USB micro and USB C ): LCD ST7789 : Rev.2 で追加
DS24a:IO22:SI4732-SCL, IO21:SI4732-SDA, IO16(RGB LED):SI4732-RST
移植:オリジナルは PU2CLR SI473X_2.8_TFT_V3.5
1. 2.8″ ESP32-2432S028R へ移植。
2. Encoder と Swicth を タッチ操作に変更。
DownLoad:
Program Rev 2 : 2026.02.14 : MW FREQ input added
CYD_2.8_All_Band_Radio.zip:Google Drive
CYD_2.8_All_Band_Radio.zip:WordPress
CYD2USB_2.8_All_Band_Radio.zip : 2USB Type CYD ( LCD : ST7789 ) : Rev 2, 2026.03.11
表示の向きが合わない時は setupの tft.setRotation(3); を 1 とかに変更します。
Mac : リンクをマウスの右ボタンでDragし「リンク先を別名で保存..」,
[xx.zip_.pdf]のpdfを削除し.zipにし変換します。
Windows : Please see below
How to Download a WordPress Website – Step-by-Step Guide | MacsBug
BUTTON and FUNCTION :
| No. | Button | Function |
| 1 | ![]() |
MUTE : ON/OFF Audio出力の ON 又は OFF |
| 2 | ![]() |
AGC : ON/OFF |
| 3 | ![]() |
Registered frequency : 登録周波数を表示 PRESET Pushで 次の登録周波数 FREQ Pushで 周波数設定 |
| 4 | ![]() |
STEP : |
| 5 | ![]() |
HAM BAND : BEACON,630M,160M,80M,60M,40M, 30M,20M,17M,15M,12M,10M |
| 6 | ![]() |
AGCSET : 0 to 26 |
| 7 | ![]() |
Frequency Settings : |
| 8 | ![]() |
LSB,USB,AM,CW : |
| 6 | ![]() |
BROAD : FM,LW,MW,120M,90M,75M,49M,41M,31M, 25M,22M,19M,16M,15M,13M,11,CB,SW |
| 10 | ![]() |
SCAN : 76.0 to 108.0 MHz 76 〜 108MHZ の受信(RSSI)を グラフ表示 |
| 11 | ![]() |
AM Filter in KHz : 1.0,1.8,2.0,2.5,3.0,4.0,6.0 FM Filter in KHz : AUT,110,84,60,40 USB Filter in KHz : 0.5,1.0,1.2,2.2,3.0,4.0 |
| 12 | ![]() |
to PREV screen |
| No. | Button | Function |
| 1 | ![]() |
RDS : 受信 ON / OFF |
| 9 | ![]() |
BFO : ON/OFF |
| 3 | ![]() |
SCAN2 : 76.0 to 108.0 MHz 76〜108MHz の受信(RSSI)状態を グラフ表示 |
| 4 | ![]() |
DISPL : |
| 5 | ![]() |
SEEK UP : 87.50 to 107.90 周波数が変化するのみで機能はありません |
| 6 | ![]() |
opt5 : Spare |
| 7 | ![]() |
STATUS : Software version, setup Infomation |
| 8 | ![]() |
CHIP : Firmware Infomation |
| 9 | ![]() |
SEEK DOWN : 107.90 to 87.50 周波数が変化するのみで機能はありません |
| 10 | ![]() |
opt4 : Spare |
| 11 | ![]() |
opt2 : Spare |
| 12 | ![]() |
PREV : to Firast display |
|
周波数:緑の数値部をTouchし変更。 MHzをPush。MHz+は増加。MHz-は低下。 Volume:左側で低下。右側で増加 |
![]() |
FM:76.0 to 108.0 MHz 周波数と感度をグラフ表示 グラフの下で周波数の位置表示 |
|
![]() |
![]() |
||
![]() |
Preset Frequency:登録周波数 PRESETボタンで 次の周波数表示 FREQボタンで 周波数を決定 |
![]() |
Frequency Input テンキーで周波数を入力 |
![]() |
![]() |
||
![]() |
HAM BEACON,630M,,10Mを選択 |
![]() |
BROAD FM,LW,MW,,11M,CB,SWを選択 |
![]() |
![]() |
||
![]() |
AM Filter in KHz 1.0,1.8,,4.0,6.0 を選択 |
![]() |
FM Filter in KHz AUT,110,84,60,40 を選択 |
![]() |
![]() |
||
![]() |
USB Filter in KHz 0.5,1.0,,3.0,4.0 を選択 |
![]() |
MODE LSB,USB,AM,CW を選択 |
![]() |
![]() |
||
![]() |
Software version setup Infomation |
![]() |
CHIP Infomation |
![]() |
![]() |
||
Program notes:
Touch Area;
周波数やVolimeの為のタッチアエリアを表示するには
以下の //frame(); のコメントを削除すると 画面に範囲を表示します。
画像の緑の枠がタッチアエリアです。
void setup(){
vol_disp(); // macsbug
//frame(); // touch area
}// end of setup //

Preset Frequency:登録周波数
以下の設定を変更する事により 他の周波数が可能です。
FM_Preset preset[] = {
8000 , "TOKYO FM", // 00 West // macsbug
7650 , "InterFM765", // 00 West // macsbug
8830 , "J-WAVE", // 00 West // macsbug
8930 , "West", // 00 West
8970 , "InterFM897 T", // 00 West // macsbug
9050 , "TBS RADIO", // 00 West // macsbug
9160 , "Bunka Broadcast", // // macsbug
9300 , "NPO R1", // 01 Nippon Broadcast // macsbug
9260 , "NPO R2", // 02 NPO R2
9680 , "NPO R3-FM", // 03 NPO R3-FM
9470 , "NPO R4", // 04 NPO R4
9340 , "RIJNMOND", // 05 RIJNMOND
9050 , "SUBLIME", // 06 SUBLIME
9130 , "BNR", // 07 BNR
9520 , "SLAM", // 08 SLAM
9620 , "ZFM", // 09 ZFM
9760 , "DECIBEL", // 10 DECIBEL
10040 , "QMUSIC", // 11 QMUSIC
10150 , "SKYRADIO", // 12 SKYRADIO
10270 , "RADIO 538", // 13 RADIO 538
10320 , "VERONICA", // 14 VERONICA
10380 , "RADIO 10", // 15 RADIO 10
10460 , "100% NL", // 16 100% NL
//9220 , "L-FM", // 17 L-FM
10760 , "FEELGOOD" // 18 FEELGOOD Radio
};
Touch 操作:
配列に Touch Area の X,Y, widht, high の範囲を設定します。
範囲に対応した Tb 0,1,2,,, ができます。
touch.ino に Tb 0,1,2,,, に対応する処理を記載します。
例:4 __.__X.__ FREQ
int c[12][5]={ // touch point table
//0X, 1Y, 2X, 3Y Tb 01.234.56
{ 14, 18, 28, 57}, // 0 X_.___.__ FREQ
{ 43, 18, 28, 57}, // 1 _X.___.__ FREQ
{ 73, 18, 28, 57}, // 2 __.X__.__ FREQ
{102, 18, 28, 57}, // 3 __._X_.__ FREQ
{131, 18, 28, 57}, // 4 __.__X.__ FREQ
{161, 18, 28, 57}, // 5 __.___.X_ FREQ
{190, 18, 28, 57}, // 6 __.___._X FREQ
{240, 18, 80, 57}, // 7 MHz + , MHz -
{240, 80, 40, 40}, // 8 Volume -
{280, 80, 40, 40}, // 9 Volume +
{ 0, 93,240, 26}, //10 frequency scan select
{240, 0, 80, 20} //11 Screen Shot
};
touch.ino
void touch(){ //
tc = tft.getTouch(&tX, &tY); // Touch X,Y
if (tc){ // tX, tY
//----------------------------------------------------------
// 4 : __.__X.__ : frequency change : 周波数設定 -----------
if(Tb(4)){ FirstLayer=true; // __.__X.__
if ( ba == "FM" ){ ic = 100 ;} // FM
if ( ba == "SW" ){ ic = 1 ;} // SW
if ( pm){cf=cf+ic;} // plus
if (!pm){cf=cf-ic;} // minus
if (cf >= 100000){cf=cf-ic;} // max
si4735.setFrequency(cf);disp_freq(cf,"FM");// freq set & display
delay(250); return;} //
//----------------------------------------------------------
Button Area , table , number;
移植:オリジナルのボタン位置を変更しました。
移植:横のデザインは 右端のボタンを下側に移動しました。
Button Layer;FirstLayer と ThirdLayer の2つで構成されています。
Button Layout は position の値で表示されます。 例:MUTE=8
Button number:表示は button No. 0-11 で表示されます。例:MUTE=4
Button size;80×40 で構成されています。
// FirstLayer , ThirdLayer position button No.
{ "HAM" , 0 , "SEEKUP", 0 , Xbut0 , Ybut0 }, // 0
{ "BROAD" , 4 , "SEEKDN", 4 , Xbut1 , Ybut1 }, // 1
{ "FREQ" , 2 , "STATUS", 2 , Xbut2 , Ybut2 }, // 2
{ "AGC" , 9 , "BFO" , 9 , Xbut3 , Ybut3 }, // 3
{ "MUTE" , 8 , "RDS" , 8 , Xbut4 , Ybut4 }, // 4
{ "SCAN" , 5 , "opt4" , 5 , Xbut5 , Ybut5 }, // 5
{ "MODE" , 3 , "CHIP" , 3 , Xbut6 , Ybut6 }, // 6
{ "BANDW" , 6 , "opt2" , 6 , Xbut7 , Ybut7 }, // 7
{ "STEP" , 11 , "DISPL" , 11 , Xbut8 , Ybut8 }, // 8
{ "AGCSET", 1 , "opt5" , 1 , Xbut9 , Ybut9 }, // 9
{ "PRESET", 10 , "SCAN2" , 10 , Xbut10, Ybut10 }, // 10
{ "NEXT" , 7 , "PREV" , 7 , Xbut11, Ybut11 } // 11
FirstLayer ThirdLayer
<-80-> <-80-> <-80-> <-80-> <-80-> <-80-> <-80-> <-80->: 80x40
x= 1 , 2 , 3 , 4 1 , 2 , 3 , 4
|------|------|------|------| |------|------|------|------| ^
| 8 | 9 | 10 | 11 | | 8 | 9 | 10 | 11 | |y=-1 position
| MUTE | AGC |PRESET| STEP | | RDS | BFO |SCAN2 |DISPL | 40 Nomen
| 4 | 3 | 10 | 8 | | 4 | 3 | 10 | 8 | | button No.
|------|------|------|------| |------|------|------|------| ^
| 0 | 1 | 2 | 3 | | 0 | 1 | 2 | 3 | |y=0 position
| HAM |AGCSET| FREQ | MODE | |SEEKUP| opt5 |STATUS| CHIP | 40 Nomen
| 0 | 9 | 2 | 6 | | 0 | 9 | 2 | 6 | | button No.
|------|------|------|------| |------|------|------|------| ^
| 4 | 5 | 6 | 7 | | 4 | 5 | 6 | 7 | |y=+1 position
|BROAD | SCAN |BANDW | NEXT | |SEEKDN| opt4 | opt2 | PREV | 40 Nomen
| 1 | 5 | 7 | 11 | | 1 | 5 | 7 | 11 | | button No.
|------|------|------|------| |------|------|------|------| ^
受信; 🟢 受信するには バンドに対応したアンテナが必要です。
AM :
Donut AM Antenna(500kHz-2000kHz) や Rod ANTENNA(60cm)で受信できました。
594KHz NHK in japan は受信できました。
Outdoors 595KHz:
Rod antenna(60cm) : RSSI=60dBmV,SNR=15dB
Donut AM Antenna : RSSI=68dBmV,SNR=25dB
Indoor:
Donut AM Antenna : RSSI=33dBmV,SNR=9dB
FM :
Rod ANTENNA (60cm) や Donut WB Antenna(10kHz-180MHz)で受信できました。
80.00MHz TOKYO FM in japan は受信できました。
Outdoors 80.00MHz:
Rod antenna(60cm) : RSSI=62dBmV,SNR=32dB
Donut WB Antenna : RSSI=47dBmV,SNR=30dB
Indoor:
Rod antenna(60cm) : RSSI=53dBmV,SNR=18dB
Donut WB Antenna : RSSI=43dBmV,SNR=16dB
SW : 短波
Donut SW Antenna L(4MHz-12Mkz) で受信できました。
6.055MHz JOZ2 Radio NIKKEI No1 in japan は受信できました。
Outdoors 6.055MHz:
Donut SW Antenna L : RSSI=50dBmV,SNR=19dB
6.115MHz Radio NIKKEI No2 in japan は受信できました。
Outdoors 6.115MHz:
Donut SW Antenna L : RSSI=45dBmV,SNR=18dB
ラジオNIKKEI第1:終日6.055MHz。[補完] 3.925MHz、9.595MHz
ラジオNIKKEI第2:6.115MHz(8:00~19:00),3.945MHz(19:00~23:00),[補完] 9.760MHz
短波用やアマチュア無線用の大きなアンテナが必要です。
アマチュア無線は 周波数を捉えにくく受信できません。
Ardui IDE : 設定
//===================================================================== // CYD_2.8_All_Band_Radio : Ported SI473X_2.8_TFT_V3.5 //===================================================================== // Dev environment : Arduino IDE 2.3.6 // Board Manager : esp32 by Espressif System 3.3.5 //--------------------------------------------------------------------- // Board : “ESP32 Dev Module” // Port : “/dev/cu.usbmodem83401” //--------------------------------------------------------------------- // CPU Frequency : “240MHz (Wifi)” // Core Debug Level : “None” // USB DFU On Boot : “Disabled” // Eraze All Flash Before Sketch Upload : "Disable" // Events Run On : “Core 1” // Flash Frequency : “80MHz” // Flash Mode : “QIO” // Flash Size : “4MB (32Mb)” // JTAB Adapter : "Disable" // Arduino Runs On : “Core 1” // Partition Scheme : “Huge APP (3MB No OTA/1MB SPIFFS)” // PSRAM : “Disabled” // Upload Mode : “UART0 / Hardware CDC” // Upload Speed : “460800” // Zigbee Mode : “Disabled” //--------------------------------------------------------------------- // Library / pe0mgb : SI4735-Radio-ESP32-Touchscreen-Arduino // : SI473X_2.8_TFT_V3.5 // https://github.com/pe0mgb/SI4735-Radio-ESP32-Touchscreen-Arduino // PU2CLR Si4735 Arduino Library : 2.1.4 // https://pu2clr.github.io/SI4735/extras/apidoc/html/index.html // Library : LovyanGFX 1.2.7 // : https://github.com/lovyan03/LovyanGFX/ //=====================================================================
感想:
SI4732の多数の機能を使用した オリジナルに基づき 移植しました。
スイッチとエンコーダーの工作は 面倒です。
スイッチとエンコーダーを使用せず タッチ操作で完結しています。
オリジナルは 良く出来ているソフトです。
キーボードの管理と 多数のモードがあり 複雑になっています。
私には 内容が膨大で複雑です。
表示が不完全な場合があるかもしれません。
必要に応じて随時 修正する予定です。
オリジナルのソフトのメモ;
SEEKUP,SEEKDNは 周波数が変化するのみで意味がない。
対応:そのままとし、他に使用できる事ができる。
RSSIの数値とグラフの位置が合っていない。
対応;補正をしたが ピッタリではない。
ボタン操作:ボタンを押した表現が無く分かりずらい。
対応;ボタンの基本の色は そのまま Blue 表示。
対応;ボタンを押した時は Red の色を表示。
対応;ボタンが機能している場合は Amberにしました。
ボタン画像データー;
拡大縮小(pushRotateZoom命令)が可能です。
つまり、他のサイズのLCDも移植が出来ます。
ボタンの色は Black,Blue,Green,Red,Amber
ボタンのサイズは 80×40,90×23,80×23,60×23,50×50
SI4735のプログラム仕様書は 膨大で把握が大変です。
理解し 使いこなせば 素晴らしい受信機ができます。
画面が小さい為に 画面レイアウトの工夫が必要です。
海外では 上記のオリジナルを使用し アレンジされた作品があります。
CYD , ESP32-2432S-28R , ESP32 , PU2CLR , SI473X_2.8_TFT_V3.5 ,
SI4732 ,
ESP32-3248S035R FM Radio
ESP32-3248S035R FM Radio ORG 2025.12.12
ESP32-3248S035R と SI4732 で FM Radio を製作。
操作は タッチで行い ロータリースイッチ不要で 工作しやすいです。
ATS-miniより 大きい画面の 3.5inchは 見やすく 操作もしやすいです。

SI4732 Board は Making the SI4732 board を参照ください。410円 ($2.6)

開発環境:
Arduino IDE 2.3.6
Board Manager : arduino-esp32 3.3.4
Board : ESP32S3 Dev Module
Hard : ESP32-3248S035R : 3.5″ 320×480 SPI ST7796 LCD with XPT2046 Touch
ESP32-WROOM-32 : Flash 4MB , NO PSRAM
Hard : SI4732 : AM / FM / SW / LW / RDS radio receiver
Library : SI4735
Library : lovyanGFX 1.2.0
移植メモ:
原文は Sprite 320×170 の方法で作成されてます。Spriteは チラツキが少ないです。
spr.fillSprite(TFT_BLACK)で sprite area を CLEARし、
多数のSprite表示を設定し、spr.pushSprite(0,0)で 全画面を表示しています。
ESP32の Spriteの最大領域は 200×200 とされています。
実際には 320×165 が限度で それ以上は 表示しません。
ESP32-3248S035R は 480×320 で 全領域のSpriteは 表示しません。
そこで Spriteは Indicator部の 480×62 にしました。
その為に 各表示部毎に 画面消去と画面書き込み が必要となります。
DownLoad:
ESP32_3248S035R_FmRadio.zip
Mac : リンクをマウスの右ボタンでDragし「リンク先を別名で保存..」,
[xx.zip_.pdf]のpdfを削除し.zipにし変換します。
Windows : Please see below
How to Download a WordPress Website – Step-by-Step Guide | MacsBug
Touch_Calibration_3248S035R.zip
Touch_Test_3248S035R.zip
操作方法:
0 – 19 の位置をタッチします。赤い枠で囲まれた所は タッチ操作の範囲です。
周波数の操作は 小数点を除きます。
| 0 | option |
| 1 | FREQUENCY : -100 |
| 2 | FREQUENCY : -10 , VOLUME : -1 , STATION : down |
| 3 | FREQUENCY : +10 , VOLUME : +1 , STATION : up |
| 4 | FREQUENCY : +100 |
| 5 | rssi : Scan from 76.00MHz to 108.00MHz , View Graph 現在の周波数は Indicatorとグラフの間に 緑の点で表示されます。 グラフを基に チューニングしやすくなります。 |
| 6 | VOLUME : -1 |
| 7 | VOLUME : +1 |
| 8 | FREQUENCY : -100 |
| 9 | FREQUENCY : -10 |
| 10 | FREQUENCY : -1 |
| 11 | FREQUENCY : +1 |
| 12 | FREQUENCY : +10 |
| 13 | FREQUENCY : +100 |
| 14 |
STATIONS display , Green frame Select the STATIONS : ( < : down , > : up) Select with A button |
| 15 | FREQUENCY display , Green color。 |
| 16 | VOLUME display , Green color , 0〜63 |
| 17 | MUTE on/off。Audio Outputを ON/OFF |
| 18 | SONY TR-55 display |
| 19 | LOGO display |
![]() |
|
回路図:
ESP32-3248S035R の P3 , CN1 CONNECTOR PIN の配置は 幾つかの種類があります。
回路図は CN1 [ GND,22,21,3V3 ] の例です。
SI4732の信号は SDIO,SCLK,RESETの3つが必要です。
ESP32-3248S035Rの外部端子は 2つ(例:GPIO21,GPIO22)です。
よって SI4732のRESETは CRのRESET回路を追加しました。
RESETは 通常 PROGRAMでRESETしますが HARDでRESETし 配線を書略します。
これにより Si4732とESP32-3248S035Rの接続は 電源も含め4本で済みます。
ANTENNAは ある程度の長さのWireを接続するだけでも受信します。

Board size:101.5 x 54.9 mm

P3, CN1 PIn Assign:
ESP32-3248S035R P3, CN1 のGPIOは 以下の様になっています。
GPIO35 は Inputの為 使用できません。
使用する基板に合わせて GPIO を 接続 及び 設定します。
左の基板を使用する場合は NCへGPIO-22を配線すると良いです。

製作:



部品リスト:費用 1400円
SI4732-A10-GSR は 販売店により価格が違います。低価格をお求めください。
LCDは 320×480 で LovyanGFX Driver対応ならば何でも使用できます。
| No. | Nomen , Symbol | pcs | Purchase | Price ¥ |
| 1 | ESP32-3248S035R![]() |
1 | Any | – |
| 2 |
Si4732 Board
|
1 | Making the SI4732 board | 440 |
| 3 |
Capacitor:10μF
|
2 | Any | 20 |
| 4 |
SMA Connector RPSMA-KE 13.5MM ![]() |
1 |
Aliexpress 5pcs 632円 |
126 |
| 5 |
ANTENNA 433MHz 5cm![]() |
1 | Aliexpress 2pcs 536円 |
268 |
| 5 |
SMA Male Antenna 104mm SMA 5-104 ![]() |
1 |
KX JOJO electron 輸送期間:10 day |
513 |
| 5 |
SMA Male Antenna 164mm 7-section ![]() |
1 |
Shop1103366331 Store 輸送期間:27 day |
435 |
| 5 |
2.4Ghz 4G 5G WIFI Internal Ant GSM GPRS 2 3 4G LTE, 80x22mm ![]() |
1 |
IC components Store 5pcs 483円 |
97 |
| 5 |
SRH805S Mini Short Antenna VHF UHF , 45mm
|
1 |
Alibaba Authority Communication Accessories Store 686円 |
686 |
| 6 |
Audio Connector 3.5mm PJ-327A ![]() |
1 |
HPJF Official Store 10pcs 631円 輸送期間:7 day |
63 |
| 7 |
Double-sided through-hole board 101.5 x 54.9 mm ![]() |
1 | Any | – |
| 8 |
Screw , Spacer , insulating tape JST 1.25mm 4Pin Mail connector wire |
1 | Any | – |
| TOTAL | – | ———- | 1335 |
Arduino IDE:
//===================================================================== // ESP32_3248S035R_FmRadio : // ORG : 2025.12.05 : macsbug // blog : ESP32 3248S035R FmRadio // // blog : CYD 480×320 FM RADIO : 2025.11.03 // https://macsbug.wordpress.com/2025/11/03/cyd-480x320-fm-radio/ // Sketch uses 671552 bytes (21%). Maximum is 3145728 bytes. //===================================================================== // HARD : ESP32-3248SS035R // : MPU : ESP32-WROOM-1: Flash 4MB // : LCD : 3.5inch 480x320 SPI ST7796 Touch XPT2046 // SI4732 : AM/FM/SW/LW/RDS radio receiver // : Worldwide FM band support (64–108 MHz) // : Worldwide AM band support (520–1710 kHz) // : SW band support (2.3–26.1 MHz) // : LW band support (153–279 kHz) // : https://www.scribd.com/document/670264415/Si4732-A10-short //--------------------------------------------------------------------- // Dev environment : Arduino IDE 2.3.6 // Board Manager : arduino-esp32 3.3.4 // Board : “ESP32 Dev Module” // Port : “/dev/cu.usbserial-8340” //--------------------------------------------------------------------- // CPU Frequency : “240MHz (Wifi/BT)” // Core Debug Level : “None” // USB DFU On Boot : “Disabled” // Eraze All Flash Before Sketch Upload : "Disable" // Events Run On : “Core 1” // Flash Frequency : “80MHz” // Flash Mode : “QIO” // Flash Size : “4MB (32Mb)” // JTAB Adapter : “Disabled” // Arduino Runs On : “Core 1” // Partition Scheme : “Huge APP (3MB No OTA/1MB SPIFFS)” // PSRAM : “Disabled” // Upload Speed : “460800” // Zigbee Mode : “Disabled” //--------------------------------------------------------------------- // Library : LovyanGFX 1.2.0 // : https://github.com/lovyan03/LovyanGFX/ //=====================================================================
感想:
SI4732 Board は aitendo(1.6mm厚)から購入できますが 日本国内の人のみが購入できます。
海外の人や気軽に使用する為に基板を製作しました。
改造案は ありますが そのままのデーターを使用し試してみました。
良いアイデアが出来ましたら 新たな基板を作るのも良いでしょう。
課題:
何故か CYDの3.5inch 320×480のタッチ操作は 位置ずれがあります。
種類の違う2台を試しましたが同様です。
XPT2046を交換しても同様です。結果、課題として置きます。
SI4732 , SI4732-A10 , SI4732-A10-GSR , FM radio , ESP32-3248S035R ,
Making the SI4732 board
Making the SI4732 board ORG 2025.12.06
SI4732 Board を製作しました。
Gerber data は PCBWayにある Si4732 Breakout Board を使用しました。
費用は 410円です。

SI4732 : FM RADIO や 以下の周波数が可能です。
AM/FM/SW/LW/RDS radio receiver
Worldwide FM band support (64–108 MHz)
Worldwide AM band support (520–1710 kHz)
SW band support (2.3–26.1 MHz)
LW band support (153–279 kHz)
SI4732 boardで 以下の FM Radioを 製作できます。

回路図:
オリジナルに回路を追加しました。赤い線です。
1. RESET端子に CR Delay (1μF,10KΩ) を接続。
2. SEN端子は GNDへ接続。
3. Crystalのケースは GNDへ接続。
RESET信号は GPIO接続でなく CRによる delay にしました。
GPIO節約の理由は CYD Displayを使用する時に GPIOが少ない為です。
GPIO接続による SI4732の RESET Programは 100msec 程度で動作します。

部品配置:

使用方法:
これまでの FM Radio に使用できます。
次回 3.5″ 320×480 LCD ESP32-3248S035R を予定しています。
Gerber data と PCB:
注意:
1. PCBWayの基板は 不足点がありますが そのまま使用しました。
2. 基板には pinの名称がありませんので 図面を参照ください。
3. CrystalのPin間が狭く Crystalの種類が 限定されます。ここではCAN TYPEを使用。
4. Crystalのケースは GNDに接続する必要があります。安定化の為に必要です。
5. Crystalを基板に固定し ケースをGNDに接続する 工夫をしてください。SHORTに注意!

|
|
|
|
部品リスト:費用 409円
| No. | Nomen , Symbol | pcs | Purchase | Price ¥ |
| 1 |
PCBWay : Si4732-A10 Radio Breakout Board R1 Gerber data
|
1 |
JLCPCB 基板の厚さは 1mm にしました。 10pcs $6.70, ¥1,097 製作と輸送期間:6 day |
110 |
| 2 | SI4732-A10-GSR![]() |
1 |
Shop1104608047 Store 5pcs 944円 輸送期間:7 day |
189 |
| 2 | SI4732-A10-GSR![]() |
1 |
South Keji Electron IC Tec 5pcs 1066円 |
213 |
| 3 |
Capacitor:10μF
|
1 | Any | 10 |
| 4 |
Capacitor:1μF
|
1 | Any | 10 |
| 5 |
Capacitor:0.1μF
|
1 | Any | 10 |
| 6 |
Capacitor:22PF
|
2 | Any | 20 |
| 7 |
Resistor:10KΩ
|
1 | Any | 10 |
| 8 |
Xtal:32.768KHz:CAN type
|
1 |
Any 10pcs ¥500 |
50 |
| TOTAL | – | ———- | 409 |
| 8 | ESP32-3248S035R![]() |
1 | Any | – |
| 9 |
Capacitor:100pF
|
1 | Any | 10 |
| 4 |
Capacitor:10μF
|
3 | Any | 30 |
| 10 |
SMA Connector RPSMA-KE 13.5MM ![]() |
1 |
Aliexpress 5pcs 632円 |
126 |
| 11 |
ANTENNA 433MHz 5cm![]() |
1 | Aliexpress 2pcs 536円 |
268 |
| 11 |
SMA Male Antenna 104mm SMA 5-104 ![]() |
1 |
KX JOJO electron 輸送期間:10 day |
513 |
| 11 |
SMA Male Antenna 164mm 7-section ![]() |
1 |
Shop1103366331 Store 輸送期間:27 day |
435 |
| 11 |
2.4Ghz 4G 5G WIFI Internal Ant GSM GPRS 2 3 4G LTE, 80x22mm ![]() |
1 |
IC components Store 5pcs 483円 |
97 |
| 11 |
SRH805S Mini Short Antenna VHF UHF , 45mm
|
1 |
Alibaba Authority Communication Accessories Store 686円 |
686 |
| 12 |
Audio Connector 3.5mm PJ-327A ![]() |
1 |
HPJF Official Store 10pcs 631円 輸送期間:7 day |
63 |
| 13 |
Double-sided through-hole board![]() |
1 | Any | – |
| TOTAL | – | ———- | – |
感想:
SI4732 Board は aitendo(1.6mm厚)から購入できますが 日本国内の人のみが購入できます。
海外の人や気軽に使用する為に基板を製作しました。
費用は aitendoより 半分程度で安く出来ました。
改造案は ありますが そのままのデーターを使用し試してみました。
良いアイデアが出来ましたら 新たな基板を作るのも良いでしょう。
SI4732を使用した ATS-miniが世界的に流行る中、
SI4732の基板は Aliexpresでは 販売されていません。
その為に 安価で容易な製作方法をまとめました。
SI4732 Boardと LCD display, ESP32 で Radioの電子工作が可能です。
SI4732 , SI4732-A10 , SI4732-A10-GSR , FM radio ,
CYD 480×320 FM RADIO
CYD 480×320 FM RADIO ORG : 2025.11.03
REV.1 2025.11.20 : SI4732 PCB
REV.2 2025.11.28 : Sprite Sizeの制限
ESP32-3248S035R の ESP32-S3改造版 と SI4732 DSP で FM RADIOを 製作しました。
Display は 3.5inch 480×320 で見易いです。
ESP32-3248S035R版 は 後日 アップします。

SI4732 と ESP32の記事は 以下を参照ください。
CYD FM Radio:2.8inch 320×240 。
M5Stack FM Radio:2.0 inch 320×240 。
CYD 480×320 の 記事は 以下を参照ください。
ESP32-3248S035:オリジナル。
Modified ESP32-3248S035R to ESP32 S3:ESP32 を ESP32 S3 へ改修。
注意:REV.2 2025.11.28
480×320のサイズは PSRAMが必要です。
Sprite Sizeの制限:通常200×200であり それ以上は PSRAMが必要です。
よって PSRAMの無い ESP32 では 480×110程度しか表示できません。
Sprite と PSRAM:
240×320 や 320×480 のスプライトを作成するための解決策。
PSRAM内蔵の ESP32 や ESP32-S3 を使用する。
ESP32 の PSRAM(外付けRAM)を有効にする。
Arduino IDE で PSRAM を有効化する、
[Tools] → [PSRAM] → “Enabled” を選択。これで 巨大スプライトが作れます。
メモリ計算(確認用)
240×320×2 bytes = 153,600 bytes(約150KB)
ESP32 の内部 RAM(約300KB)は
他にも WiFiを使用すると、内部 RAM だけでは 巨大スプライトは無理です。
PSRAM(4MB〜8MB)が必須となる理由がこれです。
操作方法: 0 – 19 の位置をタッチします。赤い枠で囲まれた所は タッチ操作の範囲です。
| 0 | option |
| 1 | FREQUENCYを -100 。(小数点を除く) |
| 2 | FREQUENCYを -10 。 (小数点を除く) |
| 3 | FREQUENCYを +10 。 (小数点を除く) |
| 4 | FREQUENCYを +100 。(小数点を除く) |
| 5 | rssiを 76.00MHz〜108.00MHzまでScanし グラフを表示します。 現在の周波数は Indicatorとグラフの間に 緑の点で表示されます。 グラフを基に チューニングしやすくなります。 |
| 6 | VOLUMEを -1 。 |
| 7 | VOLUMEを +1 。 |
| 8 | FREQUENCYを -100 。 (小数点を除く) |
| 9 | FREQUENCYを -10 。 (小数点を除く) |
| 10 | FREQUENCYを -1 。 (小数点を除く) |
| 11 | FREQUENCYを +1 。 (小数点を除く) |
| 12 | FREQUENCYを +10 。 (小数点を除く) |
| 13 | FREQUENCYを +100 。 (小数点を除く) |
| 14 | STATIONS 表示に切り替え。緑の枠になります。 登録された周波数を( > : up )( < : down )ボタンで選択します。 |
| 15 | FREQUENCY表示の切り替え。緑の文字になります。 |
| 16 | VOLUME表示の切り替え。緑の文字になります。0〜63。 |
| 17 | MUTE on/off。Audio Outputを ON/OFFします。 |
| 18 | SONY TR-55のフロントや内部を表示します。 |
| 19 | LOGO表示。 |
![]() |
|
DownLoad:
Macintosh :リンクをマウスの右ボタンでDragし「リンク先を別名で保存..」,
[xx.zip_.pdf]のpdfを削除し.zipにし変換します。
Windows:Please see below
How to Download a WordPress Website – Step-by-Step Guide | MacsBug
ESP32-S3-3248S035R:S3改造版
CYD_480x320_FmRadio.zip
構成:
HARD : CYD ESP32-S3-3248S035R
HARD : SI4732 DSP Module
SOFT : SI4732には 多数のプログラムがあり シンプルな事例を採用し移植しました。
Volos氏による Lilygo_T-Display_S3(320×170)を使用した FM Radio があります。
操作は EncoderとSwicthで行います。 Volos_TEmbedFMRadio_Port

Youtube:TEmbedFMRadio sketch from Volos Projects ported to the Si473x
開発環境:
Arduino IDE 2.3.6
Board Manager : arduino-esp32 3.1.1
Board : “ESP32S3 Dev Module”
Hard : ESP32-3248S035R : 3.5″ 320×480 SPI ST7796 LCD with XPT2046 Touch
Hard : ESP32 S3 : ESP32-S3-WROOM-1-N16R8 : Flash 16MB , PSRAM 8MB
Hard : SI4732 : AM/FM/SW/LW/RDS radio receiver
Library : SI4735
Library : lovyanGFX 1.2.0
移植:
Volos_TEmbedFMRadio_Portを移植しました。
原作は 320×170 LCD で 操作は Rotary Encoder Module を使用しています。
移植は 480×320 LCD で 操作は タッチパネルを使用します。
他のLCDで サイズが 480×320 ならば LCD Driverの変更で使用する事ができます。
参照:CYD FM Radio , M5Stack FM Radio , SPRESENSE FM RADIO
SI4732 は FM以外も受信できますが 基本的な動作を目的とし 今回は FM受信のみです。
登録周波数:sta[]で設定されています。
総務省:全国民放FM局・ワイドFM局一覧
例:8000:80.00MHz TOKYO FM:エフエム東京
sta[]に登録し nsに局の総数を設定します。
int ns = 6; // Station number
uint16_t sta[7] = {8000,8830,8970,9050,9160,9300,7650};
String stn[] = {"FM TOKYO","J-WAVE","InterFM897","TBS RADIO",
"Bunka Broadcast","Nippon Broadcast","InterFM765"};

画面レイアウト;
Sprite , Info , button の使用範囲です。
Spriteの範囲は 480×210 です。それ以上の場合、画面は表示されなくなります。
Sprite(spr)は setupで Sprite範囲を設定し drawSprite()内で多数のSprite設定が行われ
spr.pushSprite(0,0); で Sprite全画面が更新されます。
Spriteで画像を使用する場合 画像変換のEndiannessは Big-endian です。
LovyanGFXの pushRotateZoom命令を使用する事により 拡大や縮小が出来
メモリーの節約になります。メモリーの少ないSPRESENSEに効果があります。

画像サイズ:
今回の 480×320 , CYD 320×240 , ATS mini 320×170 の比較です。

回路図:
aitendoのSI4732 Moduleを使用します。SI4732は 3.3V仕様です。
SOP16ピンDIP変換とSI4732 tipで製作する方法もあります。
外部アンテナとAudio Connectorに外部アンプ・スピーカーに接続します。


SI4732 Module:
aitendo 高機能DSPラジオモジュール [M4732A] を使用します。電源は 3.3V仕様です。
全ての部品付きは 950円。
SI4732無しの基板(aitendo)と SI4732(Aliexpress)で 487円です。
Aliexressには 同等の基板はありません。
Aliexressに小型の ATS MINI PRO SI4732フルバンドDSPラジオ があります。
上記を購入すれば 事足りますが 多種のLCDで使用する為に 移植しました。

I2C Address:
SI4732 は 2つのアドレスがあり SENB端子(HI/LOW)で決定されます。
SENB = GND 又は Open で 0x11 (17 DEC)
SENB = HIGH (+3.3V) で 0x63 (99 DEC)
GNDへ接続します。配線なしの Open = 0x11 (17 DEC) でも良いです。
起動時に I2C Addressを確認し 0x11 (17 DEC) で無い場合は
”Si4735 not detected” が LCDに表示され プログラムは進行しません。
製作:
実体配線図:



![]() |
![]() |
![]() |
![]() |
![]() |
部品リスト1:費用 620円
| No. | Nomen , Symbol | pcs | Purchase | Price ¥ |
| 1 | ESP32-S3=3248S035R![]() |
1 |
BLOG: Modified ESP32-3248S035R to ESP32 S3 |
620 |
| 2 |
高機能DSPラジオモジュール [M4732A] M4732A-W without SI4732-A10-GSR ![]() |
1 |
aitendo without SI4732-A10-GSR 289円 |
289 |
| 3 | SI4732-A10-GSR![]() |
1 |
Shop1104608047 Store 5pcs 944円 輸送期間:7 day |
189 |
| 3 | SI4732-A10-GSR![]() |
1 |
South Keji Electron IC Tec 5pcs 1066円 |
213 |
| 5 | Capacitor:100pF![]() |
1 | Any | 10 |
| 6 |
Capacitor:10μF![]() |
2 | Any | 20 |
| 7 |
SMA Connector RPSMA-KE 13.5MM ![]() |
1 | Aliexpress 5pcs 632円 | 126 |
| 8 |
ANTENNA 433MHz 5cm![]() |
1 | Aliexpress 2pcs 536円 |
268 |
| 8 |
SMA Male Antenna 104mm SMA 5-104 ![]() |
1 |
KX JOJO electron 輸送期間:10 day |
513 |
| 8 |
SMA Male Antenna 164mm 7-section ![]() |
1 |
Shop1103366331 Store 輸送期間:27 day |
435 |
| 8 |
2.4Ghz 4G 5G WIFI Internal Ant GSM GPRS 2 3 4G LTE, 80x22mm ![]() |
1 |
IC components Store 5pcs 483円 |
97 |
| 8 |
SRH805S Mini Short Antenna VHF UHF , 45mm
|
1 |
Alibaba Authority Communication Accessories Store 686円 |
686 |
| 9 |
Audio Connector 3.5mm PJ-327A ![]() |
1 |
HPJF Official Store 10pcs 631円 輸送期間:7 day |
63 |
| 10 |
SOP16ピンDIP変換![]() |
1 | 秋月電子通商 販売コード 106541 | 50 |
| 11 |
1.27/16P ピッチ変換基板![]() |
1 | aitendo | 110 |
| 12 |
SOP16 board![]() |
1 |
Jessinie Store 10pcs 281円 |
28 |
| TOTAL | – | ———- | 2941 |
REV.1 2025.11.20 : SI4732 PCB
SI4732 の PCB Gerber data は PCBWAYにあります。
BOM LISTもあり部品装備も可能です。
JLCBCB へ注文の費用を示します。10枚注文し 1枚105円です。
部品リスト2:Si4732-A10 Radio Breakout Board:費用 105円
| No. | Nomen , Symbol | pcs | Purchase | Price ¥ |
| 1 |
Si4732-A10 Radio Breakout Board Gerber data;PCBWAY
|
1 |
JLCPCB 10pcs , $5.2 + $1.00(OCS NEP) + $0.50 = $6.7O 10pcs , 1051.24円 | 105 |
| TOTAL | – | ———- | 105 |
Arduino IDE 設定:
//======================================================================== // Hard : ESP32-S3-WROOM-1-N16R8 // Hard : ESP32-3248S035R Modification // Hard : 3.5" 480x320 SPI ST7789 LCD with XPT2046 Touch // Hard : PCM5100A Dual PA Module //--------------------------------------------------------------------- // Dev environment : Arduino IDE 2.3.6 // Board Manager : arduino-esp32 3.1.1 //--------------------------------------------------------------------- // Board : “ESP32S3 Dev Module” // Port : “/dev/cu.usbmodem83401” //--------------------------------------------------------------------- // USB CDC on Boot : "Disabled" // CPU Frequency : “240MHz (Wifi)” // Core Debug Level : “None” // USB DFU On Boot : “Disabled” // Eraze All Flash Before Sketch Upload : "Disable" // Events Run On : “Core 1” // Flash Mode : “QIO 120MHz” // Flash Size : “16MB (128Mb)” // Upload Mode : “UART0 / Hardware CDC” // JTAB Adapter : “Disabled” // Arduino Runs On : “Core 1” // USB Firmware MSC On Boot: “Disabled” // Partition Scheme : “Huge APP(3MB No OTA/1MB SPIFFS)” // PSRAM : “OPI PSRAM” // Upload Mode : “UART0 / Hardware CDC” // Upload Speed : “921600” // USB Mode : "USB-OTG (TineyUSB)" //===================================================================== // Library : ESP32-audioI2S 3.3.0 // https://github.com/schreibfaul1/ESP32-audioI2S/ // Library : lovyanGFX 1.2.7 // https://github.com/lovyan03/LovyanGFX //=====================================================================
LovyanGFX 設定:
LCDとTouchのSPIは SPI2_HOST を使用し bus_shared = true にします。
LCD freq_writeは 80MHzでも表示しますが ノイズを考慮し 60MHzにします。
SDのSCK周波数は SD_SCK_MHZ(60)。60MHz。SDは高品質のKIOXIAを使用します。
//======================================================================
class LGFX : public lgfx::LGFX_Device{
lgfx::Panel_ST7796 _panel_instance;
lgfx::Bus_SPI _bus_instance;
lgfx::Light_PWM _light_instance;
lgfx::Touch_XPT2046 _touch_instance;
//----------------------------------------------------------------------
public:LGFX(void){
{ // バス制御の設定を行います。
auto cfg = _bus_instance.config();// バス設定用の構造体を取得します。
// SPIバスの設定
cfg.spi_host = SPI2_HOST; // 使用するSPIを選択 (VSPI_HOST or HSPI_HOST)
cfg.spi_mode = 0; // SPI通信モードを設定 (0 ~ 3)
cfg.freq_write = 60000000; // 送信時のSPIクロック(最大80MHz,80MHzを整数割値に丸め)
cfg.freq_read = 16000000; // 受信時のSPIクロック
cfg.spi_3wire = false; // 受信をMOSIピンで行う場合はtrueを設定
cfg.use_lock = true; // トランザクションロックを使用する場合はtrueを設定
cfg.dma_channel= 1; // 使用DMAチャンネル設定(1or2,0=disable)(0=DMA不使用)
cfg.pin_sclk = 46; // SPIのSCLKピン番号を設定 SCK
cfg.pin_mosi = 9; // SPIのMOSIピン番号を設定 SDI
cfg.pin_miso = 3; // SPIのMISOピン番号を設定 (-1 = disable) SDO
cfg.pin_dc = 48; // SPIのD/C ピン番号を設定 (-1 = disable) RS
// SDカードと共通のSPIバスを使う場合、MISOは省略せず必ず設定してください。
_bus_instance.config(cfg); // 設定値をバスに反映します。
_panel_instance.setBus(&_bus_instance);// バスをパネルにセットします。
}
{ // 表示パネル制御の設定を行います。
auto cfg = _panel_instance.config();// 表示パネル設定用の構造体を取得します。
cfg.pin_cs = 47; // CS 接続のピン番号(-1 = disable)
cfg.pin_rst = -1; // RST 接続のピン番号(-1 = disable)
cfg.pin_busy = -1; // BUSY接続のピン番号(-1 = disable)
cfg.memory_width = 320; // ドライバICがサポートしている最大の幅
cfg.memory_height = 480; // ドライバICがサポートしている最大の高さ
cfg.panel_width = 320; // 実際に表示可能な幅
cfg.panel_height = 480; // 実際に表示可能な高さ
cfg.offset_x = 0; // パネルのX方向オフセット量
cfg.offset_y = 0; // パネルのY方向オフセット量
cfg.offset_rotation = 0; // 回転方向の値のオフセット 0~7 (4~7は上下反転)
cfg.dummy_read_pixel= 8; // ピクセル読出し前のダミーリードのビット数
cfg.dummy_read_bits = 1; // ピクセル外のデータ読出し前のダミーリードのビット数
cfg.readable = true; // データ読出し可能な場合 trueに設定. *データ読出し不可
cfg.invert = false; // パネルの明暗が反転場合 trueに設定
cfg.rgb_order = false; // パネルの赤と青が入れ替わる場合 trueに設定
cfg.dlen_16bit = false; // データ長16bit単位で送信するパネル trueに設定
cfg.bus_shared = false; // SDカードとバスを共有 trueに設定
_panel_instance.config(cfg);
}
{ // バックライト制御の設定を行います。(必要なければ削除)
auto cfg = _light_instance.config();// バックライト設定用の構造体を取得します。
cfg.pin_bl = 8; // バックライトが接続されているピン番号 BL
cfg.invert = false; // バックライトの輝度を反転させる場合 true
cfg.freq = 44100; // バックライトのPWM周波数
cfg.pwm_channel = 7; // 使用するPWMのチャンネル番号
_light_instance.config(cfg);
_panel_instance.setLight(&_light_instance);//バックライトをパネルにセットします。
}
{ // タッチスクリーン制御の設定を行います。(必要なければ削除)
auto cfg = _touch_instance.config();
cfg.x_min = 420; // タッチスクリーンから得られる最小のX値(生の値)
cfg.x_max = 3900; // タッチスクリーンから得られる最大のX値(生の値)
cfg.y_min = 420; // タッチスクリーンから得られる最小のY値(生の値)
cfg.y_max = 3700; // タッチスクリーンから得られる最大のY値(生の値)
cfg.pin_int = -1; // INT接続のピン番号, TP IRQ 4
cfg.bus_shared = true; // 画面と共通のバスを使用している場合 trueを設定
cfg.offset_rotation = 3; // 表示とタッチの向きのが一致しない場合の調整 0~7の値で設定
// SPI接続の場合
cfg.spi_host = SPI2_HOST;// 使用するSPIを選択 (HSPI_HOST or VSPI_HOST)
cfg.freq = 1000000;// SPIクロックを設定, Max 2.5MHz, 8bit(7bit) mode
cfg.pin_sclk = 46; // SCLK接続のピン番号, TP CLK
cfg.pin_mosi = 9; // MOSI接続のピン番号, TP DIN
cfg.pin_miso = 3; // MISO接続のピン番号, TP DOUT
cfg.pin_cs = 16; // CS 接続のピン番号, TP CS
_touch_instance.config(cfg);
_panel_instance.setTouch(&_touch_instance); // タッチスクリーンをパネルにセットします。
}
setPanel(&_panel_instance);// 使用するパネルをセットします。
}
};
LGFX L; // 準備したクラスのインスタンスを作成します。
//=====================================================================
感想:
プログラム開発:
CYD FM RADIO を移植しました。
画面サイズ 480×320 と大きく見やすくなりました。
画面は大きく タッチ操作で 機能追加も容易です。
SI4732 価格:
低価格の販売店を探してください。
ANTENNA:
SI4732のアンテナは 50Ωより高いと聞いています。
接続するアンテアは 50Ωで インピーダンスは 合っていません。
FM1 アンテナに直列接続する Capacitorの多くの事例は 1nFです。
アンテナに直列に 18PF と その後に 150μH でGNDにする回路では 少しGainが低下します。
ESP32-3248S035R , ESP32-S3_3248S035R , SI4732-A10-GSR , SI4732 , FM RADIO ,
Sprite , PSRAM ,
Modified ESP32-3248S035R to ESP32 S3
ESP32-3248S035R を ESP32 S3に改造 2025.10.25
ESP32-3248S035Rの構成は
ESP32 + 3.5″ 320×480 SPI ST7796 with XPT2046 です。
ESP32の課題を克服し ESP32 S3で ⭐️パワーアップ⭐️します。
費用: ESP32-S3-WROOM-1 N16R8 with TELEC は 秋月で620円です。
Aliexpressで with TELEC(技適)はあり 同様な価格です。


| No. | 課題 | 対策 |
| 1 |
ESP32-WROOM-32 Flash 4MB:容量少ない PSRAM:無し PSRAM 動作不可 |
ESP32-S3-WROOM-1-N16R8 Flash:16MB PSRAM:8MB 🟢 PSRAM 動作可能 |
| 2 |
USB UART:CH340G USB OTG:無し USB HID:無し USB KeyBoard,Mouse:不可 |
ESP32 S3:内臓USB ESP32 S3:OTG:有り ESP32 S3:HID:有り 🟢 USB KeyBoard,Mouse:可能 |
| 3 |
GPIO:空きは少ない 3 GPIO |
ESP32 S3:空きは増加 🟢 17 GPIO Free |
| 4 |
LCD SPIのSPI CLOCK 最大40MHz |
LCD SPIのSPI CLOCK 🟢 60MHz 可能 |
| 5 |
SD SPI の SD CLOCK 最大24MHz |
SD SPI の SD CLOCK 🟢 60MHz 可能 |
開発環境:Web Radio の 開発環境。
Arduino IDE 2.3.6
Board Manager : arduino-esp32 3.1.1
Board : “ESP32S3 Dev Module”
PSRAM : “OPI PSRAM”
Hard : ESP32-3248S035R : 3.5″ 320×480 SPI ST7796 LCD with XPT2046 Touch
Hard : ESP32 S3 : ESP32-S3-WROOM-1-N16R8 : Flash 16MB , PSRAM 8MB
Hard : PCM5102A Dual PA Module , 1pcs , Stereo Playback
Hard : iPad mini 1/2/3 Loud Speaker , 2pcs
Library : ESP32-audioI2S-master_3.3.0
Library : lovyanGFX 1.2.0
結果: WebRadioは軽快に聴く事ができ Animationもスムーズに表示しています。
Arduino IDE 2.3.6, arduino-esp32 3.1.1, ESP32-audioI2S 3.3.0
である事。他の組み合わせは Verify error や Audio OUTPUTが出ません。
注意: ESP32-S3 により以前は AACも出力しましたが 今回は 出ませんでした。
Download:DL方法:pdf保存後に「.pdf」を削除し 「xxx.zip」 にします。
CYD_480x320_WebRadio.zip
3D_Cube_S33248035R.zip
3D_Filled_Vector_S33248S035R.zip
Maze_generator_S33248S035R.zip
MovingCircles_S33248S035R.zip
Raytrace_S33248S035R.zip
Resistor_CALC_S33248S035R.zip
TestPDQ_S33248S035R.zip
Tetris_S33248S035R.zip
uncannyEyes_S33248S035R.zip
Touch_Calibration_S33248S035R.zip
Touch_S33248S035R.zip
改修前の ESP32-3248S035R で使用する場合は ESP32-3248S035にある
LovyanGFXの設定 ( lgfx_ESP32_3248S035.h.zip )を使用します。
回路図:Schematic
PCM5100A Dual PA Module は WeAct Studio Official製です。

改修内容:
ESP32-S3:
🟢 部品交換は1箇所。
🟢 部品削除は1箇所。
🟢 パターンカットは 2箇所。
🟢 配線は 4本です。
01. 交換:ESP32 を取り除き ESP32 S3 ( ESP32-WROOM-S3-1-N16R8 ) を装着。
絶縁処理:
S3装着前:🟢 S3左下(TFT_SDO_IO03)のPin下に絶縁Tapeを貼る。
S3装着前:🟢 S3右下(TFT_SCK_IO46)のPin下に絶縁Tapeを貼る。
S3装着前:🟢 S3右下(IO45)のPin下に絶縁Tapeを貼る。
02. 削除:U6 UART IC CH340G を取り除きます。
03. 切断:S3 GPIO_19(D-)(青)とGPIO_20(D+)(緑)端子の根本をパターンカット。緑色の四角。
03. 配線:GPIO_20端子と U6 PADの D+ を配線。緑色。
05. 配線:GPIO_19端子と U6 PADの D- を配線。薄い青色。
06. 配線:GPIO_03からIO20カット左へ配線。ピンク色。
07. 配線:GPIO_46からIO19カット左へ配線。水色。
PCM5102A:
🟢 部品取り付は1箇所。
🟢 配線は 5本です。
08. 配線:PCM5102A Dual PA Moduleを配置します。WebRadio Stereo用の改造です。
09. 配線:PCM5102A Dual PA:WSからIO17(青)へ配線。
10. 配線:PCM5102A Dual PA:DINからIO05(ピンク)へ配線。
11. 配線:PCM5102A Dual PA:BCKからIO15(黄色)へ配線。
12. 配線:PCM5102A Dual PA Module:GNDをGNDへ配線。
13. 配線:PCM5102A Dual PA Module:VCCを+4.6Vへ配線。
実体配線図:

PDF:ESP32-S3_3248S035R_PCB_Layouthttps
GPIO Pin Assign:
ESP32 S3:GPIOの空きは 2,5,7,8,10,11,12,13,14,15,17,21,35,36,37,41,45。
合計 17_GPIOです。35,36,37は PSRAM使用時は 使用できません。白色の四角。
LCDとTouchのSCLK(SCK),MOSI,MISOは 共通です。
IO42*は P3-IO42 と LCD_LED Q2-Gate(画像左下のPin) で共通です。
NC*:新しい基板は GPIO_2(旧配線 GPIO_22)です。
PCM5102A Dual PA は GPIO_5,15,17 を使用しました。
Touch x,y の値は Calibration 無しでも 大凡 以下の値で使用できます。
| Cds | R21 | memo |
| GPIO | 6 | Analog不可 |
| Audio AMP | U5 |
| GPIO | 18 |
| LED1 | GREEN | RED | BLUE |
| GPIO | (10) | (13) | (21) |
| LCD SPI | DC(RS) | SCLK | MOSI | MISO | CS | RST | LED |
| GPIO | 48 | 46 | 9 | 3 | 47 | – | 8 |
| Touch SPI | IRQ | SCK | MOSI | MISO | CS |
| GPIO | 4 | 46 | 9 | 3 | 16 |
| Touch | x_min | x_max | y_min | y_max |
| LGFX | 300 | 3600 | 50 | 3700 |
| SD | DAT3 CS |
CMD MOSI |
CLX CLK |
DAT0 MISO |
| GPIO | 1 | 40 | 39 | 38 |
| Connector | ||||
| P3 | GND | IO07 | IO02* | IO42* |
| CN1 | GND | NC* | IO8 | 3V3 |
| P1 | VIN | TX | RX | GND |
| P4 | VO1 | VO2 |
| PCM5102A Dual PA | |||||||
| DAC | Vin | GND | DIN | BCLK | LRC | ||
| GPIO | 4.6V | GND | 5 | 15 | 17 |
SPI:
ESP32-3248S035Rの SPI LCD, SPI Touch は 共通バスです。
ESP32のSPIは SPI2(HSPI) と SPI3(VSPI) の2つです。
ESP32-3248S035R の SPI SDの周波数は 最大24MHzです。
ESP32-S3-3248S035R SPI SDの周波数は 60MHz が可能になりました。
工作:
回路図 及び 実体配線図 に基づき工作します。
ESP32は 取りづらいですが 外せば 後は難しい工作はありません。
ESP32の裏側にLCDがある為に そのままでは ヒートガンは使用できません。
ヒートガンを使用する場合は 工夫して下さい。
注意:ESP32の取り外しは難易度が高いです。🟢 パターンを剥がさない様にします。


🟢 ESP32の取り外しは Modified ESP32-2432S028R to ESP32 S3の工作をを参照ください。
部品リスト1:
費用:620円。緑色選択。Aliexpresに with TELEC(技適)は あります。
Aliexpress:XF Electronics Components co.,ltd Store と YourCee は
without TELEC で 技適対応でない為に 日本では使用出来ません。
| No. | Nomen , Symbol | pcs | Purchase | Price ¥ |
| 1 |
ESP32-S3-WROOM-1 N16R8 with TELEC
|
1 |
秋月:117256 1pcs , ¥620 |
620 |
| 1 |
ESP32-S3-WROOM-1 N16R8 with TELEC
|
1 |
BOM LIST 1pcs , ¥695 輸送期間=17day 1pcs , ¥752 輸送期間=10day |
695 |
| TOTAL | – | – | 620 |
部品リスト2:
費用:1073円。緑色選択。購入先:Aliexpress (価格は変化します)。
| No. | Nomen , Symbol | pcs | Purchase | Price ¥ |
| 1 |
PCM5100A Dual PA Module 回路図 ![]() |
1 |
WeAct Studio Official
4pcs 1044円 (1個 261円) |
261 |
| 2 |
iPad mini 1/2/3 Loud Speaker, 1set 35x11x3.8mm
|
1 |
Lanrui Repair Store 1set ¥290 |
290 |
| 3 |
JST 1.25mm 2Pin Mail Female
|
2 |
Voktta Direct 10pcs 429円 |
86 |
| 4 |
eye shadow tray : 110x76x14
|
1 |
Edieu BeautyBee 4pcs ¥1744 |
436 |
| TOTAL | – | – | 1073 |
Arduino IDE 設定:
//======================================================================== // Hard : ESP32-S3-WROOM-1-N16R8 // Hard : ESP32-3248S035R Modification // Hard : 3.5" 480x320 SPI ST7789 LCD with XPT2046 Touch // Hard : PCM5100A Dual PA Module //--------------------------------------------------------------------- // Dev environment : Arduino IDE 2.3.6 // Board Manager : arduino-esp32 3.1.1 //--------------------------------------------------------------------- // Board : “ESP32S3 Dev Module” // Port : “/dev/cu.usbmodem83401” //--------------------------------------------------------------------- // USB CDC on Boot : "Disabled" // CPU Frequency : “240MHz (Wifi)” // Core Debug Level : “None” // USB DFU On Boot : “Disabled” // Eraze All Flash Before Sketch Upload : "Disable" // Events Run On : “Core 1” // Flash Mode : “QIO 120MHz” // Flash Size : “16MB (128Mb)” // Upload Mode : “UART0 / Hardware CDC” // JTAB Adapter : “Disabled” // Arduino Runs On : “Core 1” // USB Firmware MSC On Boot: “Disabled” // Partition Scheme : “Huge APP(3MB No OTA/1MB SPIFFS)” // PSRAM : “OPI PSRAM” // Upload Mode : “UART0 / Hardware CDC” // Upload Speed : “921600” // USB Mode : "USB-OTG (TineyUSB)" //===================================================================== // Library : ESP32-audioI2S 3.3.0 // https://github.com/schreibfaul1/ESP32-audioI2S/ // Library : lovyanGFX 1.2.7 // https://github.com/lovyan03/LovyanGFX //=====================================================================
LovyanGFX 設定:
LCDとTouchのSPIは SPI2_HOST を使用し bus_shared = true にします。
LCD freq_writeは 80MHzでも表示しますが ノイズを考慮し 60MHzにします。
SDのSCK周波数は SD_SCK_MHZ(60)。60MHz。SDは高品質のKIOXIAを使用します。
//======================================================================
class LGFX : public lgfx::LGFX_Device{
lgfx::Panel_ST7796 _panel_instance;
lgfx::Bus_SPI _bus_instance;
lgfx::Light_PWM _light_instance;
lgfx::Touch_XPT2046 _touch_instance;
//----------------------------------------------------------------------
public:LGFX(void){
{ // バス制御の設定を行います。
auto cfg = _bus_instance.config();// バス設定用の構造体を取得します。
// SPIバスの設定
cfg.spi_host = SPI2_HOST; // 使用するSPIを選択 (VSPI_HOST or HSPI_HOST)
cfg.spi_mode = 0; // SPI通信モードを設定 (0 ~ 3)
cfg.freq_write = 60000000; // 送信時のSPIクロック(最大80MHz,80MHzを整数割値に丸め)
cfg.freq_read = 16000000; // 受信時のSPIクロック
cfg.spi_3wire = false; // 受信をMOSIピンで行う場合はtrueを設定
cfg.use_lock = true; // トランザクションロックを使用する場合はtrueを設定
cfg.dma_channel= 1; // 使用DMAチャンネル設定(1or2,0=disable)(0=DMA不使用)
cfg.pin_sclk = 46; // SPIのSCLKピン番号を設定 SCK
cfg.pin_mosi = 9; // SPIのMOSIピン番号を設定 SDI
cfg.pin_miso = 3; // SPIのMISOピン番号を設定 (-1 = disable) SDO
cfg.pin_dc = 48; // SPIのD/C ピン番号を設定 (-1 = disable) RS
// SDカードと共通のSPIバスを使う場合、MISOは省略せず必ず設定してください。
_bus_instance.config(cfg); // 設定値をバスに反映します。
_panel_instance.setBus(&_bus_instance);// バスをパネルにセットします。
}
{ // 表示パネル制御の設定を行います。
auto cfg = _panel_instance.config();// 表示パネル設定用の構造体を取得します。
cfg.pin_cs = 47; // CS 接続のピン番号(-1 = disable)
cfg.pin_rst = -1; // RST 接続のピン番号(-1 = disable)
cfg.pin_busy = -1; // BUSY接続のピン番号(-1 = disable)
cfg.memory_width = 320; // ドライバICがサポートしている最大の幅
cfg.memory_height = 480; // ドライバICがサポートしている最大の高さ
cfg.panel_width = 320; // 実際に表示可能な幅
cfg.panel_height = 480; // 実際に表示可能な高さ
cfg.offset_x = 0; // パネルのX方向オフセット量
cfg.offset_y = 0; // パネルのY方向オフセット量
cfg.offset_rotation = 0; // 回転方向の値のオフセット 0~7 (4~7は上下反転)
cfg.dummy_read_pixel= 8; // ピクセル読出し前のダミーリードのビット数
cfg.dummy_read_bits = 1; // ピクセル外のデータ読出し前のダミーリードのビット数
cfg.readable = true; // データ読出し可能な場合 trueに設定. *データ読出し不可
cfg.invert = false; // パネルの明暗が反転場合 trueに設定
cfg.rgb_order = false; // パネルの赤と青が入れ替わる場合 trueに設定
cfg.dlen_16bit = false; // データ長16bit単位で送信するパネル trueに設定
cfg.bus_shared = false; // SDカードとバスを共有 trueに設定
_panel_instance.config(cfg);
}
{ // バックライト制御の設定を行います。(必要なければ削除)
auto cfg = _light_instance.config();// バックライト設定用の構造体を取得します。
cfg.pin_bl = 8; // バックライトが接続されているピン番号 BL
cfg.invert = false; // バックライトの輝度を反転させる場合 true
cfg.freq = 44100; // バックライトのPWM周波数
cfg.pwm_channel = 7; // 使用するPWMのチャンネル番号
_light_instance.config(cfg);
_panel_instance.setLight(&_light_instance);//バックライトをパネルにセットします。
}
{ // タッチスクリーン制御の設定を行います。(必要なければ削除)
auto cfg = _touch_instance.config();
cfg.x_min = 420; // タッチスクリーンから得られる最小のX値(生の値)
cfg.x_max = 3900; // タッチスクリーンから得られる最大のX値(生の値)
cfg.y_min = 420; // タッチスクリーンから得られる最小のY値(生の値)
cfg.y_max = 3700; // タッチスクリーンから得られる最大のY値(生の値)
cfg.pin_int = -1; // INT接続のピン番号, TP IRQ 4
cfg.bus_shared = true; // 画面と共通のバスを使用している場合 trueを設定
cfg.offset_rotation = 3; // 表示とタッチの向きのが一致しない場合の調整 0~7の値で設定
// SPI接続の場合
cfg.spi_host = SPI2_HOST;// 使用するSPIを選択 (HSPI_HOST or VSPI_HOST)
cfg.freq = 1000000;// SPIクロックを設定, Max 2.5MHz, 8bit(7bit) mode
cfg.pin_sclk = 46; // SCLK接続のピン番号, TP CLK
cfg.pin_mosi = 9; // MOSI接続のピン番号, TP DIN
cfg.pin_miso = 3; // MISO接続のピン番号, TP DOUT
cfg.pin_cs = 16; // CS 接続のピン番号, TP CS
_touch_instance.config(cfg);
_panel_instance.setTouch(&_touch_instance); // タッチスクリーンをパネルにセットします。
}
setPanel(&_panel_instance);// 使用するパネルをセットします。
}
};
LGFX L; // 準備したクラスのインスタンスを作成します。
//=====================================================================
SDの設定:Libraryは 高速な SdFat を使用します。
#include <SdFat.h> // Place before LovyanGFX.hpp #define LGFX_USE_V1 #include <LovyanGFX.hpp> #include "lgfx_ESP32S3_3248S035R.h"// 3.5 inch 320x480 SPI display SdFat SDFat; // SDFat // SD GPIO : sck=39, miso=38, mosi=40, cs=1 SPI.begin(39, 38, 40, 1); // sck,miso,mosi,cs, // SPI SDFat.begin(SdSpiConfig(1,USER_SPI_BEGIN,SD_SCK_MHZ(60))); // cs,60MHz
改修前の ESP32-3248S035R で使用する場合:
ESP32-3248S035にある LovyanGFXの設定 ( lgfx_ESP32_3248S035.h.zip )を使用します。
//----------------------------------------------------------------------
class LGFX : public lgfx::LGFX_Device{
lgfx::Panel_ST7796 _panel_instance;
lgfx::Bus_SPI _bus_instance;
lgfx::Light_PWM _light_instance;
lgfx::Touch_XPT2046 _touch_instance;
//----------------------------------------------------------------------
public:LGFX(void){{ // バス制御の設定を行います。
auto cfg = _bus_instance.config();// バス設定用の構造体を取得します。
// SPIバスの設定
cfg.spi_host = SPI2_HOST; // 使用するSPIを選択 (VSPI_HOST or HSPI_HOST)
cfg.spi_mode = 0; // SPI通信モードを設定 (0 ~ 3)
cfg.freq_write = 40000000; // 送信時のSPIクロック(最大80MHz,80MHzを整数割値に丸め)
cfg.freq_read = 16000000; // 受信時のSPIクロック
cfg.spi_3wire = false; // 受信をMOSIピンで行う場合はtrueを設定
cfg.use_lock = true; // トランザクションロックを使用する場合はtrueを設定
cfg.dma_channel= 1; // 使用DMAチャンネル設定(1or2,0=disable)(0=DMA不使用)
cfg.pin_sclk = 14; // SPIのSCLKピン番号を設定 SCK
cfg.pin_mosi = 13; // SPIのMOSIピン番号を設定 SDI
cfg.pin_miso = 12; // SPIのMISOピン番号を設定 (-1 = disable) SDO
cfg.pin_dc = 2; // SPIのD/C ピン番号を設定 (-1 = disable) RS
// SDカードと共通のSPIバスを使う場合、MISOは省略せず必ず設定してください。
_bus_instance.config(cfg); // 設定値をバスに反映します。
_panel_instance.setBus(&_bus_instance);// バスをパネルにセットします。
}
{ // 表示パネル制御の設定を行います。
auto cfg = _panel_instance.config();// 表示パネル設定用の構造体を取得します。
cfg.pin_cs = 15; // CS が接続されているピン番号(-1 = disable)
cfg.pin_rst = -1; // RST が接続されているピン番号(-1 = disable)
cfg.pin_busy = -1; // BUSYが接続されているピン番号(-1 = disable)
cfg.memory_width = 320; // ドライバICがサポートしている最大の幅
cfg.memory_height = 480; // ドライバICがサポートしている最大の高さ
cfg.panel_width = 320; // 実際に表示可能な幅
cfg.panel_height = 480; // 実際に表示可能な高さ
cfg.offset_x = 0; // パネルのX方向オフセット量
cfg.offset_y = 0; // パネルのY方向オフセット量
cfg.offset_rotation = 0; // 回転方向の値のオフセット 0~7 (4~7は上下反転)
cfg.dummy_read_pixel= 8; // ピクセル読出し前のダミーリードのビット数
cfg.dummy_read_bits = 1; // ピクセル外のデータ読出し前のダミーリードのビット数
cfg.readable = false; // データ読出しが可能な場合 trueに設定
cfg.invert = false; // パネルの明暗が反転場合 trueに設定
cfg.rgb_order = false; // パネルの赤と青が入れ替わる場合 trueに設定 ok
cfg.dlen_16bit = false; // データ長16bit単位で送信するパネル trueに設定
cfg.bus_shared = false; // SDカードとバスを共有 trueに設定
_panel_instance.config(cfg);
}
{ // バックライト制御の設定を行います。(必要なければ削除)
auto cfg = _light_instance.config();// バックライト設定用の構造体を取得します。
cfg.pin_bl = 27; // バックライトが接続されているピン番号 BL
cfg.invert = false; // バックライトの輝度を反転させる場合 true
cfg.freq = 44100; // バックライトのPWM周波数
cfg.pwm_channel = 7; // 使用するPWMのチャンネル番号
_light_instance.config(cfg);
_panel_instance.setLight(&_light_instance);//バックライトをパネルにセットします。
}
{ // タッチスクリーン制御の設定を行います。(必要なければ削除)
auto cfg = _touch_instance.config();
cfg.x_min = 360; // タッチスクリーンから得られる最小のX値(生の値)
cfg.x_max = 4200; // タッチスクリーンから得られる最大のX値(生の値)
cfg.y_min = 180; // タッチスクリーンから得られる最小のY値(生の値)
cfg.y_max = 3900; // タッチスクリーンから得られる最大のY値(生の値)
cfg.pin_int = -1; // INTが接続されているピン番号, TP IRQ 36
cfg.bus_shared = true; // 画面と共通のバスを使用している場合 trueを設定
cfg.offset_rotation = 3; // 表示とタッチの向きのが一致しない場合の調整 0~7の値で設定
// SPI接続の場合
cfg.spi_host = SPI2_HOST;// 使用するSPIを選択 (HSPI_HOST or VSPI_HOST)
cfg.freq = 1000000; // SPIクロックを設定
cfg.pin_sclk = 14; // SCLKが接続されているピン番号, TP CLK
cfg.pin_mosi = 13; // MOSIが接続されているピン番号, TP DIN
cfg.pin_miso = 12; // MISOが接続されているピン番号, TP DOUT
cfg.pin_cs = 33; // CS が接続されているピン番号, TP CS
_touch_instance.config(cfg);
_panel_instance.setTouch(&_touch_instance); // タッチスクリーンをパネルにセットします。
}
setPanel(&_panel_instance);// 使用するパネルをセットします。
}
};
LGFX L; // 準備したクラスのインスタンスを作成します。
//=====================================================================
感想:
3.5″ 480×320サイズの ESP32-3248S035Rは 見やすいです。
ESP32を ESP32 S3 にすると便利になります。
使用した基板は touchの動作に問題がありました。
原因追及は 後日にして BLOGを仕上げました。
ESP32-3248S035R , PCM5102A , iPad Speaker , SPI3 , VSPI , SPI2 , HSPI ,
480×320 ILI9488 WebRadio
480×320 SPI LCD と ESP32-S3 で Web Radio を製作。 ORG : 2025.09.20
Rev.1 : WebRadio_ILI9488_S3 Rv.2 : 2025.09.24
Rev.2 : WebRadio_ILI9488_S3 Rv.3 : 2025.10.01
Rev.3 : Arduino IDE setup , Rv.4 : 2025.12.28
3.5″ 480×320 は 見易いサイズで ESP32-S3 によりスムーズに受信します。
Open Tape Gold, Open Tape Blue, Casset Tape の切り替えが出来ます。
好みの画像を追加する事が出来ます。



Hardware requirements:
ESP32-S3-WROOM-1-N16R8:macsbug ESP32 S3 v2.1
PCM5100A:PCM5100A Module:Earphone type
PCM5100A Dual PA Module:Speaker type
CYD’s Note 2025 (PCM5100A)
3.5″ 480×320 SPI ILI9488 LCD with XPT2046 Touch
1596円 ( $ 10.79 ):Aliexpress;FPC部は 16bit Parallel
Modified SPI Display to 16bit Parallel Display
1651円 ( $ 11.16 ):Your Cee
Development environment:
Arduino IDE 2.3.6 🟢
arduino-esp32 3.1.1 🟢
Library : ESP32-audioI2S : 3.3.0 🟢
Library : lovyanGFX 1.2.7
注意:Arduino IDE : PSRAM : “OPI PSRAM” 。 PSRAM を使用します。
注意:Arduino IDE で Verify時に ERRORが 出ない事は 重要です。
Arduino IDE, arduino-esp32, ESP32-audioI2S の
正しい Version の組合せが必要です。ERRORの出ない Version を使用します。
Down Load:
ORG:2025.09.19, Rev.1: 2025.09.21
Rev.2:2025.09.24:WebRadio_ILI9488_S3.zip
Rev.3:2025.11.01:WebRadio_ILI9488_S3.zip
Rev.4:2025.12.28:WebRadio_ILI9488_S3.zip 🟢
If the song is cutting out, comment out the station.
リンクをDragし「リンク先を別名で保存..」,[xx.zip_.pdf]のpdfを削除し.zipに変換します。
使用方法:
LCD と ESP32-S3, PCM5100Aの 接続方法により プログラムの設定を行います。
1. I2S PCM5100A の WS, DIN, BCK GPIO設定。
2. ssid と pass 設定。
3. LovyanGFX:LCD と Touch の GPIO設定。
回路図:

PIN ASSIGNMENT LIST
| LCD | VCC | GND | CS | RST | DC | MOSI | SCK | LED | MISO |
| S3 | 5V | GND | 8 | 18 | 16 | 7 | 4 | 5 | 1 |
| LCD | TLCK | TCS | TDIN | TDO | TIRQ |
| S3 | 2 | 42 | 41 | 40 | 38 |
| PCM5100A | VCC | GND | SD | MC | BCK | DIN | WS |
| S3 | 5V | GND | – | – | 17 | 15 | 6 |
PARTS LAYOUT
Parts Side:

Parts Side: PCM5100A Module , ESP32-S3
PCM5100A Module , PCM5100A(CYD’s Note 2025) , macsbug ESP32 S3 v2.1

Solder Side:

部品リスト: 2550円
| No. | Nomen | Purchase | Price ¥ |
| 1 |
ESP32-S3-WROOM-1-N16R8
|
macsbug ESP32 S3 v2.1 | 700 |
| 2 |
PCM5100A Module:Earphone type
|
WeAct Studio 輸送期間 19day 5pcs 1267円 輸送期間 17day |
254 |
| 2 |
PCM5100A Dual PA Module:Speaker type
|
WeAct Studio 4pcs 1044円,1pcs 261円 輸送期間 8day 10 pcs 1953円,1pcs 195円 輸送期間 7day |
195 |
| 2 |
PCM5102A I2S DAC Module:Earphone type 回路図公開
|
TENSTAR ROBOT Store 4pcs 1320円 輸送期間 5day |
330 |
| 3 |
3.5″ 480×320 SPI ILI9488 LCD XPT2046 Touch
|
Aliexpress | 1596 |
| 3 | 3.5″ 480×320 SPI ILI9488 LCD XPT2046 Touch | Your Cee | 1651 |
| 3 | 3.5″ 480×320 SPI ILI9488 LCD XPT2046 Touch | YTF | 1729 |
| 3 | 3.5″ 480×320 SPI ILI9488 LCD XPT2046 Touch | EC-Buying Ali Store | 1729 |
| 3 | 3.5″ 480×320 SPI ILI9488 LCD XPT2046 Touch | Makeprozone Store | 2492 |
製作:
基板に LCD Connector, PCM5100A Module, ESP32-S3 Connector を取り付けます。

コネクター間にワイヤーを配線します、ワイヤーを交差せず配線しています。

ESP32-S3 Module を接続します。

LCDを接続します。

3.5″ TFT SPI 480×320 V4.0 のLCDです。


ILI9488 と SPI:
ESP32のSPIは 2つ SPI2(VSPI), SPI3(HSPI) しか使用できません。
ILI9488 LCDとTouchは 別配線にします。SPIは 2つ使用します。
理由は LCD MISO(SDO)は ハイインピーダンス(オープン)回路で無い
設計ミスがあり Touch DOUTと 共用できません。
LCD MISO を接続せず 使用しなければ 共用は可能で SPI 1つで済みます。
LCD MISOは 画面の状態を読む事が出来ます。今回のプログラムは使用しています。
例:readPixel(x,y);
他に LCDを 8bit 又は 16bit Prallel で使用すると SPIは 1つ空きます。
SPRITE と 画像処理:
画像は SPRITEを使用しています。理由は 回転, 拡大縮小, 透明色を使用できる為です。
SPRITEの画像変換は File to C style array converter を使用します。
Palette mod は 16bit RRRRRGGGGGGBBBBB(2byte/pixel) を選択。
Endianness は Big-endian を選択。ESP32で高速な形式です。
Little endianを使用する場合は setupで setSwapBytes(true) が必要です。
Data type は uint16_6 を選択。
SPRITEの利点は 画像の回転 や 拡大 縮小 ができます。
今回 拡大をすると 画像の隅が色ずれを起こし 綺麗でなくなります。
よって 大きな画像は 1倍サイズの画像を作成しました。
透明色は青(BLUE)を使用し pushRotateZoom で透明色を指定します。
画像は pngを使用。 jpgは ファイル転送とかで 色が変化する場合があります。
Arduino IDE : set up
注意:PSRAM : “OPI PSRAM” , PSRAM を使用します。
Rev.3 : Arduino IDE setup : 2025.12.28
//======================================================================== // Hard : ESP32-S3-WROOM-1-N16R8 // Hard : 3.5" 480x320 SPI ILI9488 LCD with XPT2046 Touch // Hard : PCM5100A //--------------------------------------------------------------------- // Dev environment : Arduino IDE 2.3.6 // Board Manager : arduino-esp32 3.1.1 //===================================================================== // Board : “ESP32S3 Dev Module” // Port : “/dev/cu.usbmodem83401” //--------------------------------------------------------------------- // USB CDC on Boot : "Disabled" // CPU Frequency : “240MHz (Wifi)” // Core Debug Level : “None” // USB DFU On Boot : “Disabled” // Eraze All Flash Before Sketch Upload : "Disable" // Events Run On : “Core 1” // Flash Mode : “QIO 120MHz” // Flash Size : “16MB (128Mb)” // JTAB Adapter : “Disabled” // Arduino Runs On : “Core 1” // USB Firmware MSC On Boot: “Disabled” // Partition Scheme : “Huge APP(3MB No OTA/1MB SPIFFS)” // PSRAM : “OPI PSRAM” // Upload Mode : “UART0 / Hardware CDC” // Upload Speed : “921600” // USB Mode : "Hardware CDC and JTAG" // Zigbee Mode : “Disabled” //===================================================================== // Library : // ESP32-audioI2S : https://github.com/schreibfaul1/ESP32-audioI2S // ESP32-audioI2S 3.3.0 : ESP32-P4 support : Adruino Version > V3.0.0 // https://github.com/schreibfaul1/ESP32-audioI2S/releases/tag/3.3.0 // zip : // https://github.com/schreibfaul1/ESP32-audioI2S/archive/refs/tags/3.3.0.zip //--------------------------------------------------------------------- // Library : lovyanGFX 1.2.7 // https://github.com/lovyan03/LovyanGFX //=====================================================================
LovyanGFX : set up
SPI:LCDは SPI2_HOST, Touchは SPI3_HOST です。
逆の LCDは SPI3_HOST, Touchは SPI2_HOST でも良いです。
//----------------------------------------------------------------------
class LGFX : public lgfx::LGFX_Device{
lgfx::Panel_ILI9488 _panel_instance;
lgfx::Bus_SPI _bus_instance;
lgfx::Light_PWM _light_instance;
lgfx::Touch_XPT2046 _touch_instance;
//----------------------------------------------------------------------
public:LGFX(void){
{ // バス制御の設定を行います。
auto cfg = _bus_instance.config();// バス設定用の構造体を取得します。
// SPIバスの設定
cfg.spi_host = SPI2_HOST; // 使用するSPIを選択 (VSPI_HOST or HSPI_HOST)
cfg.spi_mode = 0; // SPI通信モードを設定 (0 ~ 3)
cfg.freq_write = 60000000; // 送信時のSPIクロック(最大80MHz,80MHzを整数割値に丸め)
cfg.freq_read = 16000000; // 受信時のSPIクロック
cfg.spi_3wire = false; // 受信をMOSIピンで行う場合はtrueを設定
cfg.use_lock = true; // トランザクションロックを使用する場合はtrueを設定
cfg.dma_channel= 1; // 使用DMAチャンネル設定(1or2,0=disable)(0=DMA不使用)
cfg.pin_sclk = 4; // SPIのSCLKピン番号を設定 SCK
cfg.pin_mosi = 7; // SPIのMOSIピン番号を設定 SDI
cfg.pin_miso = 1; // SPIのMISOピン番号を設定 (-1 = disable) SDO
cfg.pin_dc = 16; // SPIのD/C ピン番号を設定 (-1 = disable) RS
// SDカードと共通のSPIバスを使う場合、MISOは省略せず必ず設定してください。
_bus_instance.config(cfg); // 設定値をバスに反映します。
_panel_instance.setBus(&_bus_instance);// バスをパネルにセットします。
}
{ // 表示パネル制御の設定を行います。
auto cfg = _panel_instance.config();// 表示パネル設定用の構造体を取得します。
cfg.pin_cs = 8; // CS 接続のピン番号(-1 = disable)
cfg.pin_rst = 18; // RST 接続のピン番号(-1 = disable)
cfg.pin_busy = -1; // BUSY接続のピン番号(-1 = disable)
cfg.memory_width = 320; // ドライバICがサポートしている最大の幅
cfg.memory_height = 480; // ドライバICがサポートしている最大の高さ
cfg.panel_width = 320; // 実際に表示可能な幅
cfg.panel_height = 480; // 実際に表示可能な高さ
cfg.offset_x = 0; // パネルのX方向オフセット量
cfg.offset_y = 0; // パネルのY方向オフセット量
cfg.offset_rotation = 0; // 回転方向の値のオフセット 0~7 (4~7は上下反転)
cfg.dummy_read_pixel= 8; // ピクセル読出し前のダミーリードのビット数
cfg.dummy_read_bits = 1; // ピクセル外のデータ読出し前のダミーリードのビット数
cfg.readable = true; // データ読出し可能な場合 trueに設定. *データ読出し不可
cfg.invert = false; // パネルの明暗が反転場合 trueに設定
cfg.rgb_order = false; // パネルの赤と青が入れ替わる場合 trueに設定
cfg.dlen_16bit = false; // データ長16bit単位で送信するパネル trueに設定
cfg.bus_shared = false; // SDカードとバスを共有 trueに設定
_panel_instance.config(cfg);
}
{ // バックライト制御の設定を行います。(必要なければ削除)
auto cfg = _light_instance.config();// バックライト設定用の構造体を取得します。
cfg.pin_bl = 5; // バックライトが接続されているピン番号 BL
cfg.invert = false; // バックライトの輝度を反転させる場合 true
cfg.freq = 44100; // バックライトのPWM周波数
cfg.pwm_channel = 7; // 使用するPWMのチャンネル番号
_light_instance.config(cfg);
_panel_instance.setLight(&_light_instance);//バックライトをパネルにセットします。
}
{ // タッチスクリーン制御の設定を行います。(必要なければ削除)
auto cfg = _touch_instance.config();
cfg.x_min = 360; // タッチスクリーンから得られる最小のX値(生の値)
cfg.x_max = 4200; // タッチスクリーンから得られる最大のX値(生の値)
cfg.y_min = 180; // タッチスクリーンから得られる最小のY値(生の値)
cfg.y_max = 3900; // タッチスクリーンから得られる最大のY値(生の値)
cfg.pin_int = 38; // INT接続のピン番号, TP IRQ, 240MHz=-1, 160MHz=4
cfg.bus_shared = true; // 画面と共通のバスを使用している場合 trueを設定
cfg.offset_rotation = 6; // 表示とタッチの向きのが一致しない場合の調整 0~7の値で設定
// SPI接続の場合
cfg.spi_host = SPI3_HOST;// 使用するSPIを選択 (HSPI_HOST or VSPI_HOST)
cfg.freq = 1000000;// SPIクロックを設定, Max 2.5MHz, 8bit(7bit) mode
cfg.pin_sclk = 2; // SCLK接続のピン番号, TP CLK
cfg.pin_mosi = 41; // MOSI接続のピン番号, TP DIN
cfg.pin_miso = 40; // MISO接続のピン番号, TP DOUT
cfg.pin_cs = 42; // CS 接続のピン番号, TP CS
_touch_instance.config(cfg);
_panel_instance.setTouch(&_touch_instance); // タッチスクリーンをパネルにセットします。
}
setPanel(&_panel_instance);// 使用するパネルをセットします。
}
};
LGFX L; // 準備したクラスのインスタンスを作成します。
//=====================================================================
感想:
3.5″ 480×320 ILI9488 SPI with XPT2046 touch と ESP32-S3
での Web Radio のリクエストがあり まとめました。
ボタンのデザインは 過去のデザインより 見やすく変更しました。
3.5″ 480×320 ILI9488 SPI with XPT2046 touch , Web Radio , ESP32-S3 ,































































