Semua Tentang Belajar Teknologi Digital Dalam Kehidupan Sehari - Hari

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:

0 komentar:

Posting Komentar

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