Web Radio of M5Stack PCM5102A I2S DAC
M5Stack と PCM5102A I2S DAC Board で Web Radio を製作しました。 2021.02.19
………………………………….. Boards Manager 1.05 による改訂:rev1 : 2021.03.04
………………………………….. Boards Manager 1.06 による改訂:rev2 : 2021.05.01
………………………………….. A Button GPIO39 不具合対策追記:rev3 : 2022.08.10
………………………………….. スケッチ Rev.4, リニューアル :rev4 : 2022.08.21
.
MP3 Board and I2S DAC Board:
VS1053B mp3 Library: ESP8266 Audio |
UDA1334A I2S DAC Library: ESP32-audioI2S |
PCM5102A I2S DAC Library: ESP32-audioI2S |
520円 | 300円 | 360円 |
.
仕様:
1. 局 ( Radio Station ) :150局。ボタンで選択。局の追加も可能です。
2. 再生:Stereo。
3. 音質:M5Stack内蔵スピーカーより遥かに良いです。
4. 操作:ボタンで操作します。
_ A button:Volume – 。B button:Channel up 。C button:Volume +
5. 文書発声機能:日本語、英語 等の文章が音声で出ます。
構成:
1. 開発機種:MacBook Pro (16-inch, 2019) , macOS Catalina Ver 10.15.7
2. 開発環境:Arduino IDE 1.8.13
3. 開発環境:Board Manager:ES32 Arduino 1.0.5
4. Library:m5stack / M5Stack
5. Library:schreibfaul1 / ESP32-audioI2S
6. HARD:M5Stack
7. HARD:PCM5102A I2S DAC Module
8. HARD:Speaker Amp or Headphones:ダイソー ミニスピーカー。Volume付き。
費用:1000円。( Without M5Stack )
No. | Nomen | Price |
1 | PCM5102A I2S DAC Module | 360円 |
2 | M-BUS PCB | 100円 |
3 | DAYSO Speaker | 300円 |
4 | Other(Case,Screw,Connector) | 240円 |
– | Total | 1000円 |
1. PCM5102A:Aliexpress $3.4(360円)以下で購入可能。輸送期間=20day.
.
.
🔵 追記:2022.08.21
スケッチ Rev.4, リニューアル:rev5 : 2022.08.21
.
🟢 Down Load:Web_Radio_of_M5Stack_I2S.zip
.. Fileは PDF形式で DL後に Web_Radio_of_M5Stack_I2S_DAC.zip に変更し解凍します。
. Library:ESP32-audioI2S
.
1. M5STack.h から M5Unified.h に変更。
2. I2S DAC は MAX1334A, UDA1334A, PCM5102A I2S DAC に対応。
3. 表示:
- Play LED , Reseption LED , Wave , Starion Store(保存) 追加。
- Starion Store は Play時の Stationを保存し 再起動時に そのStationから始めます。
- 起動して WiFi 接続中に B Button を押すと Station 0 になります。
- B button は ch 又は vol に切り替えます。
- A button で – , C button で + です。
4. Startionを受信しない時は 次のStationを選択します。
5. Station の見直し:廃止された局や再起動する局の削除。
6. 開発環境:
- Dev environment : Arduino IDE 1.8.19
- Board Manager : arduino-esp32 2.0.3-RC1
- Board : “M5Stack-Core-ESP32”
- Partition Scheme : “No OTA (Large APP)”
- Pord : “dev/cu.wchusbserial52D40039901”
- Library : schreibfaul1 / ESP32-audioI2S 2.0.4
.
.
.
PCM5102A I2S DAC Module:
_ 電源(VIN)は 5Vdc。Line Output Load Resistance は MIN 1KΩ, NOR 10KΩ。
_ PCM5102A PDF。PCM5102 製品詳細, データーシート。PCM5102A Analog OUTPUT Level。
.
.
回路図:
_ 電源(VIN)は 5Vdc。PCM5102A は 3.3V。基板に LDO 3.3V (S2SL) があります。
_ GND = AGND = DGND
_ Down Load:PCM5102A_circuit_diagram.jpg.zip 1274 × 1178 pixels
.
PIN FUNCTIONS:Select = RED:購入時のセレクト状態。
H | Name | Description | LOW (GND) | HIGH (D 3.3V) |
H1L | FLT | Filter select | Normal latency | Low latency |
H2L | DEMP | De-emphasis control for 44.1kHz sampling rate |
Off | On |
H3L | XMST | Soft mute control | Soft mute | soft un-mute |
H4L | FMT | Audio format selection | I2S | Left justified |
.
LDO (5-terminal Regulator):ME6211C series ME6211C33M5G
_ Marking Code:S2RH , S2SL ( Maker:MicrOne ):ME6211 LDO pdf
_ Operating Voltage Range:2V~6.0V, VOUT=3.3V
_ Maximum Output Current:500mA
ME6211(500mA)。これをピンコンパチの
TPS74033SF5(600mA) に置き換えると 20%のパワーアップを実現します。
販売:秋月: I-17230:3.3V 600mA, 5 pcs , ¥200。
.
SCK, BCK, DIN, LRCK Input Resistor:22Ω接続で動作します。
_ 22Ωが無いと動作しません。
_ LILYGO T-Display-S3-MIDI の PC5102A LRCK,DIN,BCKは 470Ωです。
.
.
工作:MCP5102A の Jumper端子(SCK と GND) をハンダで接続(Short)します。
_ もしくは 下記 配線の基板上で SCK-GND接続でも良いです。
_ PCM5102Aの内部PLLを使用してシステムクロックを生成します。
_ 誘電ノイズを防ぎます。
_ 接続しなくても動作はします。
.
配線:5本 ( VIN, GND, LRCK, DIN, BCK )
PCM5102A | VIN | GND | LRCK | DIN | BCK |
M-BUS | 5V | GND | 25 | 22 | 26 |
メモ:CUT(Yellow):基板の左端はGND。VINで使用する為に GNDの部分をCUTします。
.
ノイズ対策:M5Stackの改修。
_ 理由:I2S は M5Stack の GPIO-25 を使用します。
_ GPIO-25 には アンプとSpeakerが接続されており I2S信号でノイズがでます。
_ 対策:M5Stack基板上の T1 端子をハンダ付けでShort させます。
_ Speaker Amp の電源が遮断され ノイズが無くなります。
.
Arduino IDE 開発条件と方法:
_ 1. Additional Boards Manager URLs:ESP32 Stable version
_ 2. Boards Manager:ESP32 by Espresso Systems version 1.0.5
_ 3. Board Selection : M5Stack-Core-ESP32
_ の設定を行ないます。
条件:
1. Aduino IDE Additional Boards Manager URLs に以下のStable verを追加します。
_ 補足:released this Feb 23, 2021:Latest Stable Release and Latest Development Release
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
2. Arduino IDE Boards Manager 設定:
_ Boards Managerを選択し ESP32 で検索。
_ ESP32 by Espresso Systems version 1.05 にします。( released this Feb 23, 2021)
_
3. Arduino IDE 設定:
_ Board Selection : M5Stack-Core-ESP32
方法:スケッチ:宣言
1. include <M5Stack.h>
2. include <Audio.h>
補足:ESP32-audioI2S_Library ( Audio.cpp ) について。
_ Audio.cpp に以下の記述があり、上記設定外でコンパイルエラーが出る時があります。
_ Audio::Audio(const uint8_t BCLK, const uint8_t LRC, const uint8_t DOUT) {
_ clientsecure.setInsecure();
_ // if that can’t be resolved update to ESP32 Arduino version 1.0.5-rc05 or higher
_ //i2s configuration
_
.
.
Library:ESP32-audioI2S:文書発声機能:について。
_ ESP32-audioI2S にある Audio.cpp には 文書発声機能が内蔵されています。
_ https://translate.google.com.vn/translate_tts に WiFi接続し音声合成をする機能です。
_ これにより PCM5102A , UDA1334A I2S DAC から音声を出す事が出来ます。
_ 日本語、英語 等ができます。
_ 例:audio.connecttospeech(“こんにちは”, “ja”)
_ 例:audio.connecttospeech(“Hello”, “en”)
_ 例:audio.connecttospeech(“Wenn die Hunde schlafen”, “de”);
_ 例:audio.connecttospeech(“Este é um exemplo de síntese de voz usando esp 32”, “pt”);
.
.
Option:スケッチに以下を追加すると Serial Monitorで各種情報を見る事ができます。
/-------------------------------------------------------------- // Output infomation to serial output void audio_info(const char *info){ Serial.print("info ");Serial.println(info);} void audio_id3data(const char *info){ //id3 metadata Serial.print("id3data ");Serial.println(info);} void audio_eof_mp3(const char *info){ //end of file Serial.print("eof_mp3 ");Serial.println(info);} void audio_showstation(const char *info){ Serial.print("station ");Serial.println(info);} void audio_showstreamtitle(const char *info){ Serial.print("streamtitle ");Serial.println(info);} void audio_bitrate(const char *info){ Serial.print("bitrate ");Serial.println(info);} void audio_commercial(const char *info){//duration in sec Serial.print("commercial ");Serial.println(info);} void audio_icyurl(const char *info){ //homepage Serial.print("icyurl ");Serial.println(info);} void audio_lasthost(const char *info){//stream URL played Serial.print("lasthost ");Serial.println(info);} void audio_eof_speech(const char *info){ Serial.print("eof_speech ");Serial.println(info);} //-------------------------------------------------------------
.
Serial Monitorの情報:Station接続時に出力されます。
ESP32-Chimera-Core initializing...OK info PSRAM not found, inputBufferSize = 6399 bytes info buffers freed, free Heap: 207176 bytes info SSL has been established, free Heap: 164112 bytes info contentLength=4608 bytes info MP3Decoder has been initialized, free Heap: 137472 bytes info syncword found at pos 0 info Channels=1 info SampleRate=24000 info BitsPerSample=16 info BitRate=32000 eof_speech こんにちは info buffers freed, free Heap: 206180 bytes info SSL has been established, free Heap: 164056 bytes info contentLength=9888 bytes info MP3Decoder has been initialized, free Heap: 139084 bytes info syncword found at pos 0 info Channels=1 info SampleRate=24000 info BitsPerSample=16 info BitRate=32000 eof_speech Web Radio of M5Stack info buffers freed, free Heap: 205940 bytes info SSL has been established, free Heap: 163848 bytes info contentLength=5952 bytes info MP3Decoder has been initialized, free Heap: 139068 bytes info syncword found at pos 0 info Channels=1 info SampleRate=24000 info BitsPerSample=16 info BitRate=32000 eof_speech Smooth Jazz info buffers freed, free Heap: 205848 bytes info Connect to new host: "http://sj32.hnux.com/stream?type=http&nocache=3104" info Connect to "sj32.hnux.com" on port 80, extension "/stream?type=http&nocache=3104" info Connected to server info HTTP/1.0 200 OK info icy-notice1:<BR>This stream requires <a href="http://www.winamp.com">Winamp</a><BR> info icy-notice2:SHOUTcast DNAS/posix(linux x64) v2.5.5.733<BR> info access-control-allow-origin:* info icy-name: SmoothJazz.com Global station SmoothJazz.com Global bitrate 32000 info icy-sr:22050 info icyurl icyurl http://smoothjazz.com info content-type:audio/mpeg, format is mp3 info MP3Decoder has been initialized, free Heap: 174404 bytes info x-clacks-overhead:GNU Terry Pratchett info Switch to SWM, bitrate is 32000, metaint is 0 lasthost sj32.hnux.com/stream info inputbuffer is being filled info stream ready info buffer filled in 290 ms info syncword found at pos 0 info syncword found at pos 0 info syncword found at pos 0 info Channels=1 info SampleRate=22050 info BitsPerSample=16 info BitRate=32000
.
課題:時々 ボタンを押さなくとも GPIO 39 に Pulseが発生し Vol – が動作する。
_ 特に Joy Radio Station , http://uk5.internet-radio.com:8174/ で多く発生する。
_ 受信の あるタイミングで GPIO 39 をアクセスします。
_ ソフト検証では、GPIO 39 に 0〜1msec 程度の Pulse が発生します。
_ 24msec程度の時も1度経験しました。
対策:M5.BtnA.wasPressed() でなく、M5.BtnA.pressedFor(50) にて
_ 50msec以上の場合の時に Vol – を動作する様にしました。
_ メモ:通常、人のボタンをプチッと押す時間は 200〜300msec程度です。
🔴 追記:2022.08.10
M5Stack の ButtonA が 勝手に動作する 原因と対策。
原因は ESP32チップのバグです。
対策:( 回避策 )
_ Arduino IDE:Setup() , WiFi.begin(); の直後に
_ WiFi.setSleep(false); を記載します。
void setup(){ WiFi.begin(); WiFi.setSleep(false); }
参考:
ButtonA on M5Stack does not work properly
.
.
感想:
1. 注意:ESP32-audioI2S の Audio.cpp の注意書きの対応が必要です。
_ ESP32 by Espresso Systems version 1.05 を使用します。
2. 速度:PCM5102A と Library ESP32-audioI2S は 通信速度が速く,出力が大きく音が明瞭です。
3. 費用:PCM5102A Module は 360円以下で安価にできます。
_ ただし国内やアマゾンでは高価な価格で販売されています。
4. 局数:150局。現存する Web Radio の中で最大の局数です。
5. ESP32 by Espresso System version:
_ 1.05-rc4:コンパイルエラーが発生しました。
_ 1.05-rc5, 1.05-rc6:たまに M5stackの画面が白くなる現象がありました。
_ 1.05-rc7:M5stackの画面が白くなる現象は治りました。
_ ただし、ESP32-audioI2S ( Audio.cpp ) を使用する為に、
_ ESP32 by Espresso Systems version 1.05-rc7 が必要である事、
_ さらに Board Select を ESP32 Dev Module にする事。
_ M5Stack で使用するには ESP32-Chimera-Core が必要になる事。
_ この為に M5.Lcd の ボタン操作命令が使用出来ないとか
_ 一部の画像表示命令が使用出来ない制限がありました。
_ 2021.02.23 に ver 1.0.5 が公開されました。
_ ver 1.05:M5Stackの画面が白くなる現象は無くなりました。
_ ver 1.05:M5Stack.h が使用でき M5Stack開発環境で開発出来る様になりました。
7. 課題と対策:たまに VOL- (GPIO39)が動作する課題がありました。原因不明。
_ VS1053 mp3 Board, I2S DAC UDA1334A, PCM5102A Board にて VOL- が発生します。
_ 対策は VOL- に 50msec Filter を入れました。
_ 追記:2021.05.01
_ 原因は ESP32 by Espresso Systems version 1.06 によるものらしい。
_ WiFi 使用時に発生します。
_ 対策は WiFi.Begin(); の後に WiFi.setSleep(false); 追加し GPIO39の誤動作は無くなりました。
8. 回路図作成:海外でPCM5102A I2S DAC Board の回路図が無いとの論議が多くあります。
_ 回路図は重要ですので Boardからと情報を集め作成しました。
.
スケッチ:Web Radio of M5Stack and I2S DAC : 2021.02.14 : macsbug
_ Enter your ssid and password:Wifi の ssid , pass は ご自身の値を設定してください。
///=========================================================== // Web Radio of M5Stack I2S DAC // UDA1334A : ORG : 2021.02.14 : macsbug // PCM5102A : rev 1 : 2021.02.20 : macsbug // PCM5102A : rev 2 : 2021.03.03 : macsbug // GPIO39 : rev 3 : 2021.05.01 : macsbug // Github : https://macsbug.wordpress.com/2021/04/16/web-radio-with-a-built-in-speaker-in-m5stack/ // Github : https://macsbug.wordpress.com/2021/02/14/web_radio_of_m5stack_i2s_dac/ // Github : https://macsbug.wordpress.com/2021/02/19/web-radio-of-m5stack-pcm5102a-i2s-dac/ // Github : https://macsbug.wordpress.com/2021/01/08/web-radio-of-m5stack/ // Development environment : Aduino IDE ver 1.8.13 // Additional Boards Manager URLs : // https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json // Boards Manager : ESP32 by Espresso System version 1.06 // Board selection : M5Stack-Core_ESP32 // Library : schreibfaul1/ESP32-audioI2S_Library // https://github.com/schreibfaul1/ESP32-audioI2S // HardWare : M5Stack and UDA1334A I2S DAC Board // HardWare : M5Stack and PCM5102A I2S DAC Board // M5Stack : Short T1 of M5stack Board(M5 Speaker Nois Cut) // M5.BtnA.wasPressed() conflicts with WiFi? #52 // https://github.com/m5stack/M5Stack/issues/52 // After 1.0.6 update WiFi won't connect to other network // connection time increased #4980 // https://github.com/espressif/arduino-esp32/issues/4980 //=========================================================== #pragma GCC optimize ("Ofast") #include <M5Stack.h> #include <M5StackUpdater.h> // SD-Upadate #include "Free_Fonts.h" #include <Arduino.h> #include <WiFi.h> #include <Audio.h> Audio audio; #define I2S_BCK 26 // M5Stack Node I2S pins #define I2S_WS 25 // M5Stack Node I2S pins #define I2S_DOUT 22 // M5Stack Node I2S pins // Enter your ssid and password. ------------ char ssid[] = "xxx"; // your network SSID (name) char pass[] = "xxx"; // your network password int counter=0, old_counter=0, new_counter=0; int playflag=0, led=0, vol=5; char URL[100], sname[100]; int Number_of_urls = 164 -1; // Change depending on the number of URLs char *url[164] = { // url*Station nam "http://sj32.hnux.com/stream?type=http&nocache=3104*Smooth Jazz", "http://listen.181fm.com/181-beatles_128k.mp3*181-beatles_128k", "http://us2.internet-radio.com:8023/*Love Radio 93.9", "http://us5.internet-radio.com:8096/*I Love Smooth Jazz", "http://us5.internet-radio.com:8201/*Keith Jarrett - Over The Rainbow", "http://us3.internet-radio.com:8639/*Smooth Jazz Planet", "http://us5.internet-radio.com:8022/*Smooth Jazz DC", "http://us2.internet-radio.com:8046/*Matt Johnson Radio", "http://uk2.internet-radio.com:8236/*Funky Jazz/Soul 101 Radio", "http://us4.internet-radio.com:8171/*Smooth Jazz - Tampa Bay", "http://uk5.internet-radio.com:8174/*Joy Radio", "http://us3.internet-radio.com:8485/*Smooth Jazz CD 101.9 New York", "http://us1.internet-radio.com:8212/*KHIH-DB Colorado Smooth Jazz", "http://us2.internet-radio.com:8443/*MEGATON CAFE RADIO", "http://us4.internet-radio.com:8193/*RADIO ESTILO LEBLON", "http://us3.internet-radio.com:8297/*The Ranch - Classic Country", "http://uk7.internet-radio.com:8000/*MoveDaHouse", "http://uk1.internet-radio.com:8004/*Pink Noise Radio", "http://us5.internet-radio.com:8267/*CLASSIC ROCK RADIO HD", "http://us4.internet-radio.com:8258/*Classic Rock Florida HD", "http://us4.internet-radio.com:8266/*Smooth Jazz Florida", "http://us3.internet-radio.com:8297/*The Ranch - Classic Country", "http://uk6.internet-radio.com:8120/*Radio West Middlesex", "http://us3.internet-radio.com:8232/*Bach - C Major Prelude", "http://uk6.internet-radio.com:8144/*Radio Cherwell - Hospital Radio in Oxford", "http://uk5.internet-radio.com:8237/*Stoke Mandeville Hospital Radio", "http://us2.internet-radio.com:8075/*Classic Hits Global HD", "http://uk7.internet-radio.com:8226/*Box UK Radio danceradiouk", "http://us4.internet-radio.com:8193/*RADIO ESTILO LEBLON", "http://us4.internet-radio.com:8258/*Classic Rock Florida HD", "http://us4.internet-radio.com:8197/*EZ Hits South Florida", "http://uk7.internet-radio.com:8040/*Ava Max - Sweet But Psycho", "http://us5.internet-radio.com:8021/*Bill Evans", "http://uk2.internet-radio.com:31491/*A Heavenly World of Sound", "http://sj32.hnux.com/stream?type=http&nocache=1257*Smooth Lounge", "http://relay4.slayradio.org:8200/*SlayRadio", "http://allstream.rainwave.cc:8000/all.mp3*Rainwave All", "http://tx.sharp-stream.com/icecast.php?i=planetrock.mp3*Planet Rock", "http://s1.viastreaming.net:8000*Smooth Choice", "http://sc6.radiocaroline.net:8040/listen.pls*Radio Caroline", "http://sc6.radiocaroline.net:10558/listen.pls*Radio Caroline Flashback", "http://listen.181fm.com/181-uktop40_128k.mp3*181 F M Top 40", "http://listen.181fm.com/181-90scountry_128k.mp3*181 F M Country", "http://listen.181fm.com/181-oldschool_128k.mp3*181 F M Old School", "http://listen.181fm.com/181-90sdance_128k.mp3*181 F M Nineties Dance", "http://listen.181fm.com/181-chilled_128k.mp3*181 F M Chilled", "http://listen.181fm.com/181-classical_128k.mp3*181 F M Classical", // "http://ice2.somafm.com/christmas-128-mp3*SomaFM Xmas", "http://www.internet-radio.com/station/sanfranciscos70shits/*San Franciscos 70s Hits", "http://5.152.208.98:8058/*Ancient FM", "http://streamer.radio.co/s06b196587/listen*KPop Way Radio", "http://jenny.torontocast.com:8134/stream*Mega Shuffle", "http://wbgo.streamguys.net/wbgo96*WBGO FM 96", "http://wbgo.streamguys.net/thejazzstream*jazzstream", "http://stream.srg-ssr.ch/thejazzstream*mp3_128", "http://icecast.omroep.nl/3fm-sb-mp3*3fm-sb-mp3", "http://media-ice.musicradio.com:80/ClassicFMMP3*Classic FM", "http://113fm-edge2.cdnstream.com/5185_48*BigR - 80s Lite", "http://streaming307.radionomy.com/WOKEmemories_64.aac*WOKEmemories ", "http://streaming316.radionomy.com/W1RS-blues--Rock-s-Radio*W1RSblues&Rock'sRadio", "http://streaming307.radionomy.com/bleudream-80_64.aac*bleudream-8", "http://streaming211.radionomy.com/ClassicRock-HardRock_64.aac*ClassicRock&HardRock", "http://streaming211.radionomy.com/kingdom-rap-radio*KingdomRapRadio", "http://streaming211.radionomy.com/radio-delight-kwitonta*Delight Kwitonta FM", "http://streaming308.radionomy.com/ViejitasPeroBonitasRadio*Viejitas Pero Bonitas Radio", "http://streaming307.radionomy.com/mmabathofm-live*Mmabatho FM LIVE", "http://streaming211.radionomy.com/sjl-radio*SjlRadio", "http://188.138.9.183/lounge-austria-mobile.mp3*Unspecified name", "http://ais-edge24-nyc06.cdnstream.com/2316_128.mp3*Foster Care Warrior Radio", "http://play.global.audio/bgradio128*RADIO BGRADIO", "http://webradio.antennevorarlberg.at/live*ANTENNE VORARLBERG HD", "http://s2.cdnradio.ru/ru-mp3-128*RUSSIAN SONGS", "http://live.coolradio.rs/cool128*COOL radio | Serbia", "http://streaming315.radionomy.com/foxnews*FOX News Radio", "http://ais-edge16-jbmedia-nyc04.cdnstream.com/hot108*HOT 108 JAMZ", "http://streams.iloveradio.de/iloveradio1.mp3*I Love Radio", "http://live.antenne.at/as*Antenne Steiermark", "http://webstream.schlagerparadies.de/schlagerparadies128k.mp3*SCHLAGERPARADIES", "http://streaming211.radionomy.com/rtl-1025*RTL 102.5", "http://retesport.newradio.it/1*RETE SPORT", "http://icy.unitedradio.it/VirginRogerWaters.mp3*PinkFloyd", "http://live.m2stream.fr/m280-128.mp3*M2 80's", "http://live.m2stream.fr/m2hit-128.mp3*M2 Hit's", "http://live.m2stream.fr/m2club-128.mp3*M2 Club", "http://live.m2stream.fr/m2love-128.mp3*M2 Love", "http://live.m2stream.fr/m2rock-128.mp3*M2 Rock", "http://live.m2stream.fr/m2sunshine-128.mp3*M2 Sunshine", "http://100radio-90.ice.infomaniak.ch/100radio-90-64.aac*100 0", "http://100radio-80.ice.infomaniak.ch/100radio-80-64.aac*1000", "http://100radio-hit.ice.infomaniak.ch/100radio-hit-64.aac*100", "http://icecast.vgtrk.cdnvideo.ru/vestifm_aac_32kbps*FM News", "http://nashe1.hostingradio.ru/nashe20-128.mp3*Our Radio", "http://mp3.ffh.de/radioffh/hqlivestream.aac*hqlivestream", "http://radiostreaming.ert.gr/ert-kosmos*ert-kosmos", "http://ic6.101.ru:8000/a161*Italo Disco", "http://cmr-hosting.com/*8050**CLUB MUSIC RADIO - ITALO DISCO", "http://den.101.ru:4000/ar_66_03*101.ru - AutoRadio Ekaterinburg", "http://ic7.101.ru:8000/a79*101.ru - Cyber Space", "http://ic7.101.ru:8000/a161*101.ru - Italo Disco", "http://ic7.101.ru:8000/a175*ENIGMA", "http://vladfm.com:8000/vfm*Radio Vladivostok FM", "http://jfm1.hostingradio.ru:14536/rcstream.mp3*Radio Classic", "http://retroserver.streamr.ru:8043/retro128*Radio Retro FM", "http://retro70.hostingradio.ru:8025/retro70-128.mp3*Radio Retro FM 70e", "http://91.211.56.218:8080/piramida/nazarovo*Radio Piramida FM", "http://sea.1tvcrimea.ru:9003/stream_sea.mp3*Radio More", "http://kommersant77.hostingradio.ru:8016/kommersant128.mp3*Radio Kommersant FM", "http://bfmstream.bfm.ru:8004/fm64*Business FM Moscow 87.5", "http://ep128server.streamr.ru:8030/ep128*Europe plus", "http://212.26.146.50:8000/rusrock.mp3*Russian rock music", "http://listen2.myradio24.com:9000/8144*Radio Magic", "http://media2.brg.ua:8000/shanson_l*Radio Chanson", "http://online1.gkvr.ru:8000/radiola_eka_128.mp3*Radio Radiola", "http://online.radiorecord.ru:8102/sd90_128*Disco 90х", "http://online.radiorecord.ru:8102/sd90_128*Superdisco 90х", "http://airspectrum.cdnstream1.com:8000/1261_192*Magic Oldies Florida", "http://37.187.79.93:8368/stream2*stream2", "http://tropicalisima.net:8020/stream/1/*stream", "http://192.173.28.222:3690/KRSHFMAAC_SC*The Krush - Wine Country Radio", "http://ice.creacast.com/myzen-aac-64*MyZen Radio", "http://cms.stream.publicradio.org/cms.aac*Classical 24", "http://ais-sa3.cdnstream1.com/2440_128.aac*Oregon Public Broadcasting", "http://nis.stream.publicradio.org/nis.aac*MPR News - Minnesota Public Radio", "http://current.stream.publicradio.org/current.mp3*The Current", "http://stm29.conectastm.com:18860/stream*Nativa FM", "http://stream.haarlem105.nl:8000/haarlem105low.mp3*Haarlem 10", "http://rockthecradle.stream.publicradio.org/radioheartland.mp3*Radio Heartland - MPR", "http://studioone-stream.iowapublicradio.org/StudioOne.mp3*Iowa Public Radio News and Studio One", "http://opera-stream.wqxr.org/wnycam-app*WNYC-AM - New York Public Radio", "http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio4fm_mf_p*BBC Radio 4", "http://bbcwssc.ic.llnwd.net/stream/bbcwssc_mp1_ws-einws*BBC World Service", "http://sc8.radiocaroline.net/;*Radio Caroline", "http://108.61.154.147:6978/*The Nemesis Radio", "http://198.50.156.92:8439/*Power 945 ~Your Anime & Gaming Connection~", "http://198.50.158.92:8803/*Japannext Radio", "http://62.75.215.7:8016/*Blue Heron Radio", "http://23.29.71.154:8062/*Friends Forever", "http://184.75.223.178:8011/*J-Idols Project Radio - Global Edition", "http://radio.kahoku.net:8000/*FMkahoku", "http://51.81.46.118:3350/*J-Club Powerplay HipHop", "http://51.81.46.118:3340/*J-Rock PowerPlay", "http://184.75.223.178:8083/*J-Pop Project Radio - Global Edition", "http://uk5.internet-radio.com:8306/*Moon Mission Recordings, Tokyo Deep and Electronic", "http://sj32.hnux.com/stream?type=http&nocache=3104*Smooth Jazz", "http://uk7.internet-radio.com:8226/*Box UK Radio danceradiouk", "http://uk6.internet-radio.com:8230/*Brassbandradio Radio", "http://uk1.internet-radio.com:8355/*The Zone - Dublin", "http://uk5.internet-radio.com:8011/*Top 80 radio", "http://uk7.internet-radio.com:8281/*SWEET ONE RADIO (FRENCH RADIO)", "http://uk2.internet-radio.com:8288/*Lymm Community Radio", "http://us3.internet-radio.com:8496/*RaveRocksRadio", "http://uk3.internet-radio.com:8288/*Relaxing Music", "http://us3.internet-radio.com:8157/*Amaghana Radio", "http://uk1.internet-radio.com:8465/*Great relaxing music, a nice journey away of the daily problems", "http://us3.internet-radio.com:8157/*Amaghana Radio", "http://uk1.internet-radio.com:8235/*Hospital Radio", "http://us5.internet-radio.com:8026/*Ukiss Radio", "http://uk6.internet-radio.com:8224/*Breaking Barriers Bulgaria", "http://us2.internet-radio.com:8075/*Classic Hits Global HD", "http://uk7.internet-radio.com:8168/*242 RADIO stream", "http://uk3.internet-radio.com:8405/*Majestic Jukebox Radio #HIGH QUALITY SOUND", "http://us2.internet-radio.com:8443/*MEGATON CAFE RADIO" }; // http://icecast.omroep.nl // http://github.com/pilnikov/KaRadio32_fork/blob/master/playlist/WebStations.txt // http://fmstream.org // http://www.internet-radio.com //============================================================ void setup() { // M5Stack Initialize -------------------------------------- M5.begin(); Wire.begin();if(digitalRead(BUTTON_A_PIN)==0){updateFromFS(SD);ESP.restart();} M5.Lcd.setRotation(1); M5.Lcd.fillScreen (BLUE); // 0x657F M5.Lcd.setFreeFont (FMB12); // font MP(0,1,0xFFFF," Web Radio of M5Stack"); // x,yLine,WHITE // WiFi Connection ---------------------------------------- WiFi.disconnect(); WiFi.begin(ssid,pass); // Set ssid,pass WiFi.setSleep(false); // Prevent GPIO39 Pulse M5.Lcd.setTextColor(WHITE);M5.Lcd.setCursor(0,44); while(WiFi.status()!=WL_CONNECTED){delay(50);M5.Lcd.print(".");} MP(0,2,0xFFFF,"Connected to Wifi"); // Infomation // UDA1334A or PCM5102A I2S DAC Initialize ---------------- audio.setPinout(I2S_BCK,I2S_WS,I2S_DOUT);// Setup I2S Pin audio.setVolume(vol); // Set Vol 0...21 speech("こんにちは","ja"); // Speech speech("Web Radio of M5Stack","en"); // Speech // Button Initialize -------------------------------------- Button_(0xD6DA,0xD6DA,0xD6DA); // ch Button off delay(1000); } //============================================================ void loop() { M5.update(); audio.loop();//Executes an internal loop of the audio library // playflag 0 --------------------------------------------- if (playflag == 0){ // Station up ------------------------------------------- Button_(0xD6DA,0x762F,0xD6DA); // ch Button on MP(0,2,0xFFFF,"Wait..."); // Infomation url_sname(counter); // station,url,sname speech(sname,"en"); // speech audio.connecttohost(URL); // URL connection playflag = 1; // Display update --------------------------------------- MP(0,3,0xFFFF,"Station:"+String(counter));// Staion NO. M5.Lcd.fillRect (0,110,320,80,BLUE); // clear MP(0,4,0xFFFF,"Playing:"+String(sname)); // Staion name set_vol_btn(); // Volume and Button M5.Lcd.fillRect (0,30,320,20,BLUE); // Clear info Line MP(0,2,0xFFFF,"Playing"); // Infomation } // playflag 1 ---------------------------------------------- // Play LED ------------------------------------------------ led = led + 1; if (led>1){led=0;M5.Lcd.fillCircle(310,8,5,GREEN);// led on }else{ M5.Lcd.fillCircle(310,8,5,BLUE );// led off } // ch+ ----------------------------------------------------- if(M5.BtnB.wasPressed()){ // B Button M5.Lcd.fillRect (0,110,320,88,BLUE); // Clear Sta,sname Line Button_(0xD6DA,0x762F,0xD6DA); // ch Button on old_counter=counter; // old counter set counter=counter+1; // Station UP if(counter>Number_of_urls){counter=0;} // url count new_counter=counter; // New Station UP playflag = 0; // Start Play } // Vol- ----------------------------------------------------- if(M5.BtnA.wasPressed()){ // A Button Button_(0x762F,0xD6DA,0xD6DA); // vol Button on vol=vol-1; if(vol<0){vol=0;} // Vol - set_vol_btn(); // Volume and Button } // Vol+ ------------------------------------------------------ if(M5.BtnC.wasPressed()){ // C Button Button_(0xD6DA,0xD6DA,0x762F); // vol Button on vol=vol+1; if(vol>21){vol=20;} // Vol + set_vol_btn(); // Volume and Button } } // End of Loop //============================================================== void MP(int xpos, int yLine, int16_t color, String str){ M5.Lcd.fillRect (xpos,30*yLine-30,320,20,BLUE); // clear M5.Lcd.setCursor(xpos,30*yLine-16); // yLine:0-8 M5.Lcd.setTextColor(color);M5.Lcd.println(str); // Display // https://github.com/m5stack/m5-docs/blob/master/docs/ja/api/lcd.md } //-------------------------------------------------------------- void set_vol_btn(){ audio.setVolume(vol); // Set Volume MP(0,7,0xFFFF,"Volume:");MP(100,7,0xFFFF,String(int(vol*5))); M5.Lcd.progressBar(150,180,160,16,vol*5);// ProgressBar delay(250);Button_(0xD6DA,0xD6DA,0xD6DA);// vol Button off } //-------------------------------------------------------------- void Button_(long BA,long BB,long BC){ // Button display // https://trolsoft.ru/en/articles/rgb565-color-picker M5.Lcd.setTextColor(BLACK); // BLACK M5.Lcd.fillRoundRect( 37,210,60,30,5,BA); M5.Lcd.setCursor( 40,230);M5.Lcd.println("vol-"); M5.Lcd.fillRoundRect(133,210,60,30,5,BB); M5.Lcd.setCursor(149,230);M5.Lcd.println("ch"); M5.Lcd.fillRoundRect(226,210,60,30,5,BC); M5.Lcd.setCursor(229,230);M5.Lcd.println("vol+"); } //-------------------------------------------------------------- void url_sname(int c){ // Separate into URL, sname // URL ------------------------------------------------------- String u=String(url[c]).substring(0,String(url[c]).indexOf("*")+1); u.toCharArray(URL,u.length()); // URL // Sname ----------------------------------------------------- String s=String(url[c]).substring(String(url[c]).indexOf("//")+2); String n=s.substring(s.indexOf("*")+1)+1; n.toCharArray(sname,n.length()); // sname } //-------------------------------------------------------------- void speech(char* speech, char* Lang){ // Increase volume by +5 audio.setVolume(vol+5);audio.connecttospeech(speech,Lang); audio.setVolume(vol); } //--------------------------------------------------------------
.
,
M5Stack , Web Radio , UDA1334A , I2S DAC , 1334A , PCM5102A , Boards Manager .
[…] 上記のDACモジュール基板は部品面の裏側にPIN FUNCTION設定をする必要があるらしい。 Web Radio of M5Stack PCM5102A I2S DAC | macsbugを参考にさせてもらった。 […]
Bluetooth レシーバの自作 | ゴルディアスの涙目
4月 12, 2023 at 10:08 pm
サイトへの訪問をありがとうございます。
ブログを拝見致しました。
「はじめに」から 目的に引き込まれ、どうしたら良いかの流れに
共感する物がありじっくり読ませて頂きました。
>開発環境のESP-IDFは「古い記事が多く(2018年前後)、その後は見付からない」
や
>コンパイル時にエラーが出てしまう。
確かに その通りで開発環境 Arduino IDEの選択に心響くものがあります。
>最終的に辿り着いたのがBluetooth Audio for Arduinoだ。
素晴らしいです!
私は、此処に辿り着かずで、感心致しました。
丁寧でコツコツと進める姿に教わる物があり、ありがとうございました。
macsbug
4月 13, 2023 at 3:51 am
[…] of the information I gleaned about the PCM5102 board I got from this macsbug blog post. It is very handy. From it is also the schematic for the PCM5102 board, included […]
Cheap stereo line out I2S DAC for CircuitPython / Arduino synths – todbot blog
5月 17, 2023 at 6:41 am
Thank you for visiting our site.
The PCM5102 board is great.
A circuit diagram would be helpful.
;
The article below is great.
Cheap stereo line out I2S DAC for CircuitPython / Arduino synths
https://todbot.com/blog/2023/05/16/cheap-stereo-line-out-i2s-dac-for-circuitpython-arduino-synths/
macsbug
5月 17, 2023 at 8:37 am
こんにちは DACを調べています。
出力のオフセット「Bipolar zero error」等はどれくらいに収まっていましたでしょうか?
nekomaeru
5月 19, 2023 at 3:35 am
PCM5102Aの仕様書に書かれています。
クリックしてpcm5102a.pdfにアクセス
macsbug
5月 20, 2023 at 9:53 pm
[…] designer–one may be tempted to put in writing this off as a low-quality gadget. Inspecting the schematic available here, nonetheless, this assumption seems to be removed from the reality. Not solely does this add in an […]
Raspberry Pi Pico Audio Line Out Via PCM5102A I2S Breakout - Un News
8月 10, 2023 at 5:02 am
There are many articles on PCM5102A, and there is also 32bit 384KHz support.
However, none of the articles has a spectrum analysis of the output.
:
Raspberry Pi Audio with DAC PCM5102A
https://bokunimo.net/blog/raspberry-pi/3123/
macsbug
8月 10, 2023 at 5:18 pm
[…] its designer–one could be tempted to jot down this off as a low-quality gadget. Inspecting the schematic available here, nevertheless, this assumption seems to be removed from the reality. Not solely does this add in […]
Raspberry Pi Pico Audio Line Out Via PCM5102A I2S Breakout - Apollo News
8月 10, 2023 at 6:28 am
Thank you for the valuable information.
Rethinking PCM5102 is helpful.
:
Sound quality changes considerably depending on the type of speaker, and the speaker used is good.
The sound quality is even better with headphones such as BOSE.
:
There are articles such as the following and many other articles that will be considered.
Check out the PCM5102! winding. 2014.10.14
http://www.easyaudiokit.com/bekkan/PCM5102/PCM5102.html
macsbug
8月 10, 2023 at 8:29 am
Thanks for providing the schematic for the purple board. Did you reverse engineer that, or did you find it somewhere else? I ask because on my board, when you insert a plug into the audio output jack, audio no longer comes out the PCB header output. So either something is incomplete in your diagram, or my purple board is slightly different than yours.
daikumn
10月 16, 2023 at 11:44 pm
This board is being asked questions all over the world.
However, there was no circuit diagram.
So I analyzed the board and drew a circuit diagram.
If you have a circuit diagram, you can analyze defects and make improvements.
:
This is the first time I’ve heard that there is no output when the plug is inserted.
If we have that board, we can analyze and repair it.
There may be several versions of the board.
It might be a hint if you know the URL of the place of purchase.
:
Method of defect analysis:
Is there a signal coming out of the jack without plugging in?
This can be determined by measuring with an oscilloscope, etc.
If you don’t have an oscilloscope, you can measure the output by combining an LED and a resistor.
If a signal is output, the connector terminal may be defective.
macsbug
10月 17, 2023 at 5:35 am
I found a faulty cable that led me to believe that there was no output when it was inserted. So your schematic is probably correct. Sorry for the bother, and thank you so much for creating and sharing the schematic.
daikumn
10月 17, 2023 at 10:59 pm