/*
SI4735 および ESP32 用の Arduino ライブラリのテストと検証。
注意:テストの際は、コンセントに接続されたコンピューターの使用は避けてください。
このスケッチを使用する主な利点は次のとおりです:
1) 回路が正常に動作しているかどうかを確認する簡単な方法です。
2) ラジオを動作させるために、ディスプレイデバイスを接続する必要はありません。
3) 音量と周波数を変更するために、ボタンやエンコーダーを接続する必要はありません。
4) アークドゥのIDEがあれば、ラジオを制御できます。
この設計は、以下の環境で正常に動作を確認しています。
1) Pro Mini 3.3V
2) UNO(電圧変換器を使用)
3) Arduino Yún
4) アークドゥー メガ(電圧変換器を使用)
5) ESP32 (LOLIN32 WEMOS)
| Si4732 | Function | ESP LOLIN32 WEMOS (GPIO) |
| ピン 09 | RESET | 42 (GPIO12) |
| ピン 12 | SDIO | 15 (SDA/GPIO15) |
| ピン 11 | SCLK | 16 (SCL/GPIO16) |
このスケッチから始めることを強くお勧めします。
プロトタイプに関するドキュメント: https://pu2clr.github.io/SI4735/
PU2CLR Si47XX API ドキュメント: https://pu2clr.github.io/SI4735/extras/apidoc/html/
リカルド・リマ・カラッティによる、2019年11月。
*/
インクルード<Arduino.h>
インクルード<Wire.h>
インクルード<SI4735.h>
#define RESET\_PIN 42 // GPIO12
```
#define TOUCH_BAND_BUTTON_UP 13 // 次のバンド
```
```
#define TOUCH_BAND_BUTTON_UP 13 // 次のバンド
``` (GPIO13)
#define TOUCH_バンド_ボタン_ダウン 14 // 前のバンド (GPIO14)
// ESP32 の I2C バス ピン
#define ESP32_I2C_SDA 15 // GPIO21
```
#define ESP32_I2C_SCL 16 // GPIO22
```
```
#define ESP32_I2C_SCL 16 // GPIO22
```
#define CAPACITANCE 30
#define AM_FUNCTION 1
#define FM_FUNCTION 0
uint16\_t 現在の周波数;
uint16\_t 以前の周波数;
uint8\_t bandwidthIdx = 0;
const char *bandwidth[] = {「6」、 「4」、 「3」、 「2」、 「1」、 「1.8」、 「2.5」};
SI4735 si4735;
ヘルプを表示する関数
{
シリアルに「FでFM、AでMW、LでLW、そして1でSWを選択」と出力します。
シリアルポートに出力する文字列: "U" を入力すると周波数が上がり、"D" を入力すると周波数が下がります。
シリアル出力: "Sまたはsを入力して、駅を上下に移動します"
シリアルで「+」または「-」を入力して音量を上げたり下げてください」と表示します。
`Serial.println("現在の状態を表示するには、0を入力してください");`
シリアル通信で「B」と入力すると、帯域フィルタを変更できます。
シリアルに「?」を入力すると、ヘルプが表示されます。
シリアルポートに出力する文字列: "=================================================="
delay(1000);
}
現在の周波数表示
ステータスを表示する関数
{
si4735.getStatus() の状態を取得する。
si4735.getCurrentReceivedSignalQuality() を取得する。
`Serial.print("現在、周波数帯は次のとおりです:");`
もし、si4735 が現在の FM トーンであることを示す場合
{
`Serial.print(String(currentFrequency / 100.0, 2));`
シリアル出力: "MHz "
`Serial.print((si4735.getCurrentPilot()) ? "STEREO" : "MONO");` を日本語に翻訳すると:
`Serial.print((si4735.getCurrentPilot()) ? "ステレオ" : "モノラル")`
}
else
{
シリアル通信で現在の周波数を表示する。
シリアル出力: "kHz"
}
シリアル出力: " [SNR:
シリアル通信で、si4735の現在のSNR(信号対ノイズ比)を取得し、表示する。
`Serial.print("dB");`
`Serial.print(" Signal:");` を日本語に翻訳すると、以下のようになります。
`Serial.print(" 信号:")`
シリアル通信で、si4735の現在のRSSI値を表示する。
シリアル出力: "dBuV]"
}
int touchUp, touchDown;
int readX(int ピン) {
整数型の変数 val を宣言する。
val = 0;
(int i が 0 から開始され、i が) < 50; i++;
val に touchRead(ピン) の値を加算する。
(val / 50) を返す。
}
void setup()
{
Serial.begin(115200);
シリアル通信が完了するまで繰り返す。
digitalWrite(RESET\_PIN, HIGH);
シリアルポートに出力する文字列:「AMおよびFMラジオ局のチューニングテスト。」
ヘルプを表示します。
// 以下のような行は、ESP32でI2Cピンを設定するために必要となる場合があります。
Wire.setPins(ESP32\_I2C\_SDA, ESP32\_I2C\_SCL);
ワイヤの初期化を行います。
delay(500);
si4735.setup(RESET_PIN, 0, FM_FUNCTION, SI473X_ANALOG_AUDIO, 1, 0);
// デフォルトのラジオ機能と周波数帯(FM;84~108MHz;103.9MHz;ステップ100kHz)を開始する。
si4735.setFM(8400、10800、10390、10);
delay(500);
現在の周波数 = 前の周波数 = si4735.getFrequency()
si4735.setVolume(55);
ステータスを表示する();
}
// メイン
void loop()
{
touchUp = readX(TOUCH_BAND_ボタン_アップ);
touchDown = readX(TOUCH_BAND_ボタン_ダウン);
シリアルポートでデータが利用可能かどうかを確認する。 > 0)
{
シリアルポートから読み取った文字を、変数 char key に格納する。
切り替え (キー)
{
ケース '+'
si4735.ボリュームを上げる();
中断
ケース:-
si4735.音量を下げる();
中断
ケース 'a':
ケース 'A':
si4735.setAM(570kHz、1710kHz、810kHz、10W);
中断
ケース 'f':
ケース 'F':
si4735.setFM(8600、10800、10390、10);
中断
ケース '1':
si4735.setAM(9400、9990、9600、5);
中断
ケース:'U'
ケース 'u':
si4735.周波数調整()
中断
ケース:'D'
ケース 'd':
si4735.周波数ダウン();
中断
ケース 'b':
ケース 'B':
もし、si4735 が現在の FM トーンであることを示す場合
{
シリアル出力: "FMには使用できません"
}
else
{
もし、`bandwidthIdx` が > 6)
bandwidthIdx = 0;
si4735.setBandwidth(帯域インデックス、1);
`Serial.print("Filter - Bandwidth: ");`
Serial.print(bandwidth[bandwidthIdx].toString());
シリアル出力: "kHz"
bandwidthIdxをインクリメントします。
}
中断
ケース:'S'
si4735.ステーションを上げる関数を実行します。
中断
ケース 's':
si4735.ステーションの停止を要求します。
中断
ケース '0':
ステータスを表示する();
中断
ケース '?':
showHelp() を実行する。
中断
デフォルト:
中断
}
} それ以外の場合、(touchUp < (容量)// 次の帯へ移動
{
si4735.seekStationUp();
delay(100);
}
それ以外の場合、(タッチダウン) < (容量) ) // 前の帯へ移動
{
si4735.ステーションの停止を要求します。
delay(100);
}
delay(100);
現在の周波数 = si4735.getCurrentFrequency();
もし、現在の周波数と前の周波数が異なっていた場合
{
前の周波数 = 現在の周波数;
ステータスを表示する();
delay(300);
}
}