一週間程前に以下の記事を見つけました。私の部屋の片隅で暫く眠ったままの"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通りを試してみようと考えやってみました。🎯でした💛!それがこれ
といっても音はお見せ出来ず残念です。とても良い音で、それを聞きながらこの記事を書いています。以下、ソースコードです。
//**********************************************************************************************************
//* 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
と定義し割り振っただけなのか、どうなんでしょうね。
この後GPIO11、12、13でもできるか試してみます。