<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Embedded Systems on Nalar</title>
    <link>https://nalar.dev/tags/embedded-systems/</link>
    <description>Recent content in Embedded Systems on Nalar</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Sat, 19 Sep 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://nalar.dev/tags/embedded-systems/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>An SPI microSD Slot Does Not Make an 8-Bit TFT Shield an SPI Display</title>
      <link>https://nalar.dev/spi-microsd-slot-does-not-make-8-bit-tft-shield-spi-display/</link>
      <pubDate>Sat, 19 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://nalar.dev/spi-microsd-slot-does-not-make-8-bit-tft-shield-spi-display/</guid>
      <description>&lt;p&gt;A 2.8-inch Arduino-style TFT shield can place an LCD and a microSD socket on the same PCB while giving them completely different electrical interfaces. The pin labels are the quickest way to tell them apart.&lt;/p&gt;&#xA;&lt;p&gt;On the shield shown here, the LCD side exposes &lt;code&gt;DB0&lt;/code&gt; through &lt;code&gt;DB7&lt;/code&gt; together with &lt;code&gt;LCD_WR&lt;/code&gt;, &lt;code&gt;LCD_RD&lt;/code&gt;, &lt;code&gt;LCD_RS&lt;/code&gt;, &lt;code&gt;LCD_CS&lt;/code&gt;, and &lt;code&gt;LCD_RST&lt;/code&gt;. Those are the signals of an 8-bit 8080-style parallel display interface. The labels &lt;code&gt;SD_MOSI&lt;/code&gt;, &lt;code&gt;SD_MISO&lt;/code&gt;, &lt;code&gt;SD_SCK&lt;/code&gt;, and &lt;code&gt;SD_SS&lt;/code&gt; belong to the microSD socket.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Arduino-IRremote Raw Output: Converting Receive Timings into sendRaw() Data</title>
      <link>https://nalar.dev/arduino-irremote-raw-output-convert-receive-timings-sendraw/</link>
      <pubDate>Sat, 19 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://nalar.dev/arduino-irremote-raw-output-convert-receive-timings-sendraw/</guid>
      <description>&lt;p&gt;Arduino-IRremote separates the representation used while receiving an infrared frame from the representation consumed by &lt;code&gt;sendRaw()&lt;/code&gt;. The receiver records sampled durations, tracks the gap before the frame separately, and can compensate timing distortion introduced by a demodulating IR receiver. A transmitter, by contrast, expects an array that starts with the first mark and alternates mark and space durations.&lt;/p&gt;&#xA;&lt;p&gt;That boundary matters for AC remotes because their frames can be long and are frequently replayed as RAW data when no protocol-specific encoder is available.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Driving an ILI9341 SPI Display and Touch Controller from ESP32-S3</title>
      <link>https://nalar.dev/driving-ili9341-spi-display-touch-controller-esp32-s3/</link>
      <pubDate>Sat, 19 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://nalar.dev/driving-ili9341-spi-display-touch-controller-esp32-s3/</guid>
      <description>&lt;p&gt;A 2.4-inch 240 × 320 TFT module built around the ILI9341 is a practical match for an ESP32-S3 because the display controller accepts a serial SPI interface. The module is not necessarily one device: a typical board can contain the ILI9341 for pixels, a separate resistive-touch controller, and sometimes a microSD socket.&lt;/p&gt;&#xA;&lt;p&gt;That distinction determines the wiring. The devices may share SPI clock and data lines, while each peripheral keeps its own chip-select signal.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Driving an IR LED from an ESP-01: Current, Range, and Transistor Count</title>
      <link>https://nalar.dev/esp01-ir-led-driver-current-range-transistor-count/</link>
      <pubDate>Sat, 19 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://nalar.dev/esp01-ir-led-driver-current-range-transistor-count/</guid>
      <description>&lt;p&gt;An ESP8266 ESP-01 can act as the controller for an infrared AC remote, but the GPIO should be treated as a logic source rather than as the power source for the IR LED. The useful design question is not whether the transmitter has one transistor or three. It is whether the driver can switch the required LED pulse current cleanly while preserving the carrier and protocol timing.&lt;/p&gt;&#xA;&lt;p&gt;That distinction also corrects a common assumption: a three-transistor circuit does not inherently transmit farther than a one-transistor circuit. A correctly sized single transistor or MOSFET can drive an IR LED effectively. Additional transistors only help when they perform a necessary circuit function.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ESP-IDF LCD APIs Depend on the Selected SoC Target</title>
      <link>https://nalar.dev/esp-idf-lcd-apis-depend-on-the-selected-soc-target/</link>
      <pubDate>Sat, 19 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://nalar.dev/esp-idf-lcd-apis-depend-on-the-selected-soc-target/</guid>
      <description>&lt;p&gt;An ESP-IDF project can include &lt;code&gt;esp_lcd_panel_io.h&lt;/code&gt; successfully and still fail on &lt;code&gt;esp_lcd_i80_bus_config_t&lt;/code&gt; or &lt;code&gt;esp_lcd_new_i80_bus()&lt;/code&gt;. That combination looks contradictory until the build target is taken into account.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;esp_lcd&lt;/code&gt; is a framework, not a promise that every ESP chip exposes every LCD transport. The selected SoC determines which low-level interfaces are compiled into the project. Panel-controller support, such as ILI9341, is another layer again.&lt;/p&gt;&#xA;&lt;p&gt;That distinction matters when moving code between ESP32 variants.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gesture-Controlled Air Conditioner with ESP32-S3 Without a Camera</title>
      <link>https://nalar.dev/gesture-controlled-air-conditioner-esp32-s3-without-camera/</link>
      <pubDate>Sat, 19 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://nalar.dev/gesture-controlled-air-conditioner-esp32-s3-without-camera/</guid>
      <description>&lt;p&gt;A camera is unnecessary when an air-conditioner controller only needs a small vocabulary of hand motions. The useful signal is not an image of the hand; it is a directional event such as up, down, left, or right. A short-range optical gesture sensor can reduce that input to a few bytes before the ESP32-S3 sees it.&lt;/p&gt;&#xA;&lt;p&gt;That changes the embedded design substantially. There is no camera frame buffer, DVP bus, image preprocessing, or inference model competing with the LCD and infrared transmitter. The ESP32-S3 can spend its resources on the part that actually needs careful handling: keeping the intended AC state synchronized with each gesture and encoding that state into the appliance&amp;rsquo;s IR protocol.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Infrared Sensors Measure Different Physical Effects</title>
      <link>https://nalar.dev/infrared-sensors-measure-different-physical-effects/</link>
      <pubDate>Sat, 19 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://nalar.dev/infrared-sensors-measure-different-physical-effects/</guid>
      <description>&lt;p&gt;An infrared sensor is not a single measurement technology. &amp;ldquo;IR sensor&amp;rdquo; can describe a reflective proximity detector, a PIR motion detector, a non-contact temperature sensor, an optical encoder, or an infrared receiver. They all operate with radiation outside the visible spectrum, but the quantity being measured is different.&lt;/p&gt;&#xA;&lt;p&gt;That distinction determines what the sensor can detect, how far it can work, and which environmental conditions can produce false or weak readings.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Raw IR Capture and Replay on ESP32 Depends on Timing, Frame Boundaries, and Carrier Frequency</title>
      <link>https://nalar.dev/raw-ir-capture-and-replay-on-esp32-timing-frame-boundaries-carrier-frequency/</link>
      <pubDate>Sat, 19 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://nalar.dev/raw-ir-capture-and-replay-on-esp32-timing-frame-boundaries-carrier-frequency/</guid>
      <description>&lt;p&gt;An infrared receiver does not hand an ESP32 a universal &amp;ldquo;button code.&amp;rdquo; At the electrical boundary, it produces a sequence of detected carrier bursts and gaps. A raw capture represents those intervals as alternating mark and space durations, usually in microseconds.&lt;/p&gt;&#xA;&lt;p&gt;A capture such as:&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;is therefore a waveform description. Replaying it successfully depends on preserving four things together: the timing sequence, the correct frame boundary, the modulation carrier used for marks, and enough optical output from the IR LED.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Reliable ESP32 IR Air-Conditioner Control Needs Hysteresis and State Synchronization</title>
      <link>https://nalar.dev/reliable-esp32-ir-air-conditioner-control-needs-hysteresis-and-state-synchronization/</link>
      <pubDate>Sat, 19 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://nalar.dev/reliable-esp32-ir-air-conditioner-control-needs-hysteresis-and-state-synchronization/</guid>
      <description>&lt;p&gt;An ESP32 can turn a conventional infrared air conditioner into a temperature-driven controller without modifying the AC itself. The basic signal path is simple: a room-temperature sensor feeds the ESP32, the firmware decides whether cooling is required, and an IR LED transmits the same kind of frame the handheld remote would send.&lt;/p&gt;&#xA;&lt;p&gt;The difficult part is not producing infrared light. It is keeping the control loop stable while working with an appliance whose IR protocol may encode the remote&amp;rsquo;s complete state in every transmission.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
