2025年3月24日 星期一


 

徹底改變你的 ESP32 專案!使用 GPIO Viewer 即時監控引腳狀態

前言

當你開發 ESP32 專案時,是否曾經遇到不知某個 GPIO(通用輸入輸出) 引腳是否正常工作的情況?有時候,問題出在程式碼,有時候則是接線錯誤。而今天,我要分享一個能 即時監控 ESP32 GPIO 狀態的工具,就像擁有 X 光視野,讓你輕鬆找到問題點!

這個工具就是 GPIO Viewer,它能讓你透過 瀏覽器 即時查看 ESP32 的引腳狀態。我原本是為了自己的需求開發這個工具,現在我將它整理成一個簡單易用的 Arduino 函式庫,只要幾行程式碼就能整合進你的專案!

為什麼要使用 GPIO Viewer?

在實作電子專案時,我們經常需要觀察 GPIO 引腳的變化,例如:

  • 數位輸出:LED 是否正確閃爍?
  • 類比輸出(PWM):馬達轉速是否正確?
  • 數位輸入:按鈕是否有正確反應?
  • 旋轉編碼器:是否正確偵測到旋轉方向?

傳統上,我們可能會使用 示波器序列監視器 來檢測這些信號,但這些方法要嘛設備昂貴,要嘛過於繁瑣。而 GPIO Viewer 讓這一切變得簡單:

  • 只要一個瀏覽器,就能即時監控所有 GPIO
  • 幫助你輕鬆找到 接線錯誤程式邏輯問題
  • 不需要額外的硬體,完全免費!

GPIO Viewer 示範

在開始安裝之前,讓我們先看看它的實際效果。

範例 1:空白 ESP32 板子

我手上有一塊全新的 ESP32 板子,沒有燒錄任何程式,但當我開啟 GPIO Viewer,我發現有些引腳已經是 高電位(HIGH)!這是因為 ESP32 的某些引腳在預設狀態下會處於高電位,這是了解板子行為的重要知識。

範例 2:LED 與旋轉編碼器

我接上一些 LED,並用 PWM(脈衝寬度調變) 來控制它們,此外,我還加上了一個 旋轉編碼器 來改變 LED 的亮度。

當我旋轉編碼器時,GPIO Viewer 立刻顯示出相應的 GPIO 變化,這讓我可以 確認信號是否正確傳送,完全不需要猜測!

安裝與設定

現在讓我們來學習如何安裝與使用 GPIO Viewer

1. 下載與安裝函式庫

首先,你需要從 GitHub 下載 GPIO Viewer 函式庫:

  • GitHub 連結:🔗 (請參考影片說明欄)

接著,打開 Arduino IDE,依序安裝以下函式庫:

  1. GPIO Viewer
  2. ESP Async Web Server
  3. AsyncTCP(可以透過 Arduino IDE 的「Library Manager」安裝)

2. 基本程式碼

以下是最簡單的 ESP32 GPIO Viewer 使用範例:

#include <GPIOViewer.h>  // 引入 GPIO Viewer 函式庫

GPIOViewer viewer; // 宣告 GPIO Viewer 物件

void setup() {
    Serial.begin(115200);
    WiFi.begin("你的 WiFi SSID", "你的 WiFi 密碼");
    while (WiFi.status() != WL_CONNECTED) {
        delay(1000);
        Serial.println("連接 WiFi...");
    }
    Serial.println("WiFi 連接成功!");
    
    viewer.begin(); // 啟動 GPIO Viewer
}

void loop() {
    // 這裡可以加入你的程式邏輯
}

3. 上傳程式碼並開啟監視器

  1. 將程式碼燒錄到 ESP32
  2. 打開 Arduino IDE 的「序列監視器」,你會看到一個 網址,例如:
    http://192.168.1.100:8080
    
  3. 在瀏覽器中輸入這個網址,你就能看到 GPIO Viewer 的即時監控畫面!

進階設定

你還可以 客製化 以下設定:

1. 設定更新頻率

viewer.setSamplingInterval(50); // 設定為 50 毫秒(預設為 100 毫秒)

2. 變更網頁監視的埠號

viewer.setPort(8081); // 將監視畫面的網址改為 http://192.168.1.100:8081

3. 支援不同的 ESP32 板子

GPIO Viewer 支援多種 ESP32 板型,你可以在函式庫的 GitHub 頁面找到支援的清單。如果你的板子不在清單內,可以提出新增請求。

結論

透過 GPIO Viewer,你可以:

  • 即時監控 GPIO 狀態,減少除錯時間。
  • 輕鬆找出接線錯誤,例如 LED 反接問題。
  • 快速整合,只需要幾行程式碼!

不論你是新手還是老手,這個工具都能讓你的 ESP32 開發過程更順暢!趕快試試看吧!

如果你有任何問題或建議,歡迎留言討論!🚀


ESP32 入門指南:如何選擇與使用 ESP32 開發板

今天,我們將深入探討 ESP32,這款功能強大的微控制器。在過去的 7 年裡,ESP32 已經發展出了多個不同系列與開發板,讓人眼花撩亂。在這篇文章中,我將幫助你理解各種 ESP32 系列的特點,並學習如何選擇適合自己專案的開發板,最後還會介紹如何使用 Arduino IDE 來編程 ESP32。

什麼是 ESP32?

ESP32 是由 Espressif Systems 於 2016 年推出的微控制器,相較於前代 ESP8266,它具備更強的運算能力和更豐富的功能。ESP32 內建 Wi-Fi 和藍牙,並提供多種 GPIO 接口,使其成為物聯網(IoT)開發的熱門選擇。

ESP32 系列概覽

ESP32 發展至今,已經細分成幾個不同的系列,每個系列針對不同的應用場景。

  1. ESP32(原始系列)

    • 單核或雙核 32-bit MCU
    • 內建 Wi-Fi 和藍牙
    • 具備 SD 接口、攝影機接口、霍爾感測器等
  2. ESP32-S 系列(S2 / S3)

    • S2 無藍牙,僅支援 Wi-Fi
    • S3 支援外部記憶體與更強的 AI 運算能力
    • 具備 13-bit ADC(相較於其他型號的 12-bit)
  3. ESP32-C 系列(C2 / C3 / C6)

    • C2:低功耗、適合取代 ESP8266
    • C3:增加 RTC(實時時鐘),並支援 Wi-Fi 和藍牙
    • C6:支援 Wi-Fi 6、Thread 和 Zigbee 協議,適合 IoT 應用
  4. ESP32-H 系列

    • 主要用於 IoT 設備,支援外部快閃記憶體
    • 可作為 Thread 設備或協同處理器
  5. ESP32-P4(未來型號)

    • 高性能處理器,但不內建 Wi-Fi 或藍牙

如何選擇合適的 ESP32 開發板?

目前市面上有超過 200 款不同的 ESP32 開發板,選擇適合你的板子可以考慮以下幾點:

  1. 尺寸與封裝

    • 如果需要小型化,可選擇 Beetle ESP32-S3 或 Seeed Studio XIAO ESP32-S3。
    • 若要方便實驗,ESP32 DevKit C 或 SparkFun Thing Plus 是不錯的選擇。
  2. 擴展性與功能

    • 需要內建顯示器?可選擇 LilyGo T-Display S3。
    • 需要攝像頭?可選擇 ESP32-CAM 或 Seeed Studio XIAO ESP32-S3 Camera Kit。
    • 需要 LoRa 無線通訊?Heltec LoRa V3 是好選擇。
  3. USB 連接類型

    • 新款 ESP32 開發板多數採用 USB-C,例如 ESP32-S3 DevKit 和 Arduino Nano ESP32。
    • 舊款則仍使用 Micro-USB,如 ESP32 Thing。

如何使用 Arduino IDE 來編程 ESP32?

  1. 安裝 ESP32 開發環境

    • 打開 Arduino IDE,進入「文件」>「偏好設定」。
    • 在「附加開發板管理網址」中添加:
      https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
      
    • 點擊「確定」,然後重新啟動 Arduino IDE。
  2. 安裝 ESP32 開發板管理器

    • 進入「工具」>「開發板」>「開發板管理員」。
    • 搜尋「ESP32」,安裝最新版本的 Espressif ESP32 Board Manager。
  3. 選擇開發板與端口

    • 在「工具」>「開發板」中選擇你的 ESP32 型號。
    • 連接 ESP32 到電腦,並在「工具」>「端口」中選擇正確的 COM 端口。
  4. 燒錄 Blink 測試程式

    • 打開「文件」>「範例」>「Basics」>「Blink」。
    • 更改 LED 腳位(通常是 GPIO2):
      void setup() {
        pinMode(2, OUTPUT);
      }
      void loop() {
        digitalWrite(2, HIGH);
        delay(1000);
        digitalWrite(2, LOW);
        delay(1000);
      }
      
    • 點擊「上傳」,觀察 LED 是否閃爍。

結論

ESP32 是一款強大且靈活的微控制器,無論是入門學習還是進階開發,都有適合的開發板可供選擇。如果你是新手,建議從 ESP32 DevKit C 開始,搭配 Arduino IDE 學習基本應用,之後再根據需求選擇更適合的開發板。

希望這篇文章能幫助你更好地理解 ESP32!如果你有任何問題,歡迎留言討論。

2025年3月23日 星期日

ESP32 智能家居控制系統:從零開始的完整指南

 

ESP32 智能家居控制系統:從零開始的完整指南

簡介

在這篇教學中,我將帶領您使用 ESP32 開發板,建立一個簡單的智能家居控制系統。本專案允許您透過 Wi-Fi 連接,使用手機或電腦來控制 LED 燈(或其他家電設備),並透過按鈕進行手動切換。這是一個適合初學者的專案,讓您可以學習如何使用 ESP32 控制網路設備。


1. 準備材料

在開始前,請準備以下元件:

  • ESP32 開發板
  • 4 個 LED(或繼電器模組,用於控制家電)
  • 4 個 220 歐姆電阻(保護 LED)
  • 4 個按鈕開關
  • 麵包板與杜邦線

如果要控制高壓設備,例如電燈或風扇,請使用 繼電器模組 來避免直接接觸高壓電源。


2. 電路連接

LED 與按鈕的連接

  1. LED 燈

    • LED 的 正極(長腳) 連接至 ESP32 的 GPIO(16、17、18、19)。
    • LED 的 負極(短腳) 透過 220 歐姆電阻 連接至 GND
  2. 按鈕開關

    • 一端連接至 GND
    • 另一端連接至 ESP32 的 GPIO(12、14、26、27)。

如果您改用 繼電器模組,請將繼電器的 信號輸入 連接至上述 LED 所使用的 GPIO。


3. 軟體設置

安裝 Arduino IDE 與函式庫

請確保您的 Arduino IDE 已支援 ESP32 開發環境,並安裝以下函式庫:

  • WiFi.h(ESP32 內建)
  • ESPAsyncWebServer(建立非同步網頁伺服器)
  • AsyncTCP(ESPAsyncWebServer 依賴函式庫)

您可以從 GitHub 下載 ESPAsyncWebServerAsyncTCP,並在 Arduino IDE 手動安裝 ZIP 函式庫


4. 程式碼實作

連接 Wi-Fi

#include <WiFi.h>
#include <ESPAsyncWebServer.h>

const char* ssid = "您的SSID";
const char* password = "您的密碼";
AsyncWebServer server(80);

定義 LED 與按鈕的 GPIO

const int ledPins[] = {16, 17, 18, 19};
const int buttonPins[] = {12, 14, 26, 27};
bool ledStates[] = {false, false, false, false};

設置 GPIO 與啟動伺服器

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

  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("正在連接 Wi-Fi...");
  }
  Serial.println("Wi-Fi 連接成功");
  Serial.println(WiFi.localIP());

  for (int i = 0; i < 4; i++) {
    pinMode(ledPins[i], OUTPUT);
    pinMode(buttonPins[i], INPUT_PULLUP);
  }

  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    String html = "<html><body><h1>ESP32 智能家居</h1>";
    for (int i = 0; i < 4; i++) {
      html += "<p>LED " + String(i+1) + ": ";
      html += "<a href='/toggle?led=" + String(i) + "'>";
      html += (ledStates[i] ? "關閉" : "開啟") + String("</a></p>");
    }
    html += "<p><a href='/off'>關閉所有設備</a></p></body></html>";
    request->send(200, "text/html", html);
  });

  server.on("/toggle", HTTP_GET, [](AsyncWebServerRequest *request){
    if (request->hasParam("led")) {
      int led = request->getParam("led")->value().toInt();
      if (led >= 0 && led < 4) {
        ledStates[led] = !ledStates[led];
        digitalWrite(ledPins[led], ledStates[led] ? HIGH : LOW);
      }
    }
    request->redirect("/");
  });

  server.on("/off", HTTP_GET, [](AsyncWebServerRequest *request){
    for (int i = 0; i < 4; i++) {
      ledStates[i] = false;
      digitalWrite(ledPins[i], LOW);
    }
    request->redirect("/");
  });

  server.begin();
}

檢查按鈕輸入

void loop() {
  for (int i = 0; i < 4; i++) {
    if (digitalRead(buttonPins[i]) == LOW) {
      delay(50); // 消抖
      ledStates[i] = !ledStates[i];
      digitalWrite(ledPins[i], ledStates[i] ? HIGH : LOW);
      while (digitalRead(buttonPins[i]) == LOW); // 等待按鈕鬆開
    }
  }
}

5. 上傳與測試

  1. 連接 ESP32 至電腦,並在 Arduino IDE 中選擇 NodeMCU-32S
  2. 修改 ssidpassword 為您的 Wi-Fi 網路。
  3. 點擊 上傳 按鈕,將程式碼燒錄至 ESP32。
  4. 開啟 序列監視器(115200 波特率),找到 ESP32 IP 位址
  5. 在瀏覽器輸入 IP,您將看到控制介面。
  6. 點擊按鈕測試 LED 控制功能。
  7. 按下實體按鈕,檢查 LED 是否正確切換。

6. 結論

恭喜!您已成功建立一個 ESP32 智能家居控制系統,可透過 Wi-Fi 或實體按鈕 操控設備。此專案可進一步擴展,例如:

  • 使用繼電器模組 控制家電設備。
  • 加入溫溼度感測器 來自動調節環境。
  • 整合 MQTT,讓系統能透過雲端控制。

歡迎留言討論,讓我們一起打造更聰明的家!

實用教學!電視接音響有雜訊?2秒解決惱人嗡嗡聲!


 

如何解決電視接音響的「嗡嗡聲」?

在許多家庭中,當我們將電視的聲音接入音響系統時,往往會遇到一個令人困擾的問題——「嗡嗡聲」。即使使用高階環繞擴大機,也可能無法避免這種雜訊。這篇文章將以最簡單的方法,幫助你快速解決這個問題。

為什麼會產生雜訊?

經過多次測試與檢查,發現 100% 的這類雜訊問題,幾乎都來自於「機上盒」。這個機上盒通常會產生雜訊,並透過 HDMI 線傳輸至電視或擴大機,再進一步傳入音響系統,導致嗡嗡聲。

機上盒的三條主要連接線

  1. 第四台線(Coaxial 線):從戶外接入的訊號線。
  2. 電源線:提供機上盒所需的電力。
  3. HDMI 線:將影音訊號傳輸到電視或擴大機。

由於 HDMI 線會攜帶機上盒的電流雜訊,因此當音響與機上盒接在一起時,就會聽到「嗡嗡聲」。

解決方法

方法 1:取消機上盒,改用串流服務

如果你不依賴第四台,可以考慮使用 YouTube、Netflix 或 Disney+ 來觀看影音內容,避免機上盒帶來的雜訊問題。此外,這些串流服務還提供更靈活的觀賞體驗,不必忍受電視節目固定的播放時間。

方法 2:改用 Apple TV 或其他高品質電視盒

如果仍需要額外的電視盒,建議選擇 Apple TV 或其他經過認證的高品質設備,因為這些設備的電源處理較好,不太會產生雜訊。

方法 3:使用「光纖」音訊連接(推薦!)

光纖是一種理想的解決方案,因為它透過「光」傳輸音訊訊號,能有效隔離電流雜訊。

如何使用光纖音訊連接?

  1. 檢查電視是否有光纖輸出埠

    • 在電視背面或側面,尋找一個標示「Optical Out」的方形埠,通常內部會發出紅光。
  2. 購買一條光纖線

    • 可以在 PCHome、蝦皮等平台購買光纖線。
  3. 連接光纖線到 DAC 或音響設備

    • 如果音響系統支援光纖輸入,直接插入即可。
    • 若沒有光纖輸入,可以購買「光纖轉 RCA 轉換器」,將光纖訊號轉換為 RCA 輸入,然後接入音響系統。

方法 4:使用電源濾波器

如果你仍然聽到雜訊,可以考慮使用濾波插座來隔離電源雜訊,例如:

  • 濾波電源排插
  • 獨立變壓器

這些設備能夠減少來自電源的干擾,進一步改善音響品質。

結論

透過這篇文章,你可以學會如何解決電視接音響時的「嗡嗡聲」問題。最推薦的方法是使用光纖連接,因為它能完全隔離雜訊。如果不想更換設備,也可以考慮取消機上盒,或改用更高品質的電視盒。希望這篇教學能幫助你獲得更好的視聽體驗!

2025年3月22日 星期六

ESP32 Web 控制LED

ESP32 Web 控制LED

介紹

ESP32 是一款強大的微控制器,內建 Wi-Fi 和藍牙功能,可以輕鬆地用來建立 Web 伺服器,遠端控制設備。本指南將帶你從零開始,使用 ESP32 建立一個 Web 伺服器,並透過 Wi-Fi 控制 LED 燈。

所需材料

  • ESP32 開發板
  • 麵包板
  • 兩個 LED 燈(紅色與綠色)
  • 220 歐姆電阻(各 2 個)
  • 杜邦線
  • USB 傳輸線(用於連接 ESP32)

硬體連接

  1. 將 ESP32 插入麵包板。
  2. 使用杜邦線將 GPIO 16 連接至紅色 LED 的正極(長腳)。
  3. 在紅色 LED 的負極(短腳)與 GND 之間串聯 220 歐姆電阻。
  4. 使用杜邦線將 GPIO 17 連接至綠色 LED 的正極(長腳)。
  5. 在綠色 LED 的負極(短腳)與 GND 之間串聯 220 歐姆電阻。
  6. 確保所有接線正確無誤。

軟體安裝與設定

1. 安裝 Arduino IDE 與 ESP32 開發板

  1. 下載並安裝 Arduino IDE
  2. 開啟 Arduino IDE,前往 檔案 > 偏好設定,在 附加開發板管理 URL 欄位中輸入:
    https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
    
  3. 前往 工具 > 開發板 > 開發板管理員,搜尋 esp32,安裝 ESP32 by Espressif Systems
  4. 選擇 工具 > 開發板,選擇 NodeMCU-ESP32S(或根據你的 ESP32 板型選擇相應開發板)。

2. 編寫 Arduino 程式碼

打開 Arduino IDE,建立新草稿,輸入以下程式碼:

#include <WiFi.h>

// 設定 Wi-Fi 網路 SSID 與密碼
const char* ssid = "book";
const char* password = "12345678";

// 建立 Web 伺服器,監聽 80 端口
WiFiServer server(80);

// 記錄 LED 狀態
bool redState = false;
bool greenState = false;

void setup() {
    Serial.begin(115200); // 初始化序列埠,設定波特率為 115200
   
    // 設定 ESP32 以 Station 模式連線至 Wi-Fi
    WiFi.mode(WIFI_STA);
    WiFi.begin(ssid, password);
   
    Serial.print("Connecting to WiFi");
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }
    Serial.println("\nWiFi connected");
    Serial.print("Station IP Address: ");
    Serial.println(WiFi.localIP());
   
    server.begin(); // 啟動 Web 伺服器

    // 設定 GPIO 16 和 GPIO 17 為輸出模式
    pinMode(16, OUTPUT);
    pinMode(17, OUTPUT);
}

void loop() {
    WiFiClient client = server.available(); // 檢查是否有用戶端連線
    if (client) {
        String request = client.readStringUntil('\r'); // 讀取客戶端請求
        client.flush(); // 清空接收緩衝區

        // 根據請求字串控制 LED
        if (request.indexOf("/red/on") != -1) {
            digitalWrite(16, HIGH); // 開啟紅色 LED
            redState = true;
        } else if (request.indexOf("/red/off") != -1) {
            digitalWrite(16, LOW);  // 關閉紅色 LED
            redState = false;
        } else if (request.indexOf("/green/on") != -1) {
            digitalWrite(17, HIGH); // 開啟綠色 LED
            greenState = true;
        } else if (request.indexOf("/green/off") != -1) {
            digitalWrite(17, LOW);  // 關閉綠色 LED
            greenState = false;
        }

        // 回應 HTTP 請求,顯示 HTML5 按鈕介面
        client.print("HTTP/1.1 200 OK\nContent-Type: text/html\n\n");
        client.print("<html><head><style>");
        client.print(".btn { width: 300px; height: 300px; border-radius: 50%; font-size: 20px; border: none; cursor: pointer; text-align: center; line-height: 100px; display: inline-block; margin: 10px; }");
        client.print(".red-on { background-color: red; color: white; }");
        client.print(".red-off { background-color: darkred; color: white; }");
        client.print(".green-on { background-color: green; color: white; }");
        client.print(".green-off { background-color: darkgreen; color: white; }");
        client.print("</style></head><body>");
        client.print("<h1>ESP32 Web Server</h1>");
        client.print("<button class='" + String(redState ? "red-on" : "red-off") + " btn' onclick=\"location.href='/red/" + String(redState ? "off" : "on") + "'\">Red</button>");
        client.print("<button class='" + String(greenState ? "green-on" : "green-off") + " btn' onclick=\"location.href='/green/" + String(greenState ? "off" : "on") + "'\">Green</button>");
        client.print("</body></html>");
       
        client.stop(); // 關閉連線
    }
}

3. 上傳與執行程式

  1. 連接 ESP32 到電腦,選擇 工具 > 連接埠,選擇 ESP32 的 COM 連接埠。
  2. 點擊 上傳,將程式燒錄到 ESP32。
  3. 打開 工具 > 序列監視器,選擇 115200 波特率。
  4. 記下 ESP32 在Serial顯示的 IP 位址。

4. 連接與控制 LED

  1. 連接手機或電腦至 ESP32-Network Wi-Fi。
  2. 打開瀏覽器,在網址列輸入 ESP32 的 IP 位址。
  3. 點擊對應的按鈕控制 LED 開關。


總結

這篇指南教你如何用 ESP32 建立 Web 伺服器,透過 Wi-Fi 控制 LED。未來,你可以進一步使用繼電器控制高電壓設備,例如燈泡或風扇,讓你的專案更加實用!

使用 Google Firebase 和 ESP32 遠端控制設備——詳細教學


 

使用 Google Firebase 和 ESP32 遠端控制設備——詳細教學

前言

你好!今天我要帶你從零開始學習如何使用 ESP32Google Firebase 來遠端控制 LED。這意味著無論你身在何處,都能透過網路開啟或關閉 LED。

這篇教學適合完全沒有基礎的初學者,我會一步步帶你完成這個專案。讓我們開始吧!


你需要準備的材料

硬體:

  • ESP32 開發板(或 ESP8266 亦可)
  • LED x1
  • 220Ω 或 100Ω 電阻 x1
  • 麵包板
  • 杜邦線
  • USB 連接線(用來連接 ESP32 到電腦)

軟體與帳號:

  • Arduino IDE(開發 ESP32 程式)
  • Google Firebase 帳號(使用 Google 帳戶登入即可)

步驟 1:硬體連接

將 LED 與 ESP32 連接如下:

  • LED 正極(長腳) → ESP32 D4(GPIO 4)
  • LED 負極(短腳)電阻(220Ω / 100Ω)ESP32 GND

你可以直接將元件插在麵包板上,使用杜邦線完成連接。


步驟 2:建立 Firebase 專案

Firebase 是 Google 提供的應用開發平台,其中的 Realtime Database 可以讓我們儲存數據並隨時讀取。現在我們來設定 Firebase:

  1. 進入 Firebase 官方網站https://firebase.google.com/
  2. 登入 Google 帳號
  3. 點擊「建立專案」,並命名為 ESP32_LED_Control
  4. 同意 Firebase 條款,然後點擊「繼續」。
  5. 關閉 Google Analytics(我們這次不需要)。
  6. 等待專案建立完成

步驟 3:設定 Firebase Realtime Database

  1. 進入 Firebase 控制台,選擇剛剛建立的 ESP32_LED_Control 專案。
  2. 在左側選單點擊「Build」→「Realtime Database」
  3. 點擊「建立資料庫」
  4. 選擇「美國(us-central1)」作為位置,然後點擊「下一步」
  5. 選擇「測試模式(Test mode)」,這樣我們就可以讀取和寫入數據。
  6. 建立一個資料節點
    • 「+」 新增節點
    • 鍵(Key):LED_State
    • 值(Value):0(代表 LED 預設為關閉)
    • 數據類型:Number

這樣我們的數據庫就準備好了!


步驟 4:設定 Firebase Authentication(身份驗證)

為了安全性,我們需要讓 ESP32 使用電子郵件與密碼登入 Firebase。

  1. 在 Firebase 控制台左側選單點擊「Build」→「Authentication」
  2. 選擇「電子郵件與密碼」登入方式
  3. 啟用電子郵件/密碼登入,然後點擊「儲存」。
  4. 新增使用者
    • Email:esp32@yourproject.com(你可以隨意取)
    • Password:yourpassword

這樣 ESP32 就可以透過這個帳號存取 Firebase!


步驟 5:在 Arduino IDE 撰寫 ESP32 程式

1. 安裝 Firebase ESP Client 函式庫

  1. 打開 Arduino IDE
  2. 點擊「工具」→「管理函式庫」
  3. 搜尋「Firebase ESP Client」並安裝

2. 程式碼

#include <WiFi.h>
#include <FirebaseESP32.h>

// WiFi 設定
#define WIFI_SSID "你的 WiFi 名稱"
#define WIFI_PASSWORD "你的 WiFi 密碼"

// Firebase 設定
#define API_KEY "你的 Firebase API 金鑰"
#define DATABASE_URL "你的 Firebase 資料庫 URL"
#define USER_EMAIL "esp32@yourproject.com"
#define USER_PASSWORD "yourpassword"

FirebaseData fbdo;
FirebaseAuth auth;
FirebaseConfig config;

int LED_PIN = 4;

void setup() {
    Serial.begin(115200);
    pinMode(LED_PIN, OUTPUT);
    
    // 連接 WiFi
    WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
    while (WiFi.status() != WL_CONNECTED) {
        Serial.print(".");
        delay(1000);
    }
    Serial.println("WiFi 已連接");

    // 設定 Firebase
    config.api_key = API_KEY;
    config.database_url = DATABASE_URL;
    auth.user.email = USER_EMAIL;
    auth.user.password = USER_PASSWORD;

    Firebase.begin(&config, &auth);
}

void loop() {
    if (Firebase.RTDB.getInt(&fbdo, "/LED_State")) {
        int ledState = fbdo.intData();
        digitalWrite(LED_PIN, ledState);
        Serial.println(ledState == 1 ? "LED 開啟" : "LED 關閉");
    }
    delay(1000);
}

步驟 6:上傳程式並測試

  1. 選擇 ESP32 開發板(「工具」→「開發板」→「ESP32 Dev Module」)。
  2. 將 ESP32 連接到電腦
  3. 點擊「上傳」按鈕
  4. 開啟序列監視器(115200 baud),查看 WiFi 是否成功連接。
  5. 進入 Firebase,修改 LED_State 的值:
    • 設為 1(LED 亮起)
    • 設為 0(LED 熄滅)

結論

現在你已經學會如何使用 Firebase 遠端控制 ESP32 的 LED!你可以進一步擴展這個專案,例如:

  • 控制多個設備(燈泡、風扇等)。
  • 使用手機 App 控制
  • 加入感測器,回傳數據到 Firebase

希望這篇教學對你有幫助!如果有任何問題,歡迎留言討論 😊。

2025年3月20日 星期四

NVIDIA-GTC-2025發表機器人12分鐘全精華-黃仁勳-Keynote-點名的下一個大市


 在 NVIDIA GTC 2025 的主題演講中,黃仁勳先生帶我們深入探討了機器人技術的未來。他開場即點出,機器人時代已然來臨。隨著全球勞動力短缺的問題日益嚴重,未來可能需要支付 50,000 美元年薪來僱用機器人,這表明機器人將成為一個巨大的產業。

機器人的崛起與物理 AI 的發展

機器人技術的發展不僅局限於工廠和倉儲,而是逐步擴展到我們生活的方方面面。從自動駕駛汽車到通用機器人,所有能夠移動的設備未來都可能變得自主。NVIDIA 正透過三大計算平台推動這一變革:

  1. 機器人 AI 模擬與訓練:透過 Omniverse 和 Cosmos,開發者可以生成大規模的合成數據來訓練機器人。
  2. 測試與強化學習:Isaac Lab 讓機器人能夠通過模仿學習或強化學習來習得新技能。
  3. 數位孿生與實體測試:開發者可以在 Omniverse 內進行軟硬體聯合測試,確保機器人在現實世界的環境中能夠準確執行任務。

這些技術讓機器人在學習過程中能夠更有效率,並確保它們在進入現實應用前已經具備良好的適應性。

Generalist AI 與 Groot N1 的推出

演講中最令人興奮的部分之一,莫過於 NVIDIA 推出的 Groot N1——一個專為人形機器人設計的通用 AI 基礎模型。這個模型採用了雙系統架構,靈感來自人類的認知處理方式:

  • 慢速思考系統:負責感知環境、理解指令並規劃行動。
  • 快速思考系統:將計畫轉化為精確、連續的機器人行為。

Groot N1 讓機器人能夠輕鬆操作常見物品,執行多步驟指令,並適應各種環境和任務。透過 NVIDIA 的生態系統,開發者可以根據不同應用需求來微調 Groot N1,使其能夠在工業、醫療、家庭等不同場景中發揮作用。

物理 AI 的挑戰與 NVIDIA 的解決方案

黃仁勳指出,要讓機器人真正智能化,需要解決三大問題:

  1. 數據來源:機器人不僅需要來自互聯網的大規模數據,還需要「行動與控制數據」,這些數據的獲取成本極高。
  2. 模型架構:如何構建能夠適應不同場景的 AI 模型,使其能夠在物理環境中靈活應對挑戰?
  3. 規模化問題:如何讓 AI 持續變得更聰明?這涉及數據和計算資源的擴展問題。

為了解決這些問題,NVIDIA 推出了 Omniverse Cosmos,這是一個具備生成能力的 AI 模型,可以無限擴展虛擬環境,為機器人提供大量的訓練數據。此外,NVIDIA 還與 DeepMind 和 Disney Research 合作開發了全新的物理引擎 Newton,專為機器人的細緻動作訓練而設計。

開放源代碼:推動機器人技術的普及

演講的最後,黃仁勳宣布了一項重大消息——Groot N1 將開放源代碼!這意味著全球的開發者可以自由地存取、調整和改進這一強大的 AI 模型,加速機器人技術的發展。

這一舉措將推動機器人領域的創新,使更多企業和個人能夠參與到這個蓬勃發展的市場中。我相信,未來機器人將變得更加普及,並真正改變我們的生活方式。

結語

NVIDIA 在 GTC 2025 大會上展示的技術,讓我對未來充滿期待。機器人產業即將迎來爆發式增長,從智慧工廠到家庭助理,機器人的應用將變得無所不在。隨著 Groot N1 和 Newton 的發布,以及 Omniverse Cosmos 的持續發展,我們正在見證一場物理 AI 的革命。

作為一名技術愛好者,我深刻感受到 AI 與機器人技術的進步正以前所未有的速度推動世界向前。我迫不及待地想要看到這些技術如何改變我們的工作與生活,也期待親手參與其中,見證未來的來臨!

2022年3月9日 星期三

聲寶卡式濾心頭蓋


 https://www.ruten.com.tw/item/show?22027794089976

在這裡買的接頭


https://www.ruten.com.tw/item/show?21814839221595

【品名】台製優質濾心頭蓋 (適用3M、EVERPURE濾心)功能同原廠QL2頭蓋(850元)

【說明】進出水口:3分(3/8"NPT)內牙

【適用濾心】

 EVERPURE 愛惠浦 濾芯型號:

 S-54、H54、S-104、S-100、H-100、H-104、4DC、 MC2、MH2、4C、4K、2K、H300、BH2、I20002

 3M 濾芯型號:

 CFS9812XS、CFS9812X、CFS9112、EP-25、CS-24、 CS-25、CS-15 

【材質】合金金屬、尼龍塑膠、不鏽鋼L型吊片

【產地】台灣

2020年8月16日 星期日

  徹底改變你的 ESP32 專案!使用 GPIO Viewer 即時監控引腳狀態 前言 當你開發 ESP32 專案時,是否曾經遇到不知某個 GPIO(通用輸入輸出) 引腳是否正常工作的情況?有時候,問題出在程式碼,有時候則是接線錯誤。而今天,我要分享一個能 即時監控 ES...