macsbug

SPRESENSE All Band Radio

leave a comment »

 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 ,
 

Written by macsbug

3月 1, 2026 at 11:04 pm

カテゴリー: SPRESENSE

M5Stack ALL BAND RADIO

leave a comment »

 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 ,
 

Written by macsbug

2月 26, 2026 at 11:58 am

カテゴリー: M5STACK

480×320 All Band Radio

leave a comment »

 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 ,

Written by macsbug

2月 20, 2026 at 6:32 pm

カテゴリー: ESP32

M5Core2 All Band Radio

leave a comment »

 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 

 


 
 Button operation and 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 ,

Written by macsbug

2月 1, 2026 at 3:14 pm

カテゴリー: M5STACK

CYD 2.8″ All Band Radio

with 6 comments

 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 

 


 
 Button operation and 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 ,

Written by macsbug

1月 27, 2026 at 1:08 pm

カテゴリー: ESP32

ESP32-3248S035R FM Radio

with 3 comments

 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 ,

Written by macsbug

12月 12, 2025 at 9:51 am

カテゴリー: ESP32

Making the SI4732 board

with 2 comments

 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 ,

Written by macsbug

12月 6, 2025 at 10:52 am

カテゴリー: ESP32

CYD 480×320 FM RADIO

with 4 comments

 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 ,

Written by macsbug

11月 3, 2025 at 11:52 am

カテゴリー: ESP32

Modified ESP32-3248S035R to ESP32 S3

leave a comment »

 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 ,

Written by macsbug

10月 23, 2025 at 5:09 pm

カテゴリー: ESP32

480×320 ILI9488 WebRadio

with 10 comments

 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 ,

Written by macsbug

9月 20, 2025 at 4:35 pm

カテゴリー: ESP32

WordPress.com で次のようなサイトをデザイン
始めてみよう