macsbug

Just another WordPress.com site

Make the FM Radio in ESP8266

leave a comment »

TEA5767 FM Stereo Radio と ESP8266 で FM Radio を作りました。        2016.04.04

FM局の切り替えは 傾ける事により「進む」「戻る」の動作をします。
右に傾けると次の局へ進み 後ろへ傾けると前の局へ戻ります。
この機能はボールスイッチのオン・オフで行っています。



準備:
1. D1 mini with TELEC:(D1 mini+ESP-WROOM-02 with TELEC):986円。
2. 76〜108MHz TEA5767 FM Stereo Radio (アンテナ付き):ebay = 499円。
3. Ball Swicth。ebay = 25円。
4. I2C Logic Level Converter Bi-Directional Module 5V~3.3V:ebay = 56円。
_  FM Receiver は 5V動作の為、3.3V to 5V レベルコンバーターを使用する。

5. 切れる基板、コネクター、配線材、ケース。
6. LIBRARY:simonmonk / arduino_TEA5767:周波数のみ操作が出来る。


配線図:
+5V — FM_Rx 5V。+3.3V — OLED Vcc。
D1 mini_SDA(D2,4) — OLED_SDA — FM Rx_SDA。
D1 mini_SCL( D1 ,5) — OLED_SCL — FM Rx_SCL。
Ball Switch 1 — D1 mini D6(12)、GND。
Ball Switch 2 — D1 mini D7(13)、GND。

配線と組み立て:最初に電源配線、次に I2C配線すると楽です。


メモ:
APPLICATION NOTE:Low voltage FM stereo radio with TEA5767/68
TEA5767 FM Stereo Radio:I2C信号を使用し アンテナ入力とスピーカ出力端子がある。
_    ヘッドホンアンプTDA1308搭載でAudio出力にはボリューム機能はありませんが
_    イヤホンで聴ける大きさです。ebayの製品はアンテナが含まれます。
_    電源:TEA5767は 13mA,2.5〜5Vで3.3Vで動作可能ですが このボードの規格
_       が5Vの為 I2C(SDA,SCL)へは Level Converter を接続しました。
部品価格:76〜108MHz TEA5767 FM Stereo Radioは ebayで499円。(記載時の価格)
_    aitendoは送料込みで 2040円。注:アンテナが付属品かは未記載。
ESP8266の役割:ESP8266からは I2Cで周波数を送るだけです。
_       例:radio.setFrequency( 80.0 );
WiFi 機能:スケッチでは WiFi機能は使用していません。
課題:Library:mroger/TEA5767 は高度な機能があるが まだ動作しないため課題とする。
_  その後 Library の記述に原因がある事が判明しました。:追記:2016.04.05
消費電力:USB 5V の消費電力は 130mA です。
ワイヤレス給電:消費電力が 130 mA ですのでワイヤレス給電でも充分使えています。


感想:
ラジオなんて何年も聞いていないが、作ったラジオからの曲は格別な音なんですね。
たれ流しで聞きながら過ごしたりするのもいいだろうとか気楽な気分にさせてくれる。
昔、秋葉原でちょっとブームになった 格安500円のUSBスピーカーアンプを繋ぐ。
けっしていい音とは言えませんが この単純な感じが いい雰囲気を出しています。


スケッチ:

// TEA5767 FM RADIO     : 2016.04.04  macsbug     //
#include <Wire.h>                                 //
#include <TEA5767Radio.h>                         // FM Radio
#include "SSD1306.h"                              // with mod SSD1306.h
#include "SSD1306Ui.h"                            // OLED
extern "C" {
  #include "user_interface.h" 
}                                                 //
TEA5767Radio radio = TEA5767Radio();              //
SSD1306 display(0x3c,4,5);                        // OLED Initialize
float f[] = {                                     // FM Frequency
 80.0,      81.3,   82.5,    88.3,      89.7};    //
 90.5, 91.6,   93.0,    77.3 };                   //
String n[] = {                                    // FM Name
"FM TOKYO","JWave","NHK FM","Roppongi","Inter FM",//
"TBS","BUNKA","NIPPON","LOVEARTH"};               //
int fr = 0;                                       // Frequency
int ck = 0;                                       // chattering ck

void setup(){                                     //
  pinMode (12, INPUT_PULLUP );                    // switch sens RL
  pinMode (13, INPUT_PULLUP );                    // switch sens FB
  Wire.begin(4,5);                                //
  display.init();                                 // OLED
  display.setFont(ArialMT_Plain_24);              //
  display.setTextAlignment(TEXT_ALIGN_LEFT);      //
  display.displayOn();                            //
  display.clear();                                //
  display.drawString(  0, 0, "ESP8266" );         // OLED
  display.drawString(  0,32, "FM RADIO");         //
  display.display();                              //
  delay(3000);                                    //
  display.clear();                                //
  display.drawString(  0, 0, n[fr] );             //
  display.drawString(  0,32, String(f[fr]) );     //
  display.drawString( 70,32, "MHz" );             //
  display.display();                              //
  radio.setFrequency( f[fr] );                    // FM Radio
  delay(5000);                                    //
}                                                 //

void loop(){                                      //
  ck = 0;                                         //
  if ( digitalRead(12) == LOW){ freq(12,+1);}     // + freq:RL
  if ( digitalRead(13) == LOW){ freq(13,-1);}     // - freq:FB
}                                                 //

void freq(int gpio, int dir){                     //
  for ( int i = 0; i < 60; i++){ delay(10);       // chattering ck
    if ( digitalRead(gpio) == HIGH ){ ck = 1;}    // RL/FB
  } // 60 x 10 msec if ( ck == 0 ){               // Frequency Change
  fr = fr + dir; if (fr > 8 || fr < 0 ){fr = 0;}  // position
    display.clear();                              // OLED
    display.drawString(  0, 0, n[fr]);            // Name
    display.drawString(  0,32, String(f[fr]));    // Frequency
    display.drawString( 70,32, "MHz" );           //
    display.display();                            //
    radio.setFrequency( f[fr] );                  // Frequency set
    delay(3000);                                  //
  }                                               //
}                                                 //


 

Written by macsbug

4月 4, 2016 @ 8:50 am

カテゴリー: ESP8266

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。