Semua Tentang Belajar Teknologi Digital Dalam Kehidupan Sehari - Hari

  • IC Timer 555 yang Multifungsi

    IC timer 555 adalah sirkuit terpadu (chip) yang digunakan dalam berbagai pembangkit timer, pulsa dan aplikasi osilator. Komponen ini digunakan secara luas, berkat kemudahan dalam penggunaan, harga rendah dan stabilitas yang baik

  • Data Science

    Mengulik Digitalisasi data statistik dengan bantuan python untuk pemanfaatan di bidang transportasi, kesehatan, keuangan dan masih banyak lagi

  • Artificial Intelligence - Pengenalan Object

    Menghadirkan pemanfaatan AI dengan praktek-praktek yang mudah diikuti - cocok untuk mahasiswa yang mencari ide tugas akhir

  • JAM DIGITAL 6 DIGIT TANPA MICRO FULL CMOS

    Jika anda pencinta IC TTL datau CMOS maka project jam digital ini akan menunjukkan bahwa tidak ada salahnya balik kembali ke dasar elektronika digital , sebab semuanya BISA dibuat dengan teknologi jadul

  • Node Red - Kontrol Industri 4.0

    Teknologi kontrol sudah melampaui ekspektasi semua orang dan dengan kemajuan dunia elektronika, kini semakin leluasa berkreasi melalui Node Red

Selasa, 02 September 2025

[ESP32-A2DP] Talkie Suara Digital dari Era 80-an: Pelaporan Suhu DHT11 Lewat Audio

Bayangkan sebuah suara robotik yang khas, kaku, namun jelas – seperti suara dari film fiksi ilmiah tahun 1980-an. Suara itu bukan hasil rekaman manusia, bukan pula hasil AI modern seperti Google Assistant atau Siri. Suara itu adalah hasil dari sintesis vokal berbasis Linear Predictive Coding (LPC), teknologi canggih di masanya yang diusung oleh chip legendaris: TMS5100 dari Texas Instruments.



Hari ini, dengan ESP32 dan library modern seperti TalkiePCM ( kreasi Phill Schatzmann baca disini ), kita bisa menghidupkan kembali suara ikonik itu – bukan hanya untuk nostalgia, tapi untuk aplikasi nyata. Dalam proyek ini, saya berhasil membuat sistem pelaporan suhu dan kelembaban otomatis menggunakan sensor DHT11, yang kemudian "dibacakan" oleh suara digital vintage dan dikirim ke speaker Bluetooth. Mari kita telusuri sejarah menakjubkan di balik teknologi ini, dan bagaimana ia masih relevan di era IoT.


Dari Lab TI ke Mainstream: Kelahiran TMS5100 dan Revolusi Speech Synthesis

Pada akhir 1970-an, Texas Instruments (TI) merilis sebuah chip revolusioner: TMS5100. Ini bukan sekadar chip audio biasa. TMS5100 adalah prosesor LPC (Linear Predictive Coding) pertama yang dikomersialkan, mampu mensintesis suara manusia dari data terkompresi dengan sangat efisien – bahkan dengan memori yang sangat terbatas.

Teknologi LPC bekerja dengan memodelkan saluran vokal manusia secara matematis, bukan merekam suara asli. Alih-alih menyimpan audio mentah, chip ini menyimpan parameter seperti frekuensi fonasi, resonansi (formant), dan energi suara. Saat diaktifkan, ia "membangun" suara dari parameter ini, menghasilkan ucapan yang terdengar mekanis, tetapi cukup jelas untuk dipahami.


TMS5100 menjadi jantung dari berbagai produk populer:




  • Speak & Spell (1978): Mainan edukasi TI yang mengajarkan ejaan dengan suara robotik yang ikonik.
  • TI-99/4A Home Computer: Dengan modul ekspansi speech, komputer rumahan ini bisa berbicara.
  • Game Arcade Atari: Suara Darth Vader yang mengintimidasi di Star Wars Arcade (1983) dihasilkan oleh TMS5220, penerus TMS5100.
  • BBC Micro dan Apple Echo II: Menunjukkan bahwa teknologi ini diadopsi luas di dunia komputasi awal.
  • Suara dari chip-chip ini menjadi simbol era digital awal – suara dari masa depan yang dibayangkan di masa lalu.


Talkie: Membangkitkan Kembali Warisan TI di Abad 21

Talkie adalah proyek open-source yang menghidupkan kembali arsitektur TMS5100 secara perangkat lunak. Dikembangkan oleh Peter Knight dan dikembangkan lebih lanjut oleh Phil Schatzmann (pschatzmann), Talkie bukan emulator perangkat keras, melainkan reimplementasi algoritma LPC yang digunakan oleh TMS5100, dikompilasi menjadi kode C++ yang ringan dan platform-independent.


Yang membuat Talkie sangat menarik:

  • Header-only dan ringan: Cocok untuk mikrokontroler seperti ESP32.
  • Menghasilkan PCM 16-bit @ 8 kHz: Format dasar yang bisa diproses lebih lanjut.
  • Vokabular siap pakai: Termasuk Vocab_US_Large.h yang berisi ratusan kata seperti "temperature", "is", "degrees", "button", dan angka.
  • Kemampuan baca angka dan float: Bisa mengucapkan angka desimal secara otomatis.

Contoh vocabulary yang paling lengkap dan bisa kamu kreasikan sendiri  jika ada waktu : https://github.com/ptwz/python_wizard



Dengan Talkie, kita tidak hanya mendapatkan suara vintage – kita mendapatkan mesin TTS (Text-to-Speech) analog digital yang bisa digunakan untuk sistem informasi otomatis, tanpa bergantung pada cloud atau AI besar.


Proyek: Sistem Pelaporan Suhu Otomatis dengan ESP32 dan Bluetooth

Saya memanfaatkan kekuatan Talkie untuk membuat sistem yang fungsional dan futuristik-nostalgik sekaligus:


ESP32 membaca data dari sensor DHT11, lalu "mengucapkan" suhu dan kelembaban melalui speaker Bluetooth dengan suara robotik khas tahun 80-an. Jika tidak ada aktivitas selama 10 detik, sistem secara otomatis melaporkan kondisi terkini. 


Arsitektur Sistem

  • Sensor: DHT11 membaca suhu & kelembaban.
  • Sintesis Suara: Library TalkiePCM menghasilkan ucapan dari vokabular TI.
  • Konversi Format: Audio 8 kHz dari Talkie di-upsample ke 44.1 kHz agar kompatibel dengan Bluetooth A2DP.
  • Output Nirkabel: Data dikirim via A2DPStream ke speaker Bluetooth.
  • Interaksi: Dua tombol fisik untuk memicu pesan khusus ("Button one is press").
  • Integrasi dengan AudioTools


Karena Talkie hanya menghasilkan data PCM mentah, saya menggunakan AudioTools oleh pschatzmann untuk menghubungkannya ke dunia nyata:

  1. FormatConverterStream: Mengubah 8kHz → 44.1kHz.
  2. BufferedStream: Menjamin aliran data halus.
  3. A2DPStream: Mengirim audio ke Bluetooth dengan nama perangkat "K1".


FormatConverterStream out(a2dp);

BufferedStream bs(1024, out);

TalkiePCM voice(bs, 2); // Output ke stream dengan stereo



Setiap kali saya memanggil:


voice.say(sp3_TEMPERATURE);

voice.sayFloat(t, 2, 0, 1);

voice.say(sp3_CELCIUS);

bs.flush();


...ESP32 secara real-time menghasilkan suara "temperature is twenty three point five degrees" – dengan aksen robotik yang khas, lalu mengirimkannya ke speaker.


Berikut adalah contoh kode lengkap, sesuaikan dengan pin esp32 yg kamu pakai:

#include "AudioTools.h"
#include "AudioTools/AudioCodecs/CodecMP3Helix.h"
#include "AudioTools/AudioLibs/A2DPStream.h"
#include "TalkiePCM.h"
#include "Vocab_US_Large.h"
#include "DHT.h"

// Definisikan pin tombol
const int PIN_BUTTON_1 = 22; // Tombol untuk memutar audio 1
const int PIN_BUTTON_2 = 21; // Tombol untuk memutar audio 2

// === Bluetooth Name Sesuaikan dengan nama speaker kamu ===
const char* BT_NAME = "K1";

// === Audio Info seperti di contoh ===
AudioInfo from(8000, 2, 16);  // TTS (input: 8kHz, stereo - meski mono, kita isi 2)
AudioInfo to(44100, 2, 16);   // A2DP (output: 44.1kHz, stereo)

// === Stream ===
A2DPStream a2dp;
FormatConverterStream out(a2dp);
BufferedStream bs(1024, out);  // Buffer untuk smooth playback
TalkiePCM voice(bs, from.channels);

#define DHTTYPE DHT11  //Sensor DHT11
const int dhtPin = 23; //PIN DHT11 di ESP32


DHT dht(dhtPin, DHTTYPE);

// === Timer Idle ===
unsigned long lastActivity = 0;
const unsigned long IDLE_TIMEOUT = 10000; // 30 detik

void setup() {
  Serial.begin(115200);

  pinMode(PIN_BUTTON_1, INPUT_PULLUP);
  pinMode(PIN_BUTTON_2, INPUT_PULLUP);
    
  AudioToolsLogger.begin(Serial, AudioToolsLogLevel::Info);
  Serial.println(" TalkiePCM to A2DP - Dengan Idle Timer 30 Detik");
   
  // Setup konversi format: 8kHz → 44.1kHz, mono → stereo
  out.begin(from, to);
  
  // Setup Bluetooth
  auto cfg = a2dp.defaultConfig(TX_MODE);
  cfg.name = BT_NAME;
  cfg.silence_on_nodata = true;
  a2dp.begin(cfg);
  a2dp.setVolume(0.8);

  delay(2000); // Beri waktu Bluetooth stabil

  Serial.println(" Siap. Play Suhu dan Tekan tombol kapan saja...");

  dht.begin();

  playTemp();
  // Simpan waktu terakhir aktivitas
  lastActivity = millis();
}


void playTemp(){
   
 
    float h = dht.readHumidity();
    float t = dht.readTemperature();

    bool fail = false;

    if (isnan(h) || isnan(t)) {
      Serial.println("Failed to read from DHT sensor!");
      fail =true;
    }
    
    Serial.print("Humidity: "); 
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: "); 
    Serial.print(t);
    Serial.println(" °C ");
  
    //ngomong temp
    voice.say(sp4_THE);
    voice.say(sp3_TEMPERATURE);
    voice.say(sp2_IS);
    if(!fail){
       voice.sayFloat(t,2,0,1);
       voice.say(sp3_CELCIUS);
      }
     else{
       voice.say(sp2_DEVICE);
       voice.say(sp3_ERROR); 
     }
    delay(200);
    voice.say(sp4_PLEASE);
    voice.say(sp2_PRESS);
    voice.say(sp2_A);
    voice.say(sp2_BUTTON);
    bs.flush();
  }

void loop() {
  unsigned long now = millis();

  // Cek tombol 1
  if (digitalRead(PIN_BUTTON_1) == LOW) {
    Serial.println(" Tekan 1: Button one is press");
    delay(50);
    if (digitalRead(PIN_BUTTON_1) == LOW) {
      voice.say(sp2_BUTTON);
      voice.say(sp2_ONE);
      voice.say(sp2_IS);
      voice.say(sp2_PRESS);
      bs.flush();
      lastActivity = now; // Reset timer
    }
    while (digitalRead(PIN_BUTTON_1) == LOW) delay(10);
  }

  // Cek tombol 2
  if (digitalRead(PIN_BUTTON_2) == LOW) {
    Serial.println(" Tekan 2: Button two is press");
    delay(50);
    if (digitalRead(PIN_BUTTON_2) == LOW) {
      voice.say(sp2_BUTTON);
      voice.say(sp2_TWO);
      voice.say(sp2_IS);
      voice.say(sp2_PRESS);
      bs.flush();
      lastActivity = now; // Reset timer
    }
    while (digitalRead(PIN_BUTTON_2) == LOW) delay(10);
  }

  // Cek idle: jika tidak ada aktivitas selama 10 detik
  if (now - lastActivity > IDLE_TIMEOUT) {
    Serial.println(" Idle 10 detik: memutar suhu");

    playTemp();
    lastActivity = now; // Reset timer setelah main
  }

  delay(10); // Stabilisasi loop
}





Fitur Cerdas: Mode Idle Otomatis

Salah satu fitur menarik adalah mode idle. Jika tidak ada tombol yang ditekan selama 10 detik, sistem otomatis memutar pembacaan suhu terbaru:


Ini membuat sistem sangat cocok untuk:


  • Panel informasi cuaca mini di rumah.
  • Sistem monitoring IoT yang memberi laporan berkala.
  • Instalasi seni interaktif dengan nuansa retro-futuristik.


Mengapa Ini Penting di Era Modern?

Di tengah dominasi AI dan cloud, proyek seperti ini mengingatkan kita bahwa:


  • Komputasi edge bisa tetap cerdas tanpa internet.
  • Efisiensi dan kemandirian lebih penting daripada kompleksitas.
  • Nostalgia teknologi bisa menjadi inspirasi desain.
  • Talkie tidak hanya tentang suara – ia adalah penghormatan terhadap inovasi masa lalu yang masih bisa digunakan hari ini untuk membuat sesuatu yang unik, fungsional, dan menyenangkan.


Kesimpulan: Masa Lalu yang Masih Bisa Berbicara

Dengan kombinasi:

  • Sejarah chip TMS5100,
  • Rekayasa ulang oleh TalkiePCM,
  • Kemudahan integrasi melalui AudioTools,
  • Dan kreativitas dalam aplikasi IoT,

Saya berhasil membuat sistem yang bukan hanya bekerja, tapi berkarakter. Suara robotik yang keluar dari speaker Bluetooth bukan sekadar informasi – ia adalah nada waktu, pengingat bahwa teknologi lama tetap bisa bernyawa di tangan pembuat yang kreatif.

Jika Anda ingin membuat proyek IoT yang tidak hanya pintar, tapi juga punya jiwa, cobalah hidupkan kembali suara dari masa lalu. Karena terkadang, masa depan terdengar seperti tahun 1982.








Proyek ini menggunakan: ESP32, DHT11, TalkiePCM, Vocab_US_Large, AudioTools, dan A2DP. Semua kode open-source dan tersedia untuk dikembangkan lebih lanjut.

Share:

[ESP32-A2DP] MP3 player menggunakan SD Card dan kirim ke speaker Bluetooth

Pada artikel sebelumnya, kita telah membahas cara membuat suara sirene digital menggunakan ESP32 dan mengirimkannya melalui Bluetooth A2DP dengan bantuan library AudioTools oleh pschatzmann. Kali ini, kita akan melangkah lebih jauh dengan memanfaatkan kemampuan ESP32 untuk memutar file audio MP3 dari kartu SD dan mengalirkannya ke perangkat speaker Bluetooth secara nirkabel menggunakan protokol A2DP.



Namun, ada satu hal penting yang perlu ditekankan: dengan konfigurasi dan library tertentu — khususnya kombinasi AudioSourceSDFAT, CodecMP3Helix, dan A2DPStream — sistem ini hanya mampu memutar semua file MP3 pada scdard secara otomatis dan berulang (loop), tanpa kemampuan memilih file lain secara dinamis. Artikel ini akan menjelaskan mengapa hal ini terjadi, bagaimana sistem bekerja, serta batasan-batasan teknis yang perlu dipahami oleh pengembang.


1. Arsitektur Sistem: Alur Pemutaran Audio

Untuk memutar file MP3 dari SD card ke speaker Bluetooth, kita membutuhkan beberapa komponen utama:


  1. ESP32 – Sebagai mikrokontroler utama.
  2. Kartu SD – Menyimpan file audio MP3.
  3. Library AudioTools – Framework audio modular oleh pschatzmann.
  4. Codec MP3Helix – Untuk mendekode file MP3.
  5. A2DPStream – Untuk mengirim audio ke perangkat Bluetooth.
  6. AudioSourceSDFAT – Untuk membaca data dari SD card.






Alur kerjanya adalah:


  1. ESP32 membaca file MP3 dari SD card.
  2. File tersebut didekode menggunakan codec MP3Helix.
  3. Data audio dalam format PCM dikirim ke A2DPStream.
  4. A2DPStream mengirimkan data ke perangkat Bluetooth (seperti speaker atau headphone).
  5. Proses ini berjalan terus-menerus (loop) selama perangkat menyala.


2. Kode Dasar untuk Pemutaran MP3 via A2DP

Berikut adalah contoh kode minimal menggunakan library yang disebutkan:

#define HELIX_LOGGING_ACTIVE true

#include "AudioTools.h"
#include "AudioTools/AudioLibs/A2DPStream.h"
#include "AudioTools/Disk/AudioSourceSDFAT.h"
#include "AudioTools/AudioCodecs/CodecMP3Helix.h"

// === SD Card Pins ===
#define SD_CS   5
#define SD_MOSI 23
#define SD_MISO 19
#define SD_SCK  18

// === Konfigurasi ===
const char *startFilePath = "/"; //pindahkan file mp3 ke sdcard 
const char* ext = "mp3";

// === Objek Audio ===
AudioSourceSDFAT source(startFilePath, ext);
A2DPStream out;
MP3DecoderHelix decoder;
AudioPlayer player(source, out, decoder);

void setup() {
  Serial.begin(115200);
  AudioToolsLogger.begin(Serial, AudioToolsLogLevel::Warning);

  // Setup SPI dengan pin kamu
  SPI.begin(SD_SCK, SD_MISO, SD_MOSI, SD_CS);

  // Setup player
  player.setVolume(0.8);  // 0.0 - 1.0
  player.begin();

  // Setup Bluetooth
  auto cfg = out.defaultConfig(TX_MODE);
  cfg.silence_on_nodata = true;
  cfg.name = "K1";  //  Ganti jadi nama speaker BT kamu
  out.begin(cfg);

  Serial.println(" Siap memutar MP3 ke K1...");
}

void loop() {
  player.copy();  // Otomatis mainkan file .mp3 dari SD
}



3. Bagaimana Pemilihan File Dilakukan?

Perhatikan bahwa dalam kode di atas, tidak ada perintah eksplisit untuk memilih nama file tertentu. Ini karena AudioSourceSDFAT — dalam konfigurasi default — secara otomatis membuka file pertama yang ditemukan di root direktori SD card dengan ekstensi .mp3.


Artinya:


  • Jika Anda memiliki file alarm.mp3, music.mp3, dan siren.mp3 di SD card, maka satu persatu fileakan diputar — biasanya yang pertama menurut urutan pembacaan sistem file (FAT).
  • Tidak ada fungsi seperti source.open("siren.mp3") yang tersedia secara langsung dalam implementasi dasar AudioSourceSDFAT saat digunakan dengan AudioPlayer dan A2DPStream.


4. Mengapa Tidak Bisa Memilih File Secara Bebas?

Ada beberapa alasan teknis mengapa pemilihan file dinamis tidak didukung secara langsung dalam pendekatan ini:


a. Abstraksi Tingkat Tinggi

Library AudioTools dirancang untuk mempermudah alur data audio, bukan sebagai sistem manajemen file. AudioSourceSDFAT bertindak sebagai source pasif yang hanya menyediakan data mentah, dan AudioPlayer mengharapkan sumber yang siap digunakan tanpa intervensi pengguna.


b. Keterbatasan A2DPStream

A2DPStream adalah output stream yang bersifat continuous. Begitu koneksi Bluetooth terbentuk, ia mengharapkan aliran data tanpa henti. Jika kita ingin berganti file, kita harus:


  • Menghentikan stream,
  • Mengganti file di sumber,
  • Memulai ulang koneksi A2DP.
  • Proses ini tidak stabil dan sering menyebabkan koneksi Bluetooth terputus atau speaker gagal reconnect.


c. Tidak Ada Event Callback untuk Akhir File

Dalam konfigurasi ini, saat file MP3 selesai diputar, AudioPlayer secara otomatis melakukan loop ke awal file yang sama, bukan melanjutkan ke file berikutnya. Tidak ada event seperti onFinish() yang bisa digunakan untuk beralih ke file lain.


5. Sistem Ini Dirancang untuk Pemutaran Loop Otomatis

Justru karena keterbatasan ini, sistem ini sangat cocok untuk aplikasi yang membutuhkan pemutaran terus-menerus dari satu file, seperti:


  • Alarm atau sirene darurat yang harus berbunyi terus hingga dimatikan.
  • Panduan suara di pameran yang memutar satu rekaman berulang-ulang.
  • Speaker background music di toko kecil dengan satu playlist statis.


Keuntungannya:


  • Stabil: Tidak ada perpindahan file yang bisa merusak koneksi Bluetooth.
  • Sederhana: Tidak perlu logika kompleks untuk manajemen file.
  • Hemat sumber daya: Cocok untuk sistem embedded dengan memori terbatas.


6. Solusi Alternatif (Jika Ingin Pemilihan File)

Jika Anda benar-benar membutuhkan kemampuan memilih file, beberapa opsi yang bisa dipertimbangkan:


  • Gunakan SPIFFS atau SD card dengan daftar file statis dan buat logika manual untuk mengganti sumber.
  • Restart seluruh pipeline audio (player.end(), ganti file, player.begin()).
  • Gunakan Bluetooth Sink + ESP32 sebagai penerima, lalu keluarkan ke DAC/I2S — lebih stabil untuk kontrol file.
  • Gunakan platform lain seperti ESP32-S3 dengan dukungan RTOS dan codec lebih baik.
  • Namun, semua ini keluar dari lingkup kemudahan yang ditawarkan oleh AudioSourceSDFAT + A2DPStream secara default.


Silahkan baca bagaimana memutar file Mp3 untuk pembacaan LM35 disini : https://www.aisi555.com/2024/05/esp8266-kirim-data-suhu-lm35-lewat.html


7. Kesimpulan: Simplicity with a Trade-off

Kombinasi library:


#include "AudioTools.h"

#include "AudioTools/AudioLibs/A2DPStream.h"

#include "AudioTools/Disk/AudioSourceSDFAT.h"

#include "AudioTools/AudioCodecs/CodecMP3Helix.h"


menawarkan solusi cepat, mudah, dan stabil untuk memutar satu file MP3 dari SD card secara loop terus-menerus melalui Bluetooth A2DP.

Namun, pengguna harus menerima kenyataan bahwa sistem ini tidak dirancang untuk navigasi file atau pemilihan lagu dinamis. Ini bukan kelemahan, melainkan konsekuensi dari desain yang mengutamakan kesederhanaan dan keandalan.

Jika proyek Anda membutuhkan pemutaran otomatis tanpa intervensi, seperti sistem alarm, panduan otomatis, atau iklan berulang, maka pendekatan ini sangat ideal. Tapi jika Anda ingin membuat music player dengan playlist dan kontrol, Anda perlu mempertimbangkan arsitektur yang lebih kompleks.

Dengan memahami batasan ini sejak awal, Anda bisa merancang sistem yang realistis, efisien, dan sesuai kebutuhan — tanpa frustrasi karena ekspektasi yang salah terhadap kemampuan library.

AudioTools tetap menjadi salah satu library paling powerful untuk proyek audio di ESP32, selama kita tahu apa yang bisa dan tidak bisa dilakukannya.

Share:

[ESP32-A2DP] Berkenalan dengan library siap pakai AudioTools - Membuat Sirene

Dalam era Internet of Things (IoT), mikrokontroler seperti ESP32 telah menjadi pilihan populer karena kemampuannya yang luar biasa, termasuk konektivitas Wi-Fi dan Bluetooth. Salah satu fitur menarik dari ESP32 adalah dukungan terhadap Bluetooth A2DP (Advanced Audio Distribution Profile), yang memungkinkan perangkat mengirimkan aliran audio berkualitas tinggi ke perangkat audio nirkabel seperti speaker Bluetooth. Dengan memanfaatkan library AudioTools yang dikembangkan oleh pschatzmann, proses pengiriman audio melalui A2DP menjadi jauh lebih mudah dan terstruktur.





Pada artikel ini, kita akan membahas bagaimana ESP32 dapat digunakan untuk menghasilkan suara sirene digital dan mengirimkannya ke speaker Bluetooth menggunakan protokol A2DP dengan bantuan library AudioTools. Pembahasan akan mencakup dasar teori, arsitektur sistem, serta konsep pembangkitan sinyal audio secara real-time.


1. Apa itu A2DP dan Mengapa ESP32 Cocok untuk Ini?

A2DP adalah protokol Bluetooth yang memungkinkan transmisi data audio secara nirkabel dari sumber (seperti smartphone atau mikrokontroler) ke perangkat penerima (seperti headphone atau speaker). ESP32 dilengkapi dengan modul Bluetooth dual-mode (Classic Bluetooth dan BLE), sehingga mampu bertindak sebagai sumber audio A2DP (Source).

Dengan fitur ini, ESP32 bisa digunakan sebagai pemutar musik, interkom nirkabel, atau bahkan sistem peringatan seperti sirene darurat yang dikirim ke speaker Bluetooth di lokasi tertentu.


2. Peran Library AudioTools oleh pschatzmann

Salah satu tantangan dalam pengembangan aplikasi audio di ESP32 adalah kompleksitas manajemen buffer, codec, dan sinkronisasi aliran data. Di sinilah library AudioTools oleh pschatzmann sangat membantu. Library ini menyediakan abstraksi tingkat tinggi yang mempermudah proses pembuatan, manipulasi, dan transmisi audio.


Beberapa keunggulan AudioTools:

  1. Mendukung berbagai format audio (WAV, MP3, RAW, dll).
  2. Memiliki antarmuka modular untuk input, output, dan prosesor audio.
  3. Integrasi langsung dengan A2DP melalui BluetoothA2DPSink atau BluetoothA2DPSource.
  4. Mudah digunakan dengan sintaks yang intuitif.


Untuk proyek ini, kita akan menggunakan BluetoothA2DPSink agar ESP32 dapat menerima audio, tetapi karena tujuan kita adalah mengirim audio sirene, maka kita sebenarnya membutuhkan mode A2DP Source. Namun, perlu dicatat bahwa implementasi A2DP Source di ESP32 masih terbatas dibandingkan Sink. Oleh karena itu, alternatifnya adalah menghasilkan audio secara internal dan mengirimkannya melalui koneksi Bluetooth sebagai sumber virtual, atau menggunakan pendekatan lain seperti mengirim audio melalui DAC atau I2S, lalu memancarkannya via Bluetooth dari perangkat lain.

Namun, dengan perkembangan library AudioTools, pschatzmann telah menyediakan dukungan eksperimental untuk A2DP Source, yang memungkinkan ESP32 berperan sebagai pengirim audio. Ini adalah kunci dari proyek kita.


3. Konsep Pembangkitan Suara Sirene Digital

Suara sirene umumnya merupakan gelombang suara dengan frekuensi yang berubah-ubah secara periodik, seperti naik-turun (wailing) atau berdenyut (yelp). Untuk menghasilkan efek ini secara digital, kita bisa menggunakan osilator gelombang sinus dengan frekuensi yang dimodulasi terhadap waktu.


Secara matematis, sinyal sirene dapat direpresentasikan sebagai:


s(t)=A⋅sin(2π⋅f(t)⋅t)

di mana:

A adalah amplitudo (volume),

f(t) adalah frekuensi yang berubah terhadap waktu (misalnya, dari 500 Hz ke 1500 Hz secara linier).


Modulasi frekuensi ini bisa diimplementasikan dengan memvariasikan nilai frekuensi osilator dalam loop utama program. ESP32 cukup cepat untuk menghitung nilai sinus ini secara real-time menggunakan fungsi sin() dari C++ (dengan optimasi jika perlu).


4. Arsitektur Sistem

Berikut adalah komponen utama sistem:


  1. ESP32 – Sebagai otak sistem, menghasilkan sinyal audio dan mengelola koneksi Bluetooth.
  2. Library AudioTools – Menyediakan framework untuk pembangkitan dan transmisi audio.
  3. Bluetooth A2DP Source – Mengirimkan aliran audio ke perangkat penerima.
  4. Speaker Bluetooth – Perangkat yang menerima dan memutar suara sirene.


Alur kerja sistem:


  1. ESP32 menginisialisasi modul Bluetooth dalam mode A2DP Source.
  2. Secara berkala, ia menghasilkan sampel audio sirene (dalam bentuk array nilai 16-bit signed).
  3. Sampel ini dikirim ke buffer audio yang dikelola oleh AudioTools.
  4. Library AudioTools menangani enkapsulasi data ke format A2DP dan transmisi nirkabel.
  5. Speaker Bluetooth menerima data, mendekode, dan memutar suaranya.


5. Implementasi Teoritis - Praktek dengan AudioTools

Untuk membuat sirene, kita bisa membuat kelas atau fungsi yang menghasilkan sampel audio setiap waktu. Berikut adalah gambaran kode teoritis:

Silahkan download library yang sesuai di googling saja dengan kata kunci :  AudioTools - Pschatzmann dan ESP32-A2DP

Test 1 - Tone Generator : 

#include "BluetoothA2DPSource.h"
#include <math.h>

// Objek utama untuk mengelola koneksi Bluetooth
BluetoothA2DPSource a2dp_source;

// Frekuensi nada yang akan dihasilkan dalam Hz (A4)
#define A4_FREQUENCY 1000.0

// Variabel untuk melacak waktu/fase agar gelombang sinyal kontinu
static float m_time = 0.0;

// Fungsi callback untuk menghasilkan data audio
int32_t get_data_frames(Frame *frame, int32_t frame_count) {
  // Volume, dari -32,768 hingga 32,767
  float m_amplitude = 10000.0;
  // Interval waktu antar sampel, untuk sample rate 44.1 kHz
  float m_deltaTime = 1.0 / 44100.0;
  float pi_2 = PI * 2.0;

  // Isi buffer frame dengan data sinyal
  for (int sample = 0; sample < frame_count; ++sample) {
    // Hitung sudut untuk gelombang sinus
    float angle = pi_2 * A4_FREQUENCY * m_time;
    // Hasilkan sinyal
    int16_t signal = (int16_t)(m_amplitude * sin(angle));
    
    // Isi data ke kedua saluran (stereo)
    frame[sample].channel1 = signal;
    frame[sample].channel2 = signal;
    
    // Majukan waktu
    m_time += m_deltaTime;
  }
  return frame_count;
}

// Callback untuk melacak status koneksi
void connection_state_changed(esp_a2d_connection_state_t state, void *ptr){
  Serial.println(a2dp_source.to_str(state));
}

void setup() {
  Serial.begin(115200);
  a2dp_source.set_auto_reconnect(false);
  a2dp_source.set_on_connection_state_changed(connection_state_changed);
  a2dp_source.set_data_callback_in_frames(get_data_frames);
  a2dp_source.set_volume(100);
  a2dp_source.start("K1"); // Ubah K1 dengan nama speaker BT anda
}

void loop() {
  // Hanya jeda untuk mencegah watchdog timer
  delay(10);
}


Test 2- Sirene Generator : 

#include "AudioTools.h"
#include "BluetoothA2DPSource.h"

using namespace audio_tools;

// Generator dan Bluetooth
SineWaveGenerator<int16_t> sine_gen;
BluetoothA2DPSource a2dp_source;

// Konfigurasi sirene
#define SIRENE_FREQ_1 800.0f
#define SIRENE_FREQ_2 1000.0f
#define DURATION_S_TONE 0.5f  // 0.5 detik

// State
float current_frequency = SIRENE_FREQ_1;
float time_of_last_switch = 0.0f;
float m_time = 0.0f;
const float sample_rate = 44100.0f;

// Buffer
const int FRAME_COUNT = 1024;
int16_t buffer_mono[FRAME_COUNT];
Frame buffer_stereo[FRAME_COUNT];  // channel1 & channel2

// Callback: generate audio data
int32_t get_data_frames(Frame *frame, int32_t frame_count) {
  // Ganti frekuensi setiap DURATION_S_TONE detik
  if (m_time - time_of_last_switch >= DURATION_S_TONE) {
    current_frequency = (current_frequency == SIRENE_FREQ_1) ? SIRENE_FREQ_2 : SIRENE_FREQ_1;
    time_of_last_switch = m_time;
    sine_gen.setFrequency(current_frequency);
  }

  // Gunakan readBytes() — memindah byte audio
  size_t bytes_to_read = frame_count * sizeof(int16_t);
  size_t bytes_read = sine_gen.readBytes((uint8_t*)buffer_mono, bytes_to_read);
  size_t samples_read = bytes_read / sizeof(int16_t);

  // Konversi mono → stereo
  for (int i = 0; i < samples_read; i++) {
    frame[i].channel1 = buffer_mono[i];
    frame[i].channel2 = buffer_mono[i];
  }

  // Update waktu
  m_time += samples_read / sample_rate;

  return samples_read;
}

// Callback: status koneksi Bluetooth
void connection_state_changed(esp_a2d_connection_state_t state, void *ptr) {
  Serial.println(a2dp_source.to_str(state));
}

void setup() {
  Serial.begin(115200);
  while (!Serial);

  // Konfigurasi audio
  AudioInfo cfg;
  cfg.sample_rate = 44100;
  cfg.channels = 1;
  cfg.bits_per_sample = 16;

  // Inisialisasi generator
  sine_gen.begin(cfg);
  sine_gen.setFrequency(SIRENE_FREQ_1);      // Mulai dari 800 Hz
  sine_gen.setAmplitude(10000.0f);           // Amplitude ~30% dari max

  // Setup Bluetooth
  
  a2dp_source.set_auto_reconnect(true);
  a2dp_source.set_volume(100);  // 0–100
  a2dp_source.set_on_connection_state_changed(connection_state_changed);
  a2dp_source.set_data_callback_in_frames(get_data_frames);

  Serial.println("Mencoba terhubung ke speaker 'K1'...");
  a2dp_source.start("K1"); //Sesuaikan dengan nama speaker BT anda
}

void loop() {
  delay(10);
}


6. Tantangan dan Solusi

Keterbatasan A2DP Source di ESP32: ESP-IDF lebih mendukung A2DP Sink. Implementasi Source masih dalam pengembangan. Solusi: Gunakan versi terbaru library AudioTools yang telah mengatasi sebagian besar isu ini.

  1. Kualitas Audio: Penggunaan fungsi sin() secara real-time bisa memberatkan CPU. Optimasi dengan lookup table (LUT) sinus dapat mengurangi beban prosesor.
  2. Latensi dan Buffering: Pastikan buffer audio cukup besar untuk menghindari crackling atau putus-putus suara.
  3. Daya Baterai: Transmisi Bluetooth konstan memakan daya. Untuk aplikasi portabel, pertimbangkan untuk mengaktifkan sirene hanya saat diperlukan.


7. Aplikasi Nyata

Sistem ini bisa digunakan dalam berbagai skenario:


  1. Alarm rumah pintar yang memicu sirene melalui speaker Bluetooth di seluruh rumah.
  2. Sistem peringatan bencana berbasis IoT.
  3. Proyek edukasi tentang pemrosesan sinyal digital dan komunikasi nirkabel.


Kesimpulan

Dengan kombinasi ESP32, library AudioTools oleh pschatzmann, dan protokol Bluetooth A2DP, kita dapat membangun sistem audio yang canggih namun tetap sederhana secara konseptual. Pembuatan suara sirene digital adalah contoh nyata bagaimana mikrokontroler modern bisa digunakan tidak hanya untuk kontrol logika, tetapi juga untuk pemrosesan sinyal waktu-nyata.

Meskipun ada tantangan teknis, terutama terkait dukungan A2DP Source, perkembangan library open-source seperti AudioTools terus mempermudah pengembangan aplikasi audio di platform ESP32. Dengan sedikit pemahaman tentang dasar-dasar gelombang suara dan modulasi frekuensi, siapa pun bisa membuat sistem audio nirkabel yang fungsional dan kreatif.

Proyek ini membuka pintu bagi eksplorasi lebih lanjut, seperti menambahkan kontrol jarak jauh via Wi-Fi, menyimpan audio dalam SD card, atau bahkan menggabungkan dengan sensor untuk sistem alarm otomatis. Dunia audio di IoT menanti untuk dieksplorasi!

Share:

Rabu, 13 Agustus 2025

[OpenWrt] Menghubungkan Router ke Dongle USB 4G Advance DT100 jadul dengan bantuan AI

 


Jika pembaca ingat pada tulisan sebelumnya mengenai cara memanfaatkan router TP Link jadul  tl-wr1043nd dengan modem 4G (baca disini lalu disini), ada pandangan seperti gini : "Ngapain susah susah mengoprek sesuatu yang sudah dibilang gak bisa dipakai di berbagai forum diskusi openwrt maupun beberapa konten youtube ?" Ya benar beberapa orang sudah menyatakan modem yang cocok dipakai bersama router openwrt adalah kakaknya DT100 yaitu versi hi-link DT-100 (lihat gambar diatas) yang merupakan Mifi siap pakai dan juga bisa digunakan sebagai modem usb colok ke PC/Router. Ini dikarenakan modem hi-link memiliki processor kontroller didalamnya dan out USB nya berupa RNDIS, berbeda dengan DT-100 yang harus dikendalikan oleh software pada PC.

Lalu saya teringat dulu ketika saya beli modem ini, tujuan saya ingin meng-upgrade modem usb huawei 3G/UMTS ke teknologi 4G LTE yg katanya lebih kenceng, yang saya pasangkan dengan mikrotik dan terkejutnya saya DT-100 tidak support mikrotik maupun TP link WR840 yg spesial untuk dongle USB 3G/4G. Sehingga karena gagal maka modem ini sudah digudang hampir 8 tahun lamanya. Dan karena saya lagi mode mengirit maka saya mempunyai keyakinan akan adanya suatu perintah command yang bisa merubah modem ini dari usb storage ke usb modem seperti tangkapan log console berikut :

(jika ingin mencoba gunakan putty - SSH ke 192.168.1.1)

root@ROOter:~# lsusb
Bus 001 Device 007: ID 05c6:f000 Qualcomm, Inc.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
root@ROOter:~# lsusb -t
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-platform/1p, 480M
    |__ Port 1: Dev 7, If 0, Class=Mass Storage, Driver=, 480M

Sedangkan pada modem logger nya muncul kegagalan seperti ini :
Thu Jan  1 00:00:11 1970 : usb-modeswitch  Delay for boot up
Thu Jan  1 00:00:12 1970 : usb-modeswitch  Delay for boot up
Tue Aug 12 06:03:02 2025 : ROOter Initialize  Initializing Rooter
Tue Aug 12 06:03:06 2025 : usb-modeswitch  Ignoring Linux Hub
Tue Aug 12 06:03:06 2025 : usb-modeswitch  CURRMODEM 1
Tue Aug 12 06:03:07 2025 : usb-modeswitch  Add : 1-1: Manufacturer=Qualcomm,_Incorporated Product=Qualcomm_CDMA_Technologies_MSM Serial=1234567890ABCDEF 05c6 f000
Tue Aug 12 06:03:07 2025 : usb-modeswitch 1 *****************************************************************
Tue Aug 12 06:03:07 2025 : usb-modeswitch 1 *
Tue Aug 12 06:03:08 2025 : usb-modeswitch 1 * Start of Modem Detection and Connection Information
Tue Aug 12 06:03:08 2025 : usb-modeswitch 1 *
Tue Aug 12 06:03:08 2025 : usb-modeswitch 1 * Product=Qualcomm_CDMA_Technologies_MSM 05c6 f000
Tue Aug 12 06:03:09 2025 : usb-modeswitch 1 *
Tue Aug 12 06:03:09 2025 : usb-modeswitch 1 *****************************************************************
Tue Aug 12 06:03:10 2025 : usb-modeswitch 1 Found Modem at 1-1 in Cfg#= 1 from 1 available
Tue Aug 12 06:03:21 2025 : usb-modeswitch 1 *****************************************************************
Tue Aug 12 06:03:21 2025 : usb-modeswitch 1 *
Tue Aug 12 06:03:21 2025 : usb-modeswitch 1 * Modem at 1-1 switched to : 05c6:f000
Tue Aug 12 06:03:21 2025 : usb-modeswitch 1 *
Tue Aug 12 06:03:22 2025 : usb-modeswitch 1 *****************************************************************
Tue Aug 12 06:03:22 2025 : Protofind 05c6/f000 Number Interfaces w/drivers : 1
Tue Aug 12 06:03:23 2025 : Protofind 05c6/f000 Driver Name : 0 
Tue Aug 12 06:03:23 2025 : usb-modeswitch 1 *****************************************************************
Tue Aug 12 06:03:23 2025 : usb-modeswitch 1 *
Tue Aug 12 06:03:24 2025 : usb-modeswitch 1 * ProtoFind returns : 0
Tue Aug 12 06:03:24 2025 : usb-modeswitch 1 *
Tue Aug 12 06:03:24 2025 : usb-modeswitch 1 *****************************************************************

Kemudian dengan bantuan Chat AI saya mendapatkan jawaban seperti berikut :

### USER
i have qualcomm usb dongle modem with switch mode from stroage to msm 6000. but how to switvh its mode in openwrt

### ASSISTANT
To switch a Qualcomm USB dongle from **storage mode (CD-ROM mode)** to **modem mode (MSM 6000 or similar)** on **OpenWRT**, you typically need to send a **USB mode switch command** using the `usb_modeswitch` utility. Many Qualcomm-based dongles (like older Huawei, ZTE, or other brands) come up as a USB storage device initially to install drivers on Windows, but they can be switched to modem mode for Linux systems.

Here’s how to do it on **OpenWRT**:

---

### ✅ Step 1: Install `usb-modeswitch`

Make sure you have the required packages installed on your OpenWRT system:

```bash
opkg update
opkg install usb-modeswitch
opkg install kmod-usb-serial
opkg install kmod-usb-serial-option  # For Qualcomm/QMI modems
opkg install kmod-usb-serial-qualcomm  # if available
```

Also, install `comgt` or `uqmi` depending on your modem type:

```bash
opkg install uqmi
```

---

### ✅ Step 2: Identify Your Dongle

Plug in your USB dongle and run:

```bash
lsusb
```

Look for a device that shows up as a **storage device** (often with a vendor like `12d1:1446` — common for Huawei). Example:

```
Bus 001 Device 003: ID 12d1:1446 Huawei Technologies Co., Ltd. E1552/E1800/E173 (Mass Storage Mode)
```

Note the **Vendor ID** and **Product ID**.

---

### ✅ Step 3: Use `usb_modeswitch` to Switch Mode

You can manually switch the mode using `usb_modeswitch`. Example:

```bash
usb_modeswitch -v 12d1 -p 1446 -M "55534243123456780000000000000011062000000100000000000000000000"
```

> 🔍 The `-M` flag sends a specific **SCSI command** to switch mode. The long hex string is a **"magic" control message** used to trigger the switch.

💡 Many Qualcomm/Huawei modems respond to the standard Huawei switch message:
```
55534243123456780000000000000011062000000100000000000000000000
```

---

### ✅ Step 4: Verify Switched Mode

After running `usb_modeswitch`, unplug and replug the dongle or run:

```bash
lsusb
```

You should now see a different product ID, e.g., `12d1:1001` or `12d1:141b`, which indicates **modem mode**.

Also check:

```bash
dmesg | tail
```

You should see new serial ports like `/dev/ttyUSB0`, `/dev/ttyUSB1`, etc.

---

### ✅ Step 5: Configure the Modem with `uqmi` or `qmi-network`

If your modem uses **QMI protocol** (common for Qualcomm MSM), use `uqmi`.

Install `libqmi` and `qmi-utils` if not already:

```bash
opkg install libqmi qmi-utils
```

Test QMI connection:

```bash
uqmi -d /dev/cdc-wdm0 --get-client-id wds
```

Or use `qmi-network` script:

```bash
qmi-network /dev/cdc-wdm0 start
```

You may need to set up a network interface in `/etc/config/network`.

---

### ✅ Optional: Automate Mode Switch

To auto-switch when the dongle is plugged in:

#### Option A: Use Hotplug Script

Create a hotplug script:

```bash
vi /etc/hotplug.d/usb/10-usb-modeswitch
```

Add:

```sh
#!/bin/sh

[ "$ACTION" = "add" ] || exit 0

# Replace 12d1:1446 with your dongle's storage mode VID:PID
if [ "$PRODUCT" = "12d1/1446/1" ]; then
    sleep 2
    usb_modeswitch -v 12d1 -p 1446 -M "55534243123456780000000000000011062000000100000000000000000000"
    sleep 3
fi
```

Make executable:

```bash
chmod +x /etc/hotplug.d/usb/10-usb-modeswitch
```

> ⚠️ You may need to adjust the `PRODUCT` string. Check `/var/log/messages` or `dmesg` to see what `$PRODUCT` your device reports.

---

### ✅ Troubleshooting Tips

- Run `dmesg` after plugging in the dongle to see kernel messages.
- Some modems need a **specific config file** in `/etc/usb-mode.json` or use predefined rules in `usb-modeswitch`.
- If `usb_modeswitch` fails, try adding `-I` (ignore product ID after switch) or `-H` (Huawei mode).
- Some newer OpenWRT versions use `usb-mode-switch` daemon with config files in `/etc/usb-mode-switch.d/`.

---

### 📌 Summary

| Step | Action |
|------|--------|
| 1 | Install `usb-modeswitch`, `kmod-usb-serial*`, `uqmi` |
| 2 | Find VID:PID in storage mode using `lsusb` |
| 3 | Run `usb_modeswitch` with correct message |
| 4 | Confirm new mode and serial ports appear |
| 5 | Use `uqmi` or `qmi-network` to connect |
| 6 | Automate with hotplug script |

---




Semua cara yg diberikan oleh AI sudah saya coba dan ternyata keseluruhan cara gagal namun ada beberapa kesimpulan yang saya dapatkan dari percakapan saya dengan chat AI :


  • Modem USB DT100 mengalami kegagalan perpindahan dari mode usb storage 05C6:F000 ke Modem 4G 05C6:6000
  • OpenWrt versi terbaru menggunakan package "usbmode bukan lagi usb-modeswitch" dan mengakses file konfigurasi di  /etc/usb-mode.json
  • File konfigurasi ini sudah berusaha merubah mode dari modem namun tidak sesuai message yang disampaikan ke modem untuk switch. 
  • Padahal saya ingin membuang modem ini namun ajaibnya saya ditunjukkan internet message konfigurasi yang entah dari mana saya temukan pada forum diskusi disini



Nah akhirnya ketemu kan kunci untuk membuka pandora box, jadi message yang dikirimkan adalah :


"555342431234567890ABCDEF80000671030000000000000000000000000000"


Jadi agar tidak membingungkan karena saking panjangnya cara menemukannya baik lewat bantuan AI maupun search sendiri, maka saya rangkum langkah me rubah modem ini ke mode 05C6:6000 (modem usb 4G) sebagai berikut:


1. Install putty sebagai terminal SSH (sering saya bahas) dan WinSCP untuk kirim file atau edit file pada OpenWrt.



Gunakan credential username dan password yang kamu buat saat seting router OpenWrt kamu.


2. Gunakan WinSCP untuk masuk ke folder /etc dan bikin file baru dengan nama yg bebas seperti contoh yang saya gunakan di gambar berikut :




Klik file yg saya namakan "usb-mode-customMDM9200.json" kemudian di isikan text berformat json seperti dibawah ini :


{
  "messages": [
    "555342431234567890ABCDEF80000671030000000000000000000000000000"
  ],
  "devices": {
    "05c6:f000": {
      "*": {
        "t_vendor": "05c6",
        "t_product": "6000",
        "msg": [ 0 ]
      }
    }
  }
}

3. Jalankan perintah pada terminal :  

usbmode -s -c /etc/usb-mode customMDM9200.json

, lalu cek status usb nya sampai  muncul kabar gembira pada layar terminal seperti berikut :




4. Nahh jika sudah menjadi 4 buah device usb serial maka proses switch sudah terjadi dengan sukses. Langkah selanjutnya adalah membuat koneksi internet melalui console web dengan menambahkan pada menu Network => Interfaces => modem LTE. Lakukan seperti gambar berikut :





5. Jika settingan benar, biasanya hanya merubah-ubah Modem Device di pilihan /dev/ttyUSB0 dst, maka setelah di save dan apply akan muncul status koneksi ke jaringan 4G LTE seperti ini :





Wahh kini modem USB advance Jetz DT100 dapat digunakan menjadi sumber Internet ke router openwrt yang saya punya. Tentunya apabila routernya di restart atau power off-on maka harus melakukan lagi perintah switch secara manual. Namun jangan khawatir ada cara jitu untuk melakukan HOTPLUG usb device menggunakan fasilitas script /etc/hotplug.d yang disediakan OpenWrt.



Sebenernya masih banyak lagi oprekan yang saya lakukan diantaranya otomasi pendeteksi sinyal putus atau modem hang kemudian modem usb di power off-on melalui GPIO dan juga beberapa otomasi untuk kemudahan operasional yang bisa anda kreasikan sendiri. Ini juga hasil bantuan chat AI kok jadi jangan sungkan-sungkan bertanya ke fasilitas yang disediakan internet asal cara bertanya nya mengerti konsep yang akan diinginkan.

Lalu bagaimana dengan kecepatan Internetnya ? Kalau lokasi kamu tepat dengan BTS yang lagi normal maka cukup puas untuk penggunaan sehari-hari dirumah.




Selamat mencoba


Share:

[OpenWrt] Sumber Internet TP-Link TL-WR1043ND Lewat GSM 4G LTE

 


Setelah sebelumnya dibahas mengenai membuat backup WiFi untuk internet rumah menggunakan "dumb" router TL-WR1043ND ( baca disini ) yang sudah menjadi 'smart' dengan OpenWrt "ROOTer", kini saya akan bahas bagaimana membuat sumber internetnya menjadi robust atau tahan dinyalakan berhari-hari. Seperti yang saya lakukan sebelumnya, sumber internet saya ambilkan dari Smartphone Android yang saya tethering jaringan 4G LTE nya melalui kabel USB. Ini mungkin menjadi solusi sementara sampai suatu saat saya melihat modem mifi seperti iklan olshop dibawah ini.



MiFi MF800 ini kan sudah ada wifi / AP nya lalu ngapain di sambung ke Wireless Router lagi ? Yang saya ingat jangkauan wifinya sangat terbatas, cocok untuk ruangan 1 kamar tamu saja ukuran 5x5 dan diluar rumah sudah megap-megap wifi nya. Bahkan mungkin lebih bagus "nguping" password wifi tetangga lewat anaknya yang masih SD. Jiahhh itu sih namanya bukan tukang wireless...hehehe.

Kemudian saya beli lewat marketplace dengan range harga seller dari angka 150 rb s/d 350 rb. Kata diskusi di forum diskusi internet maupun konten di yutube biasanya yang murahan itu re-furbished dari luar lalu distiker telkomsel. Sedangkan yang 300an katanya sih merupakam MiFi resmi yang sudah di unlock serta sudah ada stiker PosTel nya. Sama aja bohong ilegal juga namun mungkin barangnya lebih bagus. Saya putuskan ambil yang murah aja....hehehehe.


Dan ketika saya colokkan kabel USB MiFi ke Router TP-Link TL-WR1043ND dengan firmware openwrt - ROOTer langsung bisa menjadi sumber internet dengan tipe modem : Android -android. Ternyata mode kabel USB nya adalah tethering RNDIS dan untungnya firmware ROOTer yang saya pakai sudah terdapat driver yang sesuai. Padahal rencananya saya akan menggunakan router TP link Wireless saya sebagai repeater dari AP yg memancar dari MiFi MF800. Wahh kalau begini siap pakai nihh router saya..


Untuk mengatasi charging yang berlebih dan panas dari baterai maka saya tambahkan kipas DC 12 volt yang catu dayanya saya paralel dengan power suply Router TP Link. Sayangnya baterai dari Mifi MF800 tidak bisa dilepas karena nya harus tertancap terus di MiFi. Dengan membuka casing dibelakang dan menempelkan ke kipas maka masalah panas ini teratasi.

Sementara itu ketahanan dari modem Mifi ini sudah saya coba dan lumayan lama 1 bulan dengan kecepatan yang dibilang payah, dimana jika saya menggunakan jaringan kartu 4G yang sama pada handphone (bahkan kartunya saya pindah) maka pada mifi turun sekitar 70% dibandingkan langsung menggunakan smartphone. Payah bukan ? Entah kenapa saya juga tidak paham..




Lalu saya berpaling kembali ke modem Advance Jetz DT100 dan mencoba membandingkan kecepatan jika saya gunakan kartu SIM yang sama. Dan pada windows yang saya gunakan hasilnya stabil dan cukup kencang dibandingkan menggunakan Mifi MF800. Kayaknya saya beli versi refurbished deh, jadi barang yang saya terima ini bekas sehingga kurang maksimal. 


Namun ada hal yang mengganjal, modem DT100 ini menggunakan chipset MSM9000 namun Wifi nya hanya bisa keluar ketika dijalankan menggunakan aplikasi pada PC. Jadi kesimpulan yang saya ambil adalah modem ini butuh processor yang mengontrol fungsi-fungsi pada modem ini. Beda dengan versi hi-link atau DT300 dimana setelah diseting pada PC selanjutnya tinggal colok pada charger USB atau power bank sudah bisa menjadi MiFi alias sudah ada processor kontroler di dalam DT300.

Ketika saya colokkan pada Router OpenWrt saya, output pada perintah lsusb seperti ini :

(jika ingin mencoba gunakan putty - SSH ke 192.168.1.1)


root@ROOter:~# lsusb
Bus 001 Device 007: ID 05c6:f000 Qualcomm, Inc.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
root@ROOter:~# lsusb -t
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-platform/1p, 480M
    |__ Port 1: Dev 7, If 0, Class=Mass Storage, Driver=, 480M


Sedangkan pada modem logger nya muncul kegagalan seperti ini :
Thu Jan  1 00:00:11 1970 : usb-modeswitch  Delay for boot up
Thu Jan  1 00:00:12 1970 : usb-modeswitch  Delay for boot up
Tue Aug 12 06:03:02 2025 : ROOter Initialize  Initializing Rooter
Tue Aug 12 06:03:06 2025 : usb-modeswitch  Ignoring Linux Hub
Tue Aug 12 06:03:06 2025 : usb-modeswitch  CURRMODEM 1
Tue Aug 12 06:03:07 2025 : usb-modeswitch  Add : 1-1: Manufacturer=Qualcomm,_Incorporated Product=Qualcomm_CDMA_Technologies_MSM Serial=1234567890ABCDEF 05c6 f000
Tue Aug 12 06:03:07 2025 : usb-modeswitch 1 *****************************************************************
Tue Aug 12 06:03:07 2025 : usb-modeswitch 1 *
Tue Aug 12 06:03:08 2025 : usb-modeswitch 1 * Start of Modem Detection and Connection Information
Tue Aug 12 06:03:08 2025 : usb-modeswitch 1 *
Tue Aug 12 06:03:08 2025 : usb-modeswitch 1 * Product=Qualcomm_CDMA_Technologies_MSM 05c6 f000
Tue Aug 12 06:03:09 2025 : usb-modeswitch 1 *
Tue Aug 12 06:03:09 2025 : usb-modeswitch 1 *****************************************************************
Tue Aug 12 06:03:10 2025 : usb-modeswitch 1 Found Modem at 1-1 in Cfg#= 1 from 1 available
Tue Aug 12 06:03:21 2025 : usb-modeswitch 1 *****************************************************************
Tue Aug 12 06:03:21 2025 : usb-modeswitch 1 *
Tue Aug 12 06:03:21 2025 : usb-modeswitch 1 * Modem at 1-1 switched to : 05c6:f000
Tue Aug 12 06:03:21 2025 : usb-modeswitch 1 *
Tue Aug 12 06:03:22 2025 : usb-modeswitch 1 *****************************************************************
Tue Aug 12 06:03:22 2025 : Protofind 05c6/f000 Number Interfaces w/drivers : 1
Tue Aug 12 06:03:23 2025 : Protofind 05c6/f000 Driver Name : 0 
Tue Aug 12 06:03:23 2025 : usb-modeswitch 1 *****************************************************************
Tue Aug 12 06:03:23 2025 : usb-modeswitch 1 *
Tue Aug 12 06:03:24 2025 : usb-modeswitch 1 * ProtoFind returns : 0
Tue Aug 12 06:03:24 2025 : usb-modeswitch 1 *
Tue Aug 12 06:03:24 2025 : usb-modeswitch 1 *****************************************************************



Nah ini menandakan modem ini terjebak pada mode usb-storage dengan id: 05C6:F000 sesuai kecurigaan saya tidak bisa pindah ke perangkat USB modem dengan id 05C6:6000,  butuh perintah untuk mengubah modenya menjadi modem 4G. Lewat bantuan Chat AI saya akan menceritakan bagaimana solusi nya saya dapatkan pada tulisan selanjutnya disini.



 


Share:

[OpenWrt] Merubah router jadul TP-Link TL-WR1043ND menjadi PINTAR

 


Terasa dunia mau runtuh ketika orang serumah bergantian menelpon kalau internet di rumah mati lagi ! Padahal ini sudah ke-3 kalinya jaringan internet optik yg saya pakai bermasalah. Selain masalah dengan kebersihan wilayah di atas perumahan, dimana kabel yang semakin semrawut, juga beberapa teman yang bekerja di provider internet memberi kan info kurang menarik kalau kualitas kabel optik yg turun ke pelanggan (drop core) jaman sekarang itu sangatlah buruk. 

Benar saja setiap musim layangan tiba maka tidak memungkiri kabel ini bisa saja tergeret benang layangan yang bergelas atau saat tetangga renov rumah serta mengirim barang menggunakan truk maka sedikit saja terantuk benda diatas truk maka akan putus dalem optiknya walau secara fisik masih nyambung. Lalu dengan penanganan gangguan dari provider yang tergolong lamaaaaaaa, sebagai seorang teknisi "wireless" sejak era 2000an,  ayo saya bagi pengalaman saya membuat jaringan  backup WiFi dengan jalur internet melalui 4G LTE .

Langkah pertama adalah dengan mengobrak-abrik gudang untuk mencari peninggalan kantor terdahulu dimana saya cukup banyak diwariskan perangkat router - storage - modem - dongle - crimping tool dan lain sebagainya. Dan yang berguna kali ini adalah perangkat yang saya temukan berupa :

1. Router  TP-Link TL-WR1043ND V2

Router ini dulu dipakai di ruangan kerja kantor lama namun karena sangat "dumb" maka seingat saya hanya digunakan sebagai print server. Kenapa dumb? karena ya memang sangat parah lag nya ketika memory penuh dan butuh restart untuk sekedar membuatnya "normal" beberapa jam. Dari websitenya TP LINK, router yang saya beli 10 tahun lalu ini memiliki fasilitas seperti berikut :

  • Kecepatan WiFi 450Mbps dan port Gigabit Ethernet ideal untuk streaming video HD .
  • Enkripsi keamanan nirkabel mudah dilakukan hanya dengan menekan tombol WPS.
  • 3 antena eksternal 5dBi meningkatkan ketahanan dan stabilitas nirkabel secara signifikan.
  • Port USB untuk external storage
Lalu bagaimana membuatnya menjadi "pintar" ? Ya dengan berbagai pertimbangan saya akan merubah firmwarenya menjadi OPENWRT (pernah saya praktek kan disini : https://www.aisi555.com/2018/03/tutorial-modifikasi-dvr-cctv-lan.html ) namun kali ini saya ubah menjadi versi custom openwrt buatan australia bernama the ROOter Project, yang diklaim dan beberapa forum diskusi menyebut ini versi paling stabil. Jadi saya tidak akan membahas bagaimana merubah firmwarenya karena sangat mudah ditemukan tutorialnya diseputeran internet atau langsung di websitenya disini.  Silahkan sesuaikan dengan perangkat router punya kamu.




Versi hardware  router TP-Link TL-WR1043ND yang saya milik adalah V2 jadi jangan sampai salah download firmware yang tentunya akan menyusahkan. Pokoknya berhati-hati saja saat eksekusi flash nya dan di tulisan ini tidak saya bahas banyak proses flashnya, pokoknya wifi saya sudah menyala walau tanpa internet. Lalu sumber internetnya dari mana? Ikuti cerita dibawah ini.


2. Modem LTE Advance DT100


Lhoo kan router TL-WR1043ND bukan versi yang bisa dicolokin modem ? Kok mengambil modem ini di gudang ? Tenang jangan khawatir ! Ternyata dengan menggunakan firmware OPENWRT maka port USB pada router TPlink atau bahkan STB Indihome bekas pun bisa dicolokin apa aja! Jadi kalau dicolokin flashdisk maka jadi external storage begitu juga jika dimasukkan Modem USB Dongle maka kan bisa menjadi sumber internet untuk router. Begitu katanya penjelasan di berbagai forum diskusi.

Sayangnya modem yang saya punya adalah modem Advance versi Non Hi-Link, yaitu DT100 yang jadul dimana sangat mengandalkan software di PC Windows untuk kontrol koneksi dan wifi nya. Jadi modem ini tidak bisa stand alone seperti versi DT300 yang dimana sekali seting maka ketika ingin menggunakan tanpa PC, cukup dicolokkan ke sumber USB / charger usb 5 volt dan dongle ini akan mancar sebagai MIFI (modem WiFi).

Dan benar saja modem punya saya ini yang ber-chipset qualcom MSM9000, tidak terdeteksi sebagai modem dan hanya stuck di mode usb storage saat dicolokin ke router TPlink, bahkan ketika saya coba di router sekelas mikrotik pun hasilnya zonk. Forum diskusi baik di openwrt atau mikrotik menyarankan agar tidak menggunakan modem LTE versi ini. Lalu bagaimana dong saya mendapatkan sumber internet ?


3. Tethering USB lewat HP Android jadul


Tinggal colok kabel USB ke HP android lalu sambung ke Router TP Link dan pilih menu USB tethering dan Router Wifi kamu sudah bisa menjadi sumber backup internet untuk satu rumah. Namun jangan sampai HP nya kepanasan ya karena dinyalakan ber-jam jam, jadi untuk menghindari overheat di baterai lithium (bisa hamil) silahkan tambahkan kipas pendingin atau diletakkan diatas plat besi/aluminium sehingga panasnya teralirkan. Ohh iya jangan lupa disi paket DATA yang cukup banyak yaaa...

Dibagian selanjutnya kita akan bahas bagaimana membuat sumber internet dari 4G LTE ke router yang lebih stabil dan bisa dinyalakan 24 jam. Lanjut baca disini.

SELAMAT MENCOBA !

Share:

Kontak Penulis



12179018.png (60×60)
+6281331339072

Mail : ahocool@gmail.com

Site View

Categories

555 (8) 7 segmen (3) adc (4) amplifier (2) analog (19) android (14) antares (11) arduino (29) artikel (11) attiny (3) attiny2313 (19) audio (8) baterai (5) blog (1) bluetooth (1) chatgpt (2) cmos (2) crypto (2) dasar (46) digital (11) dimmer (5) display (3) esp32 (3) esp8266 (30) euro2020 (13) gcc (1) gis (3) gsm (1) iklan (1) infrared (2) Input Output (3) iot (78) jam (7) jualan (12) kereta api (1) keyboard (1) keypad (3) kios pulsa (2) kit (6) komponen (17) komputer (3) komunikasi (1) kontrol (8) lain-lain (8) lcd (2) led (14) led matrix (6) line tracer (1) lm35 (1) lora (11) lorawan (2) MATV (1) memory (1) metal detector (4) microcontroller (70) micropython (6) mikrokontroler (2) mikrokontroller (14) mikrotik (5) modbus (9) mqtt (3) ninmedia (5) ntp (1) openwrt (3) paket belajar (19) palang pintu otomatis (1) parabola (88) pcb (2) power (1) praktek (2) project (37) proyek (1) python (11) radio (31) raspberry pi (9) remote (1) revisi (1) rfid (1) robot (1) rpm (2) rs232 (1) script break down (3) sdcard (3) SDR (3) sensor (2) sharing (3) signage (1) sinyal (1) sms (6) software (18) solar (1) solusi (1) statistik (5) tachometer (2) technology (1) teknologi (2) telegram (2) telepon (9) televisi (167) television (28) telkomiot (5) transistor (2) troubleshoot (3) tulisan (96) tutorial (108) tv digital (6) tvri (2) unesa (8) vu meter (2) vumeter (2) wav player (3) wayang (1) wifi (6) yolo (9)

Arsip Blog

Diskusi


kaskus
Forum Hobby Elektronika