<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: chung-cha tsai</title>
    <description>The latest articles on DEV Community by chung-cha tsai (@106590022).</description>
    <link>https://dev.to/106590022</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3893735%2F34c32a6b-108d-49c8-be6a-e5d711c630f5.jpeg</url>
      <title>DEV Community: chung-cha tsai</title>
      <link>https://dev.to/106590022</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/106590022"/>
    <language>en</language>
    <item>
      <title>Getting Started with ESP32: From Zero to "Hello World"</title>
      <dc:creator>chung-cha tsai</dc:creator>
      <pubDate>Thu, 23 Apr 2026 07:59:53 +0000</pubDate>
      <link>https://dev.to/106590022/getting-started-with-esp32-from-zero-to-hello-world-3f2p</link>
      <guid>https://dev.to/106590022/getting-started-with-esp32-from-zero-to-hello-world-3f2p</guid>
      <description>&lt;h2&gt;
  
  
  Why I Started This Project
&lt;/h2&gt;

&lt;p&gt;I'm a firmware engineer looking to transition into remote IoT roles at globally distributed companies. To build a portfolio that demonstrates end-to-end IoT skills — from embedded sensors to cloud backends — I decided to start from the basics: getting an ESP32 up and running.&lt;/p&gt;

&lt;p&gt;This is the first post in a series where I'll document building a complete IoT system with ESP32, MQTT, and Go.&lt;/p&gt;




&lt;h2&gt;
  
  
  What You'll Need
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;ESP32 DevKit (WROOM)&lt;/li&gt;
&lt;li&gt;USB cable (data-capable, not charge-only)&lt;/li&gt;
&lt;li&gt;VS Code + PlatformIO extension&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Step 1 — Install PlatformIO
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Install &lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;VS Code&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Go to Extensions, search &lt;strong&gt;PlatformIO IDE&lt;/strong&gt; and install&lt;/li&gt;
&lt;li&gt;Restart VS Code&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Step 2 — Create Your First Project
&lt;/h2&gt;

&lt;p&gt;Open PlatformIO, click &lt;strong&gt;New Project&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Board: &lt;code&gt;DOIT ESP32 DEVKIT V1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Framework: &lt;code&gt;Arduino&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Step 3 — Verify Your Board is Connected
&lt;/h2&gt;

&lt;p&gt;This is where I got stuck the longest.&lt;/p&gt;

&lt;p&gt;After plugging in the ESP32 via USB, I wasn't sure if my computer actually recognized it. Here's how to confirm:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;On Windows:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;strong&gt;Device Manager&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Look under &lt;strong&gt;Ports (COM &amp;amp; LPT)&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;You should see something like &lt;code&gt;Silicon Labs CP210x&lt;/code&gt; or &lt;code&gt;CH340&lt;/code&gt; on a COM port&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once I saw &lt;code&gt;COM3&lt;/code&gt; appear, VS Code's PlatformIO also showed the device was ready to connect. That was my confirmation the board was properly detected.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If nothing shows up, you likely need a driver. Check which USB chip your board uses (usually CP2102 or CH340) and download the corresponding driver.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Step 4 — Write and Upload Your First Program
&lt;/h2&gt;

&lt;p&gt;Paste this into &lt;code&gt;src/main.cpp&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;Arduino.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;setup&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;begin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;115200&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;pinMode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;OUTPUT&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;loop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"hello from ESP32"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;digitalWrite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;HIGH&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;digitalWrite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;LOW&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Press &lt;strong&gt;→ Upload&lt;/strong&gt; in the bottom toolbar, or &lt;code&gt;Ctrl+Alt+U&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 5 — Open Serial Monitor
&lt;/h2&gt;

&lt;p&gt;Click the plug icon in the bottom toolbar to open Serial Monitor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; Make sure the baud rate matches your code. Add this to &lt;code&gt;platformio.ini&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="py"&gt;monitor_speed&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;115200&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Without this, you'll see garbled text instead of your output — exactly what happened to me.&lt;/p&gt;




&lt;h2&gt;
  
  
  Result
&lt;/h2&gt;

&lt;p&gt;When I finally saw &lt;code&gt;hello from ESP32&lt;/code&gt; printing every second, I was genuinely surprised it worked. It felt like a small but real milestone — the board was alive, the toolchain worked, and I had a foundation to build on.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;In the next post, I'll connect a &lt;strong&gt;BME280 sensor&lt;/strong&gt; and publish temperature and humidity data over &lt;strong&gt;MQTT&lt;/strong&gt; — the first step toward a complete IoT pipeline.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>iot</category>
      <category>tutorial</category>
      <category>vscode</category>
    </item>
  </channel>
</rss>
