[測試] esp8266 做網路收音機, 只聽 RTHK2

本帖最後由 xiao 於 2017-7-1 11:50 編輯

實驗完畢, 算是總結學習報告, 有 firmware 及燒錄工具, 可供快速試用, 可以下載, https://github.com/xiaolaba/ESP8266_MP3_DECODER

不需要千辛萬苦自己建立, 以免失了興趣停滯不前. 要試用的話, 燒好 firmware, 再把自家的 ROUTER 設定臨時改一下就立馬可以實驗聽網台,

ROUTER 設定,
wifi ssid : xiaolaba_tap
pwd : 123456789

耳機可以直接聽, 接擴大機也可以, 嫌高音破音刺耳可以加 RC filter, 1k - 3.3uF.
想玩但是礙於困難重重不知如可開始的, 可以一試.

硬件買 NodeMCU 較簡單, 玩過懂得基本的可以便宜可以選 ESP-12E / ESP-12F / ESP-12S. 只要知道怎樣進入 BOOT LOAD 模式就可以.

追求 HIFI / HI-END 的話會嗤之以鼻, 這種玩具或者MP3都是不入流的, 聽說有 http://www.foobar2000.org/ 無損音質的數碼聲音, 聽過但木耳沒啥感覺, 可能是環境及機器沒有好, 暫且不表. 既然這個玩具響了, 看看作者說的 I2S 轉 5 bit PWM 聲音是如何製造出來的, 實際上聽感也是毛躁的. 抄了他的源碼如下, 暫時有讀沒懂,看得出來 fakepwm 開頭有定義32個常數 (5bit table), 除了這個推斷, 其他還沒明白,  哪個可以指點一下,
  1. //https://github.com/espressif/ESP8266_MP3_DECODER/blob/master/mp3/user/user_main.c

  2. //Array with 32-bit values which have one bit more set to '1' in every consecutive array index value
  3. //table of 5 bit PWM = 32 sampling point ??
  4. const unsigned int ICACHE_RODATA_ATTR fakePwm[]={
  5.   0x00000010, 0x00000410, 0x00400410, 0x00400C10,
  6.   0x00500C10, 0x00D00C10, 0x20D00C10, 0x21D00C10,
  7.   0x21D80C10, 0xA1D80C10, 0xA1D80D10, 0xA1D80D30,
  8.   0xA1DC0D30, 0xA1DC8D30, 0xB1DC8D30, 0xB9DC8D30,
  9.   0xB9FC8D30, 0xBDFC8D30, 0xBDFE8D30, 0xBDFE8D32,
  10.   0xBDFE8D33, 0xBDFECD33, 0xFDFECD33, 0xFDFECD73,
  11.   0xFDFEDD73, 0xFFFEDD73, 0xFFFEDD7B, 0xFFFEFD7B,
  12.   0xFFFFFD7B, 0xFFFFFDFB, 0xFFFFFFFB, 0xFFFFFFFF
  13.   };

  14. static int sampToI2sPwm(short s) {
  15.         //Okay, when this is enabled it means a speaker is
  16.   //connected *directly* to the data output. Instead of
  17.         //having a nice PCM signal, we fake a PWM signal here.
  18.         static int err=0;  //??
  19.         int samp=s;     //16 bit PCM data, sound sample
  20.   
  21.         samp=(samp+32768);        //to unsigned //聲音數據上移, 0 - 65526, 正號
  22.         samp-=err;                        //Add the error we made when rounding the previous sample (error diffusion)

  23.         //clip value, 限幅
  24.         if (samp>65535) samp=65535;
  25.         if (samp<0) samp=0;

  26.         //send pwm value for sample value
  27.         samp=fakePwm[samp>>11];  //保留最高 5bit PCM 聲音數據
  28.         err=(samp&0x7ff);        //Save rounding error. //保存餘下 11bit PCM 聲音數據
  29.   
  30.         return samp;  //?
  31. }
複製代碼
.
.
最後把這帖標題更新了.


原來這帖標題, esp8266 做網路收音機 想知道電台網址和格式
請教的開端如下:

請問本地幾個大的電台網路放送有沒有mp3格式或ogg格式
有的話網址是甚麼
謝謝
https://github.com/Edzelf/Esp-radio/blob/master/README.md

http://hackaday.com/2015/06/06/e ... worked-mp3-decoder/

請問本地幾個大的電台網路放送有沒有mp3格式或ogg格式
有的話網址是甚麼
謝謝


...
xiao 發表於 2017-6-12 10:32

得唔得?
http://stm.rthk.hk/radio2.m3u
http://stm.rthk.hk/radio4.m3u

TOP

得唔得?
zex 發表於 2017-6-12 20:01



    謝謝你的資訊
編譯那個純粹的ESP8266, 沒成功
編譯ESP8266 + V5103的可以, 但是還沒有硬件可實驗

TOP

本帖最後由 zex 於 2017-6-13 19:37 編輯

回覆 3# xiao
ESP8266 好 powerful, 值得支持!

我以前也做了個 super easy 的 Internet Radio:
1. 掏 Orange Pi Zero
2. Install Armbian
     http://lucsmall.com/2017/01/19/b ... the-orange-pi-zero/
3. 行 script
     mpv "http://stm.rthk.hk/radio2.m3u"

TOP

回覆  xiao
ESP8266 好 powerful, 值得支持!

我以前也做了個 super easy 的 Internet Radio:
1. 掏 Orang ...
zex 發表於 2017-6-13 19:35


pi zero w 應該更好不過坊間都沒有零售單賣
所以用esp8266比較實在
10元就好了
吸引力高
如果實驗用pwm輸出加簡單的阻容濾波成功的話
比router改網路收音機更有趣味

TOP

pi zero w 應該更好不過坊間都沒有零售單賣
所以用esp8266比較實在
10元就好了
吸引力高
如果實驗用pwm輸 ...
xiao 發表於 2017-6-13 19:57

Raspberry Pi Zero W 同 ESP8266, 都是無 audio out 的.

Youtube 有片教用IO為 Raspberry Pi Zero W 做 audio out, 但d聲不太理想
https://www.youtube.com/watch?v=3pXB90IDNoY
https://www.youtube.com/watch?v=UJTd3srVt9E

而 Orange Pi Zero 有 built-in audio out, 實測d聲算是OK..........

TOP

回覆 6# zex


    用USBsound card 可能也行

TOP

本帖最後由 dsscss 於 2017-6-17 18:49 編輯

你指這個?
https://github.com/espressif/ESP8266_MP3_DECODER.git
可以啊...

1) DOWNLOAD ESP8266 LUBUNTU VIRTUAL BOX IMAGE
2) sudo apt-get update
3) sudo apt-get install git
4) git clone https://github.com/espressif/ESP8266_MP3_DECODER.git
5) cd ESP8266_MP3_DECODER/
6) grep PWM_HACK -r -n .

./mp3/user/playerconfig.h:85://#define PWM_HACK
./mp3/user/user_main.c:162:#if defined(PWM_HACK)
./README.md:96:define PWM_HACK. This uses some code to abuse the I2S module as a


7) Uncomment this line: "#define PWM_HACK" at ./mp3/user/playerconfig.h:85
8) cd mp3
9) make COMPILE=gcc BOOT=none APP=0 SPI_SPEED=40 SPI_MODE=QIO SPI_SIZE=1024
---------------------------------------------------------------------------------------------
Result:
!!!
No boot needed.
Generate eagle.flash.bin and eagle.irom0text.bin successully in folder bin.
eagle.flash.bin-------->0x00000
eagle.irom0text.bin---->0x40000
!!!

TOP

本帖最後由 xiao 於 2017-6-20 00:47 編輯
你指這個?

可以啊...

1) DOWNLOAD ESP8266 LUBUNTU VIRTUAL BOX IMAGE
2) sudo apt-get update
3) sudo a ...
dsscss 發表於 2017-6-17 17:42


看來這個公司終於真正知道了要公開資料才有人玩
不過之前 BUILD 一直都不行, 出了這個報錯, 沒頭緒所以還沒繼續玩, 更別說讀碼理解
build error.JPG

TOP

本帖最後由 xiao 於 2017-6-20 23:02 編輯

原來誤會了這個項目, 證明暫時只能在 RTOS_SDK 底下編譯. NonOS 底下應該編譯不成. 這家公司的說明文件還有待加強, starting guide 還有很多不完善或錯漏的地方.

今天有空再來編譯一次, 連到 RTHK2 聽廣播, OK的, 音質還勉強可以, 整個結構是簡單, 一個 ESP8266, 一個喇叭, 一個電池就好了.

但有些限制, 寫碼那個人設計暫時只有一個台, 還沒細看有沒有調台的功能, 純粹Demo. 到底有沒有用....是玩具可以自己亂改.

真要聽網台, android 手機下個APP也可, 有網路收音機也賣很貴. 這個玩具便宜, 10元就有.


電路圖, 用兩條線接擴音喇叭,
用 ESP-1 : IO3, GND
用 NodeMCU : RX, GND
xiaolaba_ESP8266_web_radio_circuit.jpg


凌亂的搭線
xiaolaba_ESP8266_web_radio_build.jpg


確認連結 RTHK2, 有電台聲音了.
Server : stm2.rthk.hk
Path : radio2
Port : 80
xiaolaba_ESP8266_web_radio_rthk2.jpg


感謝上面兩位提供資訊的網友提點.

TOP