2025年6月5日 星期四

[CLEC] 關於CLEC理財頻道的投資核心概念(CLEC Investment core concepts)

 在00451一億元的投資講座裡有提到一句話,

【理解風險、認識風險、控制風險、保留現金、緊急備用、有錢就立即買進指數基金,隨時買,打死不賣。】

這句應該可以完整說明CLEC整個投資心法及投資策略。每一句話背後都蘊含了穩健投資者的深厚哲學。

1. 理解風險

這是投資的第一步。你要明白市場波動、景氣循環、政治經濟變動、產業結構調整等都可能帶來資產價格的起伏。理解風險意味著:

  • 不盲目相信短期獲利

  • 明白每一種資產類別的風險特性(例如:股票 vs 債券 vs ETF)

  • 了解自己的風險承受能力


2. 認識風險

理解是理論層面,認識則是經驗層面。你可能經歷過一次股市崩盤、一次急跌,才真正「認識」風險。這一層境界強調:

  • 實際經歷過,並建立心理抗壓力

  • 投資行為不再因短期波動而恐慌或貪婪

  • 接受風險是投資過程的一部分


3. 控制風險

前兩點是認知,這點是行動。控制風險包含:

  • 資產配置:不把雞蛋放在同一個籃子裡

  • 留有現金緩衝:防止資產價格下跌時被迫賣出

  • 不槓桿、不融資投資:避免被斷頭

  • 穩健投資方式(例如:定期定額買指數)


4. 保留現金

這不是保守,而是戰略。保留現金可以:

  • 應付生活突發狀況

  • 在市場崩跌時,有資金可以進場加碼

  • 減少因股市波動帶來的心理壓力


5. 緊急備用

進一步強調現金的用途要分清楚:

  • 有一筆是「緊急預備金」(例如:6個月生活費)

  • 不用來投資,不隨便動用

  • 保障你在職涯或人生遭遇風險時,不會被迫賣出投資資產


6. 有錢就立即買進指數基金,隨時買

這是 CLEC 最實務的操作策略:

  • 投資的重點在於「參與市場」而非「預測市場」

  • 不需擇時,不等低點,因為你可能永遠猜不到

  • 指數基金(如:S&P 500、納斯達克100)能長期反映經濟成長與企業獲利


7. 打死不賣

這句話最具挑戰性,但也最有力:

  • 表示「信仰指數長期會上漲」

  • 強調投資是為了長期(退休、財富自由、富足健康的人生)

  • 不因短期恐慌賣出(不然前面的控制風險都白做了)

  • 賣出容易錯失大漲日(研究顯示少了幾個大漲日,報酬會大幅下降)


總結來說

這句話是:一套從「認識自己」到「控制行為」再到「堅守紀律」的完整投資心法,屬於長期投資、指數投資、穩健理財的實踐路線。

需要的不是天賦,而是紀律與信仰。



2025年6月1日 星期日

[LoT] NodeMCU Adafruit 網站監控溫溼度資料 Feeds & Dashboard

1. [NodeMCU-32S] NodeMCU-32S ESP32 DHT11 開發板環境-軟體安裝 (1/3)
2. [NodeMCU-32s] Adafruit 申請帳號API 建立 Feed (2/3)
3. [NodeMCU-32s] NodeMCU-32s DHT11 硬體接線 及 程式碼 (3/3)

繼上次的 NodeMCU-32s 實作之後,資料上傳至 Adafruit 已經一個星期了,讓我們來看看成果如何!

在adafruit中建立了一個 dashboard:


訊息接受 feeds 上的 溫度 temperature :


訊息接受 feeds 上的 溼度 humidity :

另外也可以在Adafruit網站中建立預警動作 Action。(下次分享)

說明:

過程中有打開除溼機,所以溼度有呈現斷崖式的下跌,但除溼機關掉之後,就很快回升。基本上跟其它的溼度計比起來,的確有些誤差,後續再觀察一星期,再看看是否誤差值如何調整。若是當居家參考使用,是完全沒問題的。

[google] 運用 AI 解決 Windows 10 瀏覽器 chrome 執行時 CPU 使用率百分比太高,造成暫時當機

這次詢問的是 Grok 語言模型,以下是AI回答內容:

Chrome 在 Windows 10 上執行時 CPU 使用率過高,可能導致系統暫時當機。以下是一些常見原因及解決方法,幫助你降低 CPU 使用率並改善效能:

### 可能原因

1. **過多分頁或擴充功能**:Chrome 的每個分頁和擴充功能都會佔用 CPU 資源。

2. **網頁內容複雜**:某些網站(如含大量動畫、影片或廣告的頁面)可能導致高 CPU 使用率。

3. **Chrome 版本過舊**:舊版本可能有性能問題或未修補的錯誤。

4. **背景進程**:Chrome 關閉後仍可能有背景進程運行。

5. **硬體限制**:CPU 性能不足或記憶體過低可能加劇問題。

6. **惡意軟體或廣告軟體**:可能導致 Chrome 異常耗用資源。


### 解決方法

1. **檢查 CPU 使用率**

   - 開啟 Chrome 的任務管理器(右鍵點擊標籤列 > 「任務管理器」或按 `Shift + Esc`),查看哪些分頁或擴充功能佔用最多 CPU。

   - 關閉高耗用分頁或停用不必要的擴充功能。


2. **減少分頁和擴充功能**

   - 關閉不常用的分頁,考慮使用書籤或「稍後閱讀」功能。

   - 前往 `chrome://extensions/`,停用或移除不必要的擴充功能。優先檢查廣告攔截器或資源密集型擴充。


3. **更新 Chrome**

   - 點擊右上角「三點」選單 > 「說明」 > 「關於 Google Chrome」,確保瀏覽器是最新版本(目前為 2025 年 5 月,應為 126.x 或更高版本)。

   - 更新後重啟瀏覽器


4. **啟用硬體加速**

   - 前往 `chrome://settings/system`,確保「使用硬體加速(如果可用)」已開啟。這可將部分負載轉移至 GPU,減輕 CPU 壓力。

   - 如果硬體加速導致問題,可嘗試關閉並觀察效果。


5. **清除瀏覽器資料**

   - 前往 `chrome://settings/clearBrowserData`,選擇清除快取和 Cookie(建議選擇「過去一小時」或「過去一天」以避免影響登入狀態)。

   - 過多的快取資料可能導致性能下降。


6. **檢查背景進程**

   - 前往 `chrome://settings/content/backgroundSync`,限制網站的背景同步。

   - 在 Windows 工作管理器(Ctrl + Shift + Esc)中,檢查是否有異常的 Chrome 進程(chrome.exe),結束不必要的進程。


7. **掃描惡意軟體**

   - 使用 Windows Defender 或第三方防毒軟體(如 Malwarebytes)進行全系統掃描,排除惡意軟體或廣告軟體的影響。

   - 在 Chrome 中,前往 `chrome://settings/cleanup`,使用內建的「清理電腦」功能檢查有害軟體。


8. **優化系統資源**

   - 確保 Windows 10 已更新至最新版本(設定 > Windows Update)。

   - 檢查記憶體使用情況,若記憶體不足,考慮增加 RAM 或關閉其他應用程式。

   - 在 Windows 工作管理器中,將 Chrome 的優先級設為「正常」或「低」(右鍵 chrome.exe > 設定優先級)。


9. **進階解決方案**

   - **重置 Chrome**:前往 `chrome://settings/reset`,選擇「恢復設定到原始預設值」,這會清除所有自訂設定但保留書籤。

   - **重新安裝 Chrome**:卸載 Chrome(控制台 > 程式和功能),然後從官網下載最新版本重新安裝。

   - **切換瀏覽器模式**:嘗試啟用 Chrome 的「效能模式」(設定 > 系統 > 記憶體節約器),或使用「訪客模式」測試是否仍高 CPU 使用率。


2025年5月26日 星期一

[NodeMCU-32s] NodeMCU-32s DHT11 硬體接線 及 程式碼 (3/3)

硬體接線:

DHT11 VCC (電源)  ESP32 的 3.3V 腳位

DHT11 GND (接地) ESP32 的 GND 腳位

DHT11 DATA (數據) ESP32 的 GPIO 4 腳位


WIFI 環境準備:

準備 WIFI SSID及密碼


Arduino 程式碼:

#include <WiFi.h> // ESP32 的 Wi-Fi 函式庫

#include <Adafruit_MQTT.h> // Adafruit MQTT 函式庫

#include <Adafruit_MQTT_Client.h> // Adafruit MQTT 客戶端函式庫

#include "DHT.h" // DHT 溫濕度感測器函式庫


// --- Wi-Fi 設定 ---

#define WIFI_SSID "你的Wi-Fi名稱"      // <<<< 請替換為你的 Wi-Fi 名稱 >>>>

#define WIFI_PASSWORD "你的Wi-Fi密碼"  // <<<< 請替換為你的 Wi-Fi 密碼 >>>>


// --- Adafruit IO 設定 ---

#define AIO_SERVER      "io.adafruit.com" // Adafruit IO 伺服器地址

#define AIO_SERVERPORT  1883              // 標準 MQTT 埠

#define AIO_USERNAME    "你的Adafruit_IO_用戶名"  // <<<< 請替換為你的 Adafruit IO 用戶名 >>>>

#define AIO_KEY         "你的Adafruit_IO_AIO_金鑰"   // <<<< 請替換為你的 Adafruit IO AIO Key >>>>


// --- DHT11 感測器設定 ---

#define DHTPIN 4     // DHT 感測器數據腳位連接到 ESP32 的 GPIO 4

#define DHTTYPE DHT11 // 感測器類型 (如果是 DHT22 請改為 DHT22)

DHT dht(DHTPIN, DHTTYPE); // 初始化 DHT 感測器物件


// 設定 Wi-Fi 客戶端

WiFiClient client;


// 設定 Adafruit MQTT 客戶端

Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);


// 設定 Adafruit IO Feed 物件

// 這些 Feed 名稱必須與你在 Adafruit IO 上建立的 Feed 名稱完全一致

Adafruit_MQTT_Publish temperatureFeed = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/temperature");

Adafruit_MQTT_Publish humidityFeed = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/humidity");


// 定義上傳時間間隔

const long uploadInterval = 30000; // 每 30 秒上傳一次數據 (單位: 毫秒)

unsigned long lastUploadTime = 0;


void connectWiFi() {

  Serial.print("連接到 Wi-Fi: ");

  Serial.println(WIFI_SSID);


  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);


  while (WiFi.status() != WL_CONNECTED) {

    delay(500);

    Serial.print(".");

  }


  Serial.println("\nWi-Fi 已連接!");

  Serial.print("IP 位址: ");

  Serial.println(WiFi.localIP());

}


// 函數:連接到 Adafruit IO MQTT 伺服器

void connectMQTT() {

  int8_t ret; // 返回值


  // 嘗試連接 MQTT,直到成功

  while ((ret = mqtt.connect()) != 0) { // mqtt.connect() 返回 0 表示成功

    Serial.print(mqtt.connectErrorString(ret)); // 打印連接錯誤信息

    Serial.println("。重新嘗試 MQTT 連接...");

    mqtt.disconnect(); // 斷開現有連接

    delay(5000); // 等待 5 秒後重試

  }

  Serial.println("MQTT 已連接到 Adafruit IO!");

}


void setup() {

  Serial.begin(115200); // 設置序列埠鮑率為 115200

  delay(10);

  Serial.println("\n");


  dht.begin(); // 初始化 DHT 感測器


  connectWiFi(); // 連接 Wi-Fi

}


void loop() {

  // 確保 MQTT 連接已建立

  connectMQTT(); // 每次 loop 都檢查並確保連接


  // 檢查是否到了上傳時間

  if (millis() - lastUploadTime > uploadInterval) {

    Serial.println("讀取 DHT11 數據...");


    // 讀取濕度、溫度

    float h = dht.readHumidity();

    float t = dht.readTemperature();


    // 檢查讀取是否成功

    if (isnan(h) || isnan(t)) {

      Serial.println("讀取 DHT 感測器失敗!請檢查接線。");

      return; // 失敗則不進行上傳

    }


    Serial.print("溫度: ");

    Serial.print(t);

    Serial.print(" °C, 濕度: ");

    Serial.print(h);

    Serial.println(" %");


    // 將數據發佈到 Adafruit IO

    Serial.print("上傳溫度 ("); Serial.print(t); Serial.print(")... ");

    if (temperatureFeed.publish(t)) {

      Serial.println("成功!");

    } else {

      Serial.println("失敗!");

    }


    Serial.print("上傳濕度 ("); Serial.print(h); Serial.print(")... ");

    if (humidityFeed.publish(h)) {

      Serial.println("成功!");

    } else {

      Serial.println("失敗!");

    }

    

    lastUploadTime = millis(); // 更新上次上傳時間

  }


  // 保持 MQTT 客戶端活躍,處理收到的訊息 (如果有的話)

  mqtt.processPackets(100); // 處理 100ms 的 MQTT 數據包

  delay(1); // 短暫延遲

}


編譯上傳成功畫面:

Writing at 0x000e3972... (97 %)

Writing at 0x000e907e... (100 %)

Wrote 912288 bytes (588687 compressed) at 0x00010000 in 52.1 seconds (effective 140.2 kbit/s)...

Hash of data verified.

Leaving...

Hard resetting via RTS pin...

說明:

(1)紅字看似錯誤訊息,其實程式已上傳,並開始運作,我們可以從序列埠監控,可以看到上傳成功的設息,所以不用擔心。

(2)可以提供外接電源給開發板,這樣就可以源源不斷餵資料到 Afafruit網站。


序列埠監控畫面訊息:

MQTT 已連接到 Adafruit IO!

讀取 DHT11 數據...

溫度: 24.80 °C, 濕度: 72.00 %

上傳溫度 (24.80)... 成功!

上傳濕度 (72.00)... 成功!



[NodeMCU-32s] Adafruit 申請帳號API 建立 Feed (2/3)

https://io.adafruit.com/

1、申請帳號後,可以得到使用者名程及API KEY, 拿到API私錀,可以寫在程式中,將監測資料上傳至雲端。

2、建立 temperature 和 humidity 兩個 Feed,日後程式將可以資料放入Feed。




熱門文章