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。




[NodeMCU-32S] NodeMCU-32S ESP32 DHT11 開發板環境-軟體安裝 (1/3)

設定 NodeMCU-32s開發板環境

目的:使用NodeMCU-32s開發板+dht11 長時間監控溫溼度,資料能上傳到雲端遠端線上瀏覽

軟體環境:

1、安裝 ESP32 開發板支援:

(1)打開 Arduino IDE。點選 檔案(File) /偏好設定(Preferences)。

(2)在「額外的開發板管理員網址(Additional Boards Manager URLs)」中加入: https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

(3)點擊「確定」。

(4)點選 工具(Tools) / 開發板(Board) / 開發板管理員(Boards Manager...)。

(5)在搜尋框中輸入 esp32,然後點擊「安裝」。


2、安裝所需的函式庫:

(1)DHT sensor library: 用於讀取 DHT11/DHT22 感測器數據。

(2)點選 /管理函式庫(Manage Libraries...)。

(3)搜尋 DHT sensor library 並安裝。


Adafruit IO Arduino Library: 用於連接 Adafruit IO 平台。

(1)在「管理函式庫」中搜尋 Adafruit IO Arduino 並安裝。

(2)Adafruit MQTT Library: Adafruit IO 函式庫會依賴這個函式庫,通常會自動安裝,但如果遇到問題可以手動搜尋安裝 Adafruit MQTT Library。


程式庫安裝完成!!!


購買參考:

https://shopee.tw/%E3%80%90%E6%A8%82%E6%84%8F%E5%89%B5%E5%AE%A2%E5%AE%98%E6%96%B9%E5%BA%97%E3%80%91%E3%80%8A%E9%99%84%E7%99%BC%E7%A5%A8%E3%80%8BNodeMCU-32S-WIFI-%E8%97%8D%E7%89%99-%E7%89%A9%E8%81%AF%E7%B6%B2%E9%96%8B%E7%99%BC%E6%9D%BF-Esp32-%E6%96%B0%E7%89%88-ESP-32S-i.139069730.3448815178

2025年5月25日 星期日

[google finance] 用 Google 試算表公式抓取 上櫃股價資料、債券(改良版)

1. 打開 Google 試算表

2. 輸入以下公式

(1)股名:

=IMPORTXML("https://tw.stock.yahoo.com/quote/00679B","//*[@id='main-0-QuoteHeader-Proxy']/div/div[1]/h1")

(2)股價:

=IMPORTXML("https://tw.stock.yahoo.com/quote/00679B","//*[@id='main-0-QuoteHeader-Proxy']/div/div[2]/div[1]/div/span[1]")

(3)漲跌點數:

=股價 * 漲跌幅

(4)、漲跌幅(百分比):

=IMPORTXML("https://tw.stock.yahoo.com/quote/00679B","//*[@id='main-0-QuoteHeader-Proxy']/div/div[2]/div[1]/div/span[3]")*100


注意:B要大寫喔!



google finance 相關技巧及文章:


2025年5月23日 星期五

[技術] HTC One X9(X9u) 開啟GPS 無限重開機重啟 解決方法

 HTC X9u 手機開啟位置GPS 之後,手機會不斷重新啟動,若把網路關掉之後,就不會一直重新啟動,可是,總不能一直不上網吧!解決方法蠻簡單的,步驟如下:

一、在開機之後,立刻快速關掉行動網路或WIFI 連線。


二、進入/設定/位置/模式/僅裝置(使用GPS判斷您的位置


設定完成之後,手機便不會一直重新開機了。

2025年5月22日 星期四

[投資] 詐騙話術與破解對應表(Fraud tactics and their corresponding countermeasures)


一、破解詐騙話術的對策

1. 「拖延」是你的武器

  • 詐騙最怕你冷靜,一旦你說「我再想一下」、「我等一下回電」,對方就會急了。

  • ✅ 建議回應:
    -「我現在在上班,等一下再處理。」
    -「你說的資訊我先查證一下。」

2. 反問,逼對方露出馬腳

  • 越問細節,對方越容易說錯或開始模糊帶過。

  • ✅ 反問例子:
    -「你說你是銀行的?請告訴我你的員工編號、分行代碼。」
    -「我打165查一下你們這個單位的資料再回撥,好嗎?」

3. 查證對方身分或說法

  • 舉例:聲稱是警察,直接打110165求證;說是銀行來電,直接撥回官網電話查詢。

4. 拒絕提供個資與操作指示

  • 任何要你:

    • 下載不明App、

    • 掃QR code、

    • 輸入OTP驗證碼、

    • 提供金融帳號/提款卡,

    都是高危險行為,務必拒絕。

5. 用「第三人」策略拖延與查核

  • ✅ 說法範例:
    -「這筆金額比較大,我要先問我老公/太太/爸媽。」
    -「我報稅習慣都是請會計處理的,我先問她。」


二、實戰破解模擬對話

詐騙類型:假投資

詐騙話術:
「小姐您好,我們這邊是某國際金融機構,現在有一個穩定收益的投資方案,保證月月8%,只要您今天先匯第一筆資金就能搶先加入。」

破解回應:
-「這麼好的方案我先請律師朋友幫我看一下,你可以給我官網跟證照嗎?」
-「台灣保證獲利的金融商品都是非法的,我會報165確認一下你們這家公司。」


詐騙類型:假冒親友

詐騙話術:
「我是你表哥啦,我電話換了,現在急用錢,能不能借我三萬?」

破解回應:
-「你是說誰的表哥?你說一下我們上次見面是在哪裡?」
-「好啊,我打給姑姑確認一下你現在的電話。」


詐騙類型:假冒公務員(警察/檢察官)

詐騙話術:
「你涉及洗錢案,我們現在依法凍結你帳戶,請配合我們操作轉帳做資金清查。」

破解回應:
-「我不跟電話裡的人談法律問題,我會請律師陪我去警局說明。」
-「這麼嚴重的事,我會自己打110確認,謝謝你。」


三、最後提醒

  • ✅ 把165反詐騙專線存在手機,遇可疑電話立即查詢。

  • ✅ 銀行、警察、法院絕不會要求你操作提款、轉帳、掃碼或提供帳密。

  • ✅ 再緊急的事也該冷靜5分鐘,和親友討論一下再決定。


2025年5月20日 星期二

[投資] 關於詐騙~天下沒有白吃的午餐(About fraud~There is no free lunch in the world)

 

https://165dashboard.tw/

原來詐騙離我們這麼近~

身邊的朋友,很少聽到有被詐騙的經驗,所以鮮少聽到這樣的訊息。沒想到,最近聽到一位朋友的父親,因投資被詐騙超過千萬台幣。退休金幾乎都沒了,心情也非常沮喪,整個家愁雲慘霧。

被詐騙的人通常會經歷一連串強烈且複雜的情緒變化,這些心情狀態不僅影響他們當下的心理健康,也可能對往後的人際關係與信任感造成長遠的影響。以下是常見的心情狀態與可能的轉折歷程:

一、典型的心情狀態變化

  1. 震驚與否認

    • 「怎麼可能是詐騙?」、「我不相信這是真的。」

    • 初期會拒絕接受事實,腦中還在試圖找出合情合理的解釋。

  2. 憤怒與自責

    • 「怎麼會有人這麼壞?」、「我怎麼這麼笨?」

    • 對詐騙者憤怒,同時也對自己感到懊悔與羞愧,責備自己太天真。

  3. 恐懼與焦慮

    • 擔心自己的財務狀況、個資外洩,或可能遭遇更多問題。

    • 可能伴隨失眠、心悸、無助感。

  4. 悲傷與絕望

    • 如果損失龐大,可能會進入類似失去親人的哀傷階段。

    • 出現「我這輩子完了」的想法,甚至喪失生活動力。

  5. 社交退縮與羞辱感

    • 害怕告訴親友,怕被笑、被責備或不被理解。

    • 長期可能影響人際關係、對人的信任與自我價值。


二、可能的心理轉折與成長

  1. 面對與接納現實

    • 有人透過與親友或心理師傾訴,開始逐步接受事情已經發生。

    • 「我無法改變已發生的,但我可以決定怎麼面對。」

  2. 學習與反思

    • 分析自己當初為何會受騙,是出於貪念、孤單、急迫還是信任錯人。

    • 開始建立「防詐免疫力」,提高警覺心。

  3. 尋求正義或協助他人

    • 有些人會選擇報警、發聲揭露詐騙手法,幫助他人避免陷阱。

    • 轉化創傷為力量,成為防詐教育的推動者。

  4. 重新建立信任與自信

    • 雖然會留下陰影,但經歷後也讓人成熟,日後更懂得保護自己。

    • 如果能走出陰霾,會成為一個更堅韌、警覺也更有同理心的人。


三、陪伴者的態度建議

若你身邊有人遭遇詐騙,請記得:

  • 不要責備他們:多數受害者已經在自責,外界責怪只會加重心理創傷。

  • 給予同理與傾聽:即使你覺得這個騙局「很明顯」,但當事人在情境中往往看不清。

  • 鼓勵尋求專業幫助:心理諮商、法律諮詢、警政機構等都可能提供實質協助。

  • 支持他恢復日常生活與自信:提醒他「這件事並不定義你的人生」。

2025年5月12日 星期一

[教學] Scratch & Math 解二元一次聯立方程式(Scratch & Math Solve two linear equations)

 國一下學期的數學單元中,有提到如何解二元一次聯立方程式,若結合 Scratch來教學,是一個不錯的想法,將所學運用在變數運用及程式技巧上。

ax+by=c

dx+ey=f

程式範例如下:

2025年5月11日 星期日

[投資] 資產配置比例需要跟隨世界經濟局勢而去變動嗎?


可以分為兩種策略觀點:戰略資產配置(Strategic Asset Allocation)戰術資產配置(Tactical Asset Allocation)

一、戰略資產配置(Strategic Asset Allocation)

  • 定義:根據你的長期目標、風險承受度和時間週期設定一組固定的資產比例(例如:股票 60%、債券 30%、現金 10%)。

  • 特點

    • 不頻繁更動比例。

    • 假設市場短期波動難以預測,長期平均報酬更為穩定。

  • 操作方式:定期(例如每季或每年)再平衡資產回原始比例。

  • 適合誰:大多數長期投資人,尤其是想避免過度交易和情緒影響的人。

  • 是否隨經濟局勢變動?不需要頻繁調整,重點在「紀律與再平衡」。


二、戰術資產配置(Tactical Asset Allocation)

  • 定義:在原有戰略配置的基礎上,根據經濟局勢或市場預期做短期比例調整。

  • 特點

    • 希望在某些時期提升報酬或降低風險。

    • 例如:如果預期經濟衰退,可能暫時提高債券比例,減少股票部位。

  • 風險

    • 若判斷錯誤,反而可能降低報酬。

    • 執行上對市場觀察力與紀律要求高。

  • 適合誰:對經濟走勢有研究、有時間與能力關注市場的人。

  • 是否隨經濟局勢變動?是的,會根據情勢進行調整


建議做法:

  1. 大方向以戰略配置為核心(根據人生階段與風險承受度設計),

  2. 小幅度採用戰術配置(如市場極端過熱或過冷時做些微調整),

  3. 保持紀律與長期視角,避免被情緒牽著走。

2025年5月3日 星期六

[生活] 白沙屯媽祖的宗教活動為何可以感動人(Why the religious activities of Mazu in Baishatun can move people)


白沙屯媽祖的活動之所以能深深感動人,原因如以下幾個層面:

1. 信仰的力量與集體情感

白沙屯媽祖徒步進香是台灣極具代表性的民間信仰活動之一。數萬人不分年齡、職業、性別,一起走上數百公里的進香之路,展現了信仰的凝聚力共同願力。這種眾志成城的畫面本身就極具震撼力,讓人感受到人與人之間的溫暖與力量。

2. 媽祖「隨駕前行」的不預測性

與其他媽祖遶境不同,白沙屯媽祖進香不預先規劃路線,由駕前轎夫「問轎」決定走向。媽祖走哪裡,信眾就跟到哪裡,這種完全交託、毫無保留的跟隨,充滿了神聖感與冒險精神,讓人更投入、更感動。

3. 艱辛中的感動

進香路途艱辛,參與者往往要走好幾天甚至超過 300 公里,風雨無阻。但在過程中,有民眾自發提供飲食、洗腳、按摩、住宿等無償服務,形成所謂的「香燈腳文化」與「信仰補給站」,展現出台灣人溫暖的人情味與互助精神。

4. 個人與神明的對話

對許多參與者而言,這不僅是一次宗教活動,更是一場心靈朝聖。在腳步與汗水中,許多人經歷自我對話、釋放情緒、獲得力量與療癒,有人祈求健康、有人為家人祝禱,也有人只是為了「感恩」。這種深層的心靈交流極具感染力。

5. 傳承與文化記憶

許多家庭三代同行,或是父母帶著小孩一起走,形成一種文化與信仰的傳承。這種代代相傳的情感也讓活動超越宗教,成為一種台灣人的「共同記憶」。


這是一個融合信仰、文化、情感與社會關懷的活動,不論是否信教,站在路邊看到媽祖轎來臨時,那股來自群體與信仰的力量,常常讓人熱淚盈眶。



跟隨著 媽祖的步伐,一齊前進北港朝天宮(2025-5-3)

2025-5-3 6:45 雲林東勢賜安宮 停駕休息

2025-5-3 10:52 即將扺達北港朝天宮

2025-5-3 12:28 扺達北港朝天宮


熱門文章