<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>ESP32 on Nalar</title>
    <link>https://nalar.dev/id/tags/esp32/</link>
    <description>Recent content in ESP32 on Nalar</description>
    <generator>Hugo</generator>
    <language>id-id</language>
    <lastBuildDate>Sat, 19 Sep 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://nalar.dev/id/tags/esp32/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>API LCD ESP-IDF Bergantung pada Target SoC yang Dipilih</title>
      <link>https://nalar.dev/id/api-lcd-esp-idf-bergantung-pada-target-soc-yang-dipilih/</link>
      <pubDate>Sat, 19 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://nalar.dev/id/api-lcd-esp-idf-bergantung-pada-target-soc-yang-dipilih/</guid>
      <description>&lt;p&gt;Proyek ESP-IDF dapat berhasil meng-include &lt;code&gt;esp_lcd_panel_io.h&lt;/code&gt;, tetapi tetap gagal ketika memakai &lt;code&gt;esp_lcd_i80_bus_config_t&lt;/code&gt; atau &lt;code&gt;esp_lcd_new_i80_bus()&lt;/code&gt;. Sekilas keduanya terlihat bertentangan, sampai target build ikut diperiksa.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;esp_lcd&lt;/code&gt; adalah framework, bukan jaminan bahwa setiap chip ESP menyediakan semua transport LCD. SoC yang dipilih menentukan interface level rendah mana yang ikut dikompilasi. Dukungan controller panel seperti ILI9341 berada di lapisan lain lagi.&lt;/p&gt;&#xA;&lt;p&gt;Perbedaan ini penting ketika kode dipindahkan dari satu varian ESP32 ke varian lainnya.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Capture dan Replay Raw IR pada ESP32 Bergantung pada Timing, Batas Frame, dan Frekuensi Carrier</title>
      <link>https://nalar.dev/id/capture-replay-raw-ir-esp32-timing-batas-frame-frekuensi-carrier/</link>
      <pubDate>Sat, 19 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://nalar.dev/id/capture-replay-raw-ir-esp32-timing-batas-frame-frekuensi-carrier/</guid>
      <description>&lt;p&gt;IR receiver tidak memberikan &amp;ldquo;kode tombol&amp;rdquo; universal kepada ESP32. Pada batas elektriknya, receiver menghasilkan urutan carrier burst yang terdeteksi dan jeda di antaranya. Raw capture merepresentasikan interval tersebut sebagai durasi mark dan space yang bergantian, biasanya dalam mikrodetik.&lt;/p&gt;&#xA;&lt;p&gt;Capture seperti:&lt;/p&gt;&#xA;&lt;div&#xA;  x-data=&#34;{ code: $el.querySelector(&#39;code&#39;).innerText, copied: false }&#34;&#xA;  class=&#34;code-block group relative my-6 overflow-hidden rounded-xl border border-line bg-surface-muted dark:border-night-line dark:bg-night-surface&#34;&gt;&#xA;  &lt;button&#xA;    type=&#34;button&#34;&#xA;    @click=&#34;navigator.clipboard.writeText(code); copied = true; setTimeout(() =&gt; copied = false, 1600)&#34;&#xA;    class=&#34;absolute right-3 top-3 z-10 rounded-lg border border-line-strong bg-surface px-2 py-1 font-mono text-[0.8rem] text-muted opacity-0 transition group-hover:opacity-100 hover:bg-ink hover:text-white dark:border-night-line dark:bg-night dark:text-night-muted dark:hover:bg-white dark:hover:text-ink&#34;&gt;&#xA;    &lt;span x-text=&#34;copied ? &#39;Copied&#39; : &#39;Copy&#39;&#34;&gt;&lt;/span&gt;&#xA;  &lt;/button&gt;&#xA;  &#xA;  &lt;div class=&#34;overflow-x-auto p-4 text-sm leading-6 [&amp;_pre]:!m-0 [&amp;_pre]:!bg-transparent [&amp;_pre]:!p-0 [&amp;_code]:font-mono&#34;&gt;&#xA;    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;&#34;&gt;uint16_t&lt;/span&gt; rawData[] = {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  3570, 1620,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  554, 342,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  498, 1244,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  496, 378,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;font-style:italic&#34;&gt;// ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;font-style:italic&#34;&gt;&lt;/span&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;adalah deskripsi waveform. Agar replay berhasil, empat hal harus dipertahankan sebagai satu kesatuan: urutan timing, batas frame yang benar, modulation carrier untuk mark, dan output optik IR LED yang cukup.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cara Linux Memetakan USB-UART ESP32 ke /dev/ttyUSB0 di Fedora</title>
      <link>https://nalar.dev/id/port-usb-serial-esp32-di-fedora/</link>
      <pubDate>Sat, 19 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://nalar.dev/id/port-usb-serial-esp32-di-fedora/</guid>
      <description>&lt;p&gt;Board development ESP32 yang terhubung melalui bridge USB-to-UART CH341 tidak muncul di Fedora sebagai port COM seperti di Windows. Linux mengikat interface USB tersebut ke driver serial lalu mengekspos character device seperti &lt;code&gt;/dev/ttyUSB0&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Koneksi yang bekerja dapat menghasilkan pesan kernel berikut:&lt;/p&gt;&#xA;&lt;div&#xA;  x-data=&#34;{ code: $el.querySelector(&#39;code&#39;).innerText, copied: false }&#34;&#xA;  class=&#34;code-block group relative my-6 overflow-hidden rounded-xl border border-line bg-surface-muted dark:border-night-line dark:bg-night-surface&#34;&gt;&#xA;  &lt;button&#xA;    type=&#34;button&#34;&#xA;    @click=&#34;navigator.clipboard.writeText(code); copied = true; setTimeout(() =&gt; copied = false, 1600)&#34;&#xA;    class=&#34;absolute right-3 top-3 z-10 rounded-lg border border-line-strong bg-surface px-2 py-1 font-mono text-[0.8rem] text-muted opacity-0 transition group-hover:opacity-100 hover:bg-ink hover:text-white dark:border-night-line dark:bg-night dark:text-night-muted dark:hover:bg-white dark:hover:text-ink&#34;&gt;&#xA;    &lt;span x-text=&#34;copied ? &#39;Copied&#39; : &#39;Copy&#39;&#34;&gt;&lt;/span&gt;&#xA;  &lt;/button&gt;&#xA;  &#xA;  &lt;div class=&#34;overflow-x-auto p-4 text-sm leading-6 [&amp;_pre]:!m-0 [&amp;_pre]:!bg-transparent [&amp;_pre]:!p-0 [&amp;_code]:font-mono&#34;&gt;&#xA;    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;usb 5-1: ch341-uart converter now attached to ttyUSB0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Baris itu mengonfirmasi enumerasi USB, binding ke driver serial &lt;code&gt;ch341&lt;/code&gt;, dan pembuatan &lt;code&gt;ttyUSB0&lt;/code&gt;. Karena itu, path yang digunakan flasher atau serial monitor adalah &lt;code&gt;/dev/ttyUSB0&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Jarak GPS dan Keseimbangan IMU pada ESP32 Mengukur Hal yang Berbeda</title>
      <link>https://nalar.dev/id/jarak-gps-keseimbangan-imu-esp32/</link>
      <pubDate>Sat, 19 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://nalar.dev/id/jarak-gps-keseimbangan-imu-esp32/</guid>
      <description>&lt;p&gt;Modul GPS dan IMU sama-sama dapat mengirim angka tentang gerakan ke ESP32, tetapi keduanya mengamati besaran fisik yang berbeda. Menganggap keduanya sebagai sensor yang dapat saling menggantikan akan cepat menghasilkan pengukuran yang keliru.&lt;/p&gt;&#xA;&lt;p&gt;Receiver GPS memperkirakan posisi geografis dari sinyal satelit. Dua position fix dapat diubah menjadi perkiraan jarak di permukaan Bumi. IMU seperti MPU-6050 mengukur percepatan dan laju sudut pada sumbunya. Data tersebut dapat dipakai untuk memperkirakan kemiringan, rotasi, dan gerakan jangka pendek.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kontrol AC Infrared ESP32 yang Stabil Memerlukan Histeresis dan Sinkronisasi State</title>
      <link>https://nalar.dev/id/kontrol-ac-infrared-esp32-stabil-memerlukan-histeresis-dan-sinkronisasi-state/</link>
      <pubDate>Sat, 19 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://nalar.dev/id/kontrol-ac-infrared-esp32-stabil-memerlukan-histeresis-dan-sinkronisasi-state/</guid>
      <description>&lt;p&gt;ESP32 dapat mengubah AC konvensional yang memakai infrared menjadi controller berbasis suhu tanpa memodifikasi unit AC. Jalur sinyal dasarnya sederhana: sensor suhu ruangan memberi data ke ESP32, firmware menentukan apakah pendinginan diperlukan, lalu IR LED mengirim frame yang setara dengan sinyal dari remote bawaan.&lt;/p&gt;&#xA;&lt;p&gt;Bagian yang sulit bukan menghasilkan cahaya infrared. Tantangannya adalah menjaga control loop tetap stabil ketika protokol IR AC dapat membawa seluruh state remote dalam setiap transmisi.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Membaca Definisi Pin I2S ESP32: MCLK, BCLK, WS, DIN, dan DOUT</title>
      <link>https://nalar.dev/id/definisi-pin-i2s-esp32-mclk-bclk-ws-din-dout/</link>
      <pubDate>Sat, 19 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://nalar.dev/id/definisi-pin-i2s-esp32-mclk-bclk-ws-din-dout/</guid>
      <description>&lt;p&gt;Konfigurasi audio ESP32 dapat terlihat seperti sekumpulan definisi GPIO biasa:&lt;/p&gt;&#xA;&lt;div&#xA;  x-data=&#34;{ code: $el.querySelector(&#39;code&#39;).innerText, copied: false }&#34;&#xA;  class=&#34;code-block group relative my-6 overflow-hidden rounded-xl border border-line bg-surface-muted dark:border-night-line dark:bg-night-surface&#34;&gt;&#xA;  &lt;button&#xA;    type=&#34;button&#34;&#xA;    @click=&#34;navigator.clipboard.writeText(code); copied = true; setTimeout(() =&gt; copied = false, 1600)&#34;&#xA;    class=&#34;absolute right-3 top-3 z-10 rounded-lg border border-line-strong bg-surface px-2 py-1 font-mono text-[0.8rem] text-muted opacity-0 transition group-hover:opacity-100 hover:bg-ink hover:text-white dark:border-night-line dark:bg-night dark:text-night-muted dark:hover:bg-white dark:hover:text-ink&#34;&gt;&#xA;    &lt;span x-text=&#34;copied ? &#39;Copied&#39; : &#39;Copy&#39;&#34;&gt;&lt;/span&gt;&#xA;  &lt;/button&gt;&#xA;  &#xA;  &lt;div class=&#34;overflow-x-auto p-4 text-sm leading-6 [&amp;_pre]:!m-0 [&amp;_pre]:!bg-transparent [&amp;_pre]:!p-0 [&amp;_code]:font-mono&#34;&gt;&#xA;    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-cpp&#34; data-lang=&#34;cpp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;font-weight:bold&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;&#34;&gt;uint8_t&lt;/span&gt; I2S_MCLK = 0;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;font-weight:bold&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;&#34;&gt;uint8_t&lt;/span&gt; I2S_SCK = 5;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;font-weight:bold&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;&#34;&gt;uint8_t&lt;/span&gt; I2S_WS = 25;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;font-weight:bold&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;&#34;&gt;uint8_t&lt;/span&gt; I2S_SDOUT = 26;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;font-weight:bold&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;&#34;&gt;uint8_t&lt;/span&gt; I2S_SDIN = 35;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Kelima konstanta tersebut bukan lima kabel audio yang dapat saling dipertukarkan. Masing-masing mewakili bagian berbeda dari timing dan jalur data I2S. Amplifier speaker dapat tetap diam meskipun seluruh GPIO sudah tersambung secara elektrik jika BCLK dan WS tidak ada, arah data terbalik, atau format frame tidak sesuai dengan perangkat penerima.&lt;/p&gt;</description>
    </item>
    <item>
      <title>MQTT over TLS pada ESP32: Enkripsi Transport dan Autentikasi Broker Adalah Batas yang Berbeda</title>
      <link>https://nalar.dev/id/mqtt-over-tls-esp32-enkripsi-transport-autentikasi-broker/</link>
      <pubDate>Sat, 19 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://nalar.dev/id/mqtt-over-tls-esp32-enkripsi-transport-autentikasi-broker/</guid>
      <description>&lt;p&gt;ESP32 yang memindahkan koneksi MQTT dari port 1883 ke 8883 tidak sekadar berpindah port. Stream TCP sekarang diharapkan membawa MQTT di dalam TLS. Data dalam perjalanan terlindungi hanya jika client TLS juga memvalidasi sertifikat broker. Autentikasi username/password MQTT merupakan mekanisme terpisah: kredensial mengidentifikasi client kepada broker, sedangkan validasi sertifikat mengidentifikasi broker kepada ESP32.&lt;/p&gt;&#xA;&lt;p&gt;Menyebut konfigurasi ini &amp;ldquo;MQTT dengan HTTPS&amp;rdquo; mencampur dua protokol aplikasi. MQTT tidak berubah menjadi HTTP ketika TLS ditambahkan. MQTT dapat berjalan melalui TCP biasa atau melalui koneksi TCP yang dilindungi TLS.&lt;/p&gt;</description>
    </item>
    <item>
      <title>State Sensor MQTT ESP32: Mengirim Suhu dan Kelembapan DHT22 dalam Satu Pesan JSON</title>
      <link>https://nalar.dev/id/state-sensor-mqtt-esp32-json-dht22/</link>
      <pubDate>Sat, 19 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://nalar.dev/id/state-sensor-mqtt-esp32-json-dht22/</guid>
      <description>&lt;p&gt;Satu pembacaan DHT22 menghasilkan suhu dan kelembapan relatif dari sampling yang sama. Mengirim keduanya melalui topic MQTT terpisah memang bekerja, tetapi cara itu juga membuat dua batas pesan independen. Subscriber dapat menerima suhu baru sebelum nilai kelembapan pasangannya tiba.&lt;/p&gt;&#xA;&lt;p&gt;Memasukkan kedua pengukuran ke satu payload membuat hubungan tersebut eksplisit:&lt;/p&gt;&#xA;&lt;div&#xA;  x-data=&#34;{ code: $el.querySelector(&#39;code&#39;).innerText, copied: false }&#34;&#xA;  class=&#34;code-block group relative my-6 overflow-hidden rounded-xl border border-line bg-surface-muted dark:border-night-line dark:bg-night-surface&#34;&gt;&#xA;  &lt;button&#xA;    type=&#34;button&#34;&#xA;    @click=&#34;navigator.clipboard.writeText(code); copied = true; setTimeout(() =&gt; copied = false, 1600)&#34;&#xA;    class=&#34;absolute right-3 top-3 z-10 rounded-lg border border-line-strong bg-surface px-2 py-1 font-mono text-[0.8rem] text-muted opacity-0 transition group-hover:opacity-100 hover:bg-ink hover:text-white dark:border-night-line dark:bg-night dark:text-night-muted dark:hover:bg-white dark:hover:text-ink&#34;&gt;&#xA;    &lt;span x-text=&#34;copied ? &#39;Copied&#39; : &#39;Copy&#39;&#34;&gt;&lt;/span&gt;&#xA;  &lt;/button&gt;&#xA;  &#xA;  &lt;div class=&#34;overflow-x-auto p-4 text-sm leading-6 [&amp;_pre]:!m-0 [&amp;_pre]:!bg-transparent [&amp;_pre]:!p-0 [&amp;_code]:font-mono&#34;&gt;&#xA;    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&lt;span style=&#34;font-weight:bold&#34;&gt;&amp;#34;temperature&amp;#34;&lt;/span&gt;:25.34,&lt;span style=&#34;font-weight:bold&#34;&gt;&amp;#34;humidity&amp;#34;&lt;/span&gt;:60.21}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;MQTT tidak mewajibkan JSON. Bagian yang berguna adalah kedua pengukuran dikirim dalam satu publication dan dapat diperlakukan sebagai satu snapshot state sensor.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
