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 相關技巧及文章:


#google finance #google試算表 #上櫃 #債券 #tpc:taiex

2025年5月23日 星期五

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

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

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


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


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

熱門文章