LoginSignup
1
0

ESP32-S3-DevKitC-1とPCM5102もインターネットラジオになりました

Last updated at Posted at 2023-04-13

 一週間程前に以下の記事を見つけました。私の部屋の片隅で暫く眠ったままの"TTGO‐LoRa"があるので、それを活用できないかやってみようと思いました。

これを参考にさせて頂いたら、〇マ〇ン購入の"PCM5102"と組み合わせてインターネットラジオがあっさり作れました。それに気を良くして、さらに何かできることはないかと模索していたところ、秋〇電〇で見つけてしまいました。ESP32シリーズの新バージョン
「ESP32-S3-DevKitC-1」
を!〇マ〇ンのほぼ半額だったので買うしかないと早速購入。翌日に届くという速さにこちらの心の準備がまだ、状態でした。さて、それからが大変。まだ情報もこちらの記事ぐらいで

他には数える程しか無く、どうしたものやら。いつものように「ArduinoIDE2.0.4」上の作業です。Examplesはたくさんあるものの使えそうなものが、うーん?"DAC"が失くなったというし、まあ"I2S"があるからMP3再生は"PCM5102"に信号を出せばできるのかな?と疑問符だらけ。
どうしようもないのでLチカぐらいと思いやってみたら、LED_BUILTINがメーカーサイトのPinLayoutと違う、図ではGPIO38になってるのに?色々試してGPIO48に繋がっていると判明。こんな状況でしたが"TTGO"で動いていたinoを書き込んでみたらラジオ局にはアクセスしているみたい。後は"PCM5102"に繋ぐ3Pinを見つければいいのかと。
 何となく"FSPID""FSPICLK""FSPIQ"辺りかなと。GPIO35、36、37の3本つまり3の階乗=6通りを試してみようと考えやってみました。🎯でした💛!それがこれ
ESPS3_PCM5102.jpg
といっても音はお見せ出来ず残念です。とても良い音で、それを聞きながらこの記事を書いています。以下、ソースコードです。

//**********************************************************************************************************
//*    audioI2S-- I2S audiodecoder for ESP32,                                                              *
//**********************************************************************************************************
//
// first release on 11/2018
// Version 3  , Jul.02/2020
//
//
// THE SOFTWARE IS PROVIDED "AS IS" FOR PRIVATE USE ONLY, IT IS NOT FOR COMMERCIAL USE IN WHOLE OR PART OR CONCEPT.
// FOR PERSONAL USE IT IS SUPPLIED WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHOR
// OR COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
//

#include "Arduino.h"
#include "WiFi.h"
#include "Audio.h"
#include "SPI.h"
#include "SD.h"
#include "FS.h"

#define I2S_DOUT      35 // DIN
#define I2S_BCLK      36 // BCK
#define I2S_LRC       37 // LCK

Audio audio;

String ssid =     "****"; // Your ssid
String password = "*****";// Your password

String stations[] ={
        "ice1.somafm.com/illstreet-128-mp3",      // SomaFM / Illinois Street Lounge
        "ais-sa2.cdnstream1.com/b22139_128mp3",   // 101 SMOOTH JAZZ
        "relax.stream.publicradio.org/relax.mp3", // Your Classical - Relax
        "16963.live.streamtheworld.com/SAM03AAC226_SC",    // #1980s Zoom
        "ice1.somafm.com/secretagent-128-mp3",    // SomaFM / Secret Agent
        "ice1.somafm.com/seventies-128-mp3",      // SomaFM / Left Coast 70s
        "ice1.somafm.com/bootliquor-128-mp3",     // SomaFM / Boot Liquor
        "musicbird.leanstream.co/JCB032-MP3",     // 84.3 FM Edogawa (FMえどがわ, JOZZ3AS-FM, Edogawa City,...
        "musicbird.leanstream.co/JCB093-MP3",     // Dreams FM (ドリームスエフエム, JOZZ0AI-FM, 76.5 MHz, Kurume...
        "musicbird.leanstream.co/JCB104-MP3",     // Kyoto Living FM (京都リビング FM/きょうと りびんぐ FM)
        "musicbird.leanstream.co/JCB015-MP3",     // FM Blue Shonan (FM・ブルー湘南 , JOZZ3AD-FM, 78.5 MHz, Y...
};

uint8_t cur_station  = 1;         // current station No.

void setup() {
    Serial.begin(115200);
    WiFi.disconnect();
    WiFi.mode(WIFI_STA);
    WiFi.begin(ssid.c_str(), password.c_str());
    while (WiFi.status() != WL_CONNECTED) delay(1500);
    Serial.println("WiFi start");
    audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT);
    audio.setVolume(12); // 0...21

    audio.connecttohost(stations[cur_station].c_str());
}

void loop() {
    audio.loop();
}

// optional
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);
}

 たまたまうまく行っただけで、疑問がまだ残っています。結局"I2S"を本当に使っているのか、ただ単に

#define I2S_DOUT      35 // DIN
#define I2S_BCLK      36 // BCK
#define I2S_LRC       37 // LCK

と定義し割り振っただけなのか、どうなんでしょうね。:thinking:
 この後GPIO11、12、13でもできるか試してみます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0