顯示具有 iot 標籤的文章。 顯示所有文章
顯示具有 iot 標籤的文章。 顯示所有文章

2021年11月4日 星期四

[Cafe+Iot] 家庭烘豆之烘焙日誌

瀏覽數

喜愛喝咖啡的我,2011年三月下旬開始自己嘗試在家自己手烘咖啡,選擇了【手網手搖】的方式在家烘豆。慢慢的喜愛上「烘豆」,然後嘗試紀錄烘焙過程,要詳實紀錄烘豆,就是【烘焙曲線圖】。

 

於是使用 IOT設備 【NodeMcu v2 ESP8266 CP2102 開發板】+【DHT11 溫濕度感應模組】+【MAX6675 K型熱電偶溫度模組】+【K型熱電偶接點式測溫線】+【Blynk APP】,即時紀錄烘焙的溫度與時間,將數據即時傳送到雲端資料庫中,並撰寫網頁顯示【烘焙曲線圖】。


設備材料購買參考(電源供應可使用,舊的手機充電頭+MicroUSB充電線):

01.【不鏽鋼手網 $150】: https://tinyurl.com/2bc89ev2

02 .【麵包板 $30】: https://tinyurl.com/c43r3ebs

03 .【單芯線0.6mm $35】: https://tinyurl.com/4hjj4zdp

04.【NodeMcu v2 ESP8266 CP2102 開發板 $120】: https://tinyurl.com/37xv35n8

05.【DHT11 溫濕度感應模組 $35】: https://tinyurl.com/2pp2bawv

06.【MAX6675 K型熱電偶溫度模組 $110】: https://tinyurl.com/3wbvwh87

07.【K型熱電偶接點式測溫線 $15】: https://tinyurl.com/4kecp7zx

08.【Blynk APP $0】: https://tinyurl.com/ws6r5nzh

09.【自行架設 Blynk Local Server $0】: https://tinyurl.com/kbw9k632

10.【Arduino 開發軟體 free】: https://www.arduino.cc/en/software

11.【MySQL資料庫+網頁】: 自行將讀取到的資料即時寫入資料庫中,並自行撰寫網頁程式顯示「烘焙曲線圖」



 

個人的烘焙日誌(第43烘)網址如下:

 http://220.133.52.37:81/coffee/?devid=43

 

操作方式如下圖:


 

2019年6月21日 星期五

[IOT] 更省電的方式使用DHT11溫濕度模組

瀏覽數
參考: https://tinyurl.com/yxbs55m2
參考: https://tinyurl.com/y4c3cl8d

最近在玩 IOT 物聯網,使用 NodeMCU v2 WIFI (CP2102) + DHT11溫濕度模組,並使用 Arduino IDE 程式開發及燒錄 + 手機監控 Blynk APP 開發。

參考購買網址:
NodeMCU v2 (CP2102) => https://tinyurl.com/y2uang6z
DHT11溫濕度模組 => https://tinyurl.com/yyb6a2xb

一般DHT11溫濕度模組,連接腳位有三個,連接方式如下:
VCC:   電源,連接到 NodeMCU 的 3.3V
DATA: 資料傳輸,連接到 NodeMCU 的 D1~D4 (其中一個)
GND:  接地,連接到 NodeMCU 的 GND

 
 
 

然後我設定每30秒偵測一次溫濕度,實作是OK。於是放在家裡客廳測試,並監控家裡客廳的溫濕度,測試的結果很穩定也很正常。

但是因為我買的是有紅色電源燈的DHT11溫濕度模組(當初應該買沒有電源燈的),所以運作的時候DHT11的紅色電源燈會一直點亮著,到了晚上那顆紅色點源燈特別醒目。

於是思考如何不讓那顆紅色電源燈一直亮著,可是程式無法控制 DHT11 電源燈不亮 (因為它是電源指示燈)。於是想說因為每30秒偵測一次,如果只要在偵測的當下給DHT11電源就好,其他時間就不要給電源,這樣一來也可能比較省電吧。

思考後,將 DHT11溫濕度模組,連接腳位連接方式改變如下:

VCC:   電源,連接到 NodeMCU 的 D1(GPIO5)
DATA: 資料傳輸,連接到 NodeMCU 的 D2(GPIO4)
GND:  接地,連接到 NodeMCU 的 GND

然後重新調整程式,在每30秒要偵測溫濕度時,將D1設定為HIGHT (提供DHT11電源),然後暫停約2.5秒(這是用測試出的結果,時間太短會偵測不到溫濕度),然後開始讀取溫濕度,讀取到溫濕度後,將D1設定為LOW (停用DHT11電源)。

上述方式調整後,每隔30秒開始偵測時,DHT11紅色電源燈只會點亮2.5秒,之後就會熄滅。如此DHT11紅色電源燈就不會一直點亮著,而且此方法應該比較省電。

程式碼如下:

#define BLYNK_PRINT Serial

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <WiFiManager.h>
#include <EEPROM.h>
#include <DHT.h>

BlynkTimer timer;
char auth[] = "a9e0xxxxxxxxxxxxxxxxxxxxxxxxe1ae"; //blynk token

#define DHTPOWERPIN 5   //DHT11電源接於GPIO05(D1)
#define DHTPIN 4        //DHT11接於GPIO04(D2)

#define DHTTYPE DHT11     // DHT 11
DHT dht(DHTPIN, DHTTYPE);

int   Sensor_loop_sec = 30; //溫濕度幾秒偵測一次
float tadj = -0.5;          //溫度校正 虛擬腳位V3
float hadj = 5;             //濕度校正 虛擬腳位V4

void sendSensor() //讀取溫濕度並存到Blynk虛擬腳位
{
  digitalWrite(DHTPOWERPIN, HIGH); //DHT11電源開啟
  delay(2500);
  float h = dht.readHumidity();
  float t = dht.readTemperature(); // or dht.readTemperature(true) for Fahrenheit
 
  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    digitalWrite(LED_BUILTIN, HIGH); //NodeMCU內建LED燈關閉
    digitalWrite(DHTPOWERPIN, LOW); //DHT11電源關閉
    return;
  }
  Blynk.virtualWrite(V1, t + tadj); //將溫度寫入虛擬腳位V1
  Blynk.virtualWrite(V2, h + hadj); //將濕度寫入虛擬腳位V2
  digitalWrite(LED_BUILTIN, LOW); //NodeMCU內建LED燈點亮
  delay(10);
  digitalWrite(LED_BUILTIN, HIGH); //NodeMCU內建LED燈關閉
  digitalWrite(DHTPOWERPIN, LOW); //DHT11電源關閉
}

BLYNK_CONNECTED() {  //called when connected to the server
  Blynk.syncAll();
}
BLYNK_WRITE(V3) {  //虛擬腳位V3(溫度校正) APP寫入NodeMCU事件處理函數
  tadj = param.asFloat();
}
BLYNK_WRITE(V4) {  //虛擬腳位V4(濕度校正) APP寫入NodeMCU事件處理函數
  hadj = param.asFloat();
}

void setup()
{
  // Debug console
  Serial.begin(115200);
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, HIGH);
  pinMode(DHTPOWERPIN, OUTPUT);
 
  EEPROM.begin(512);
  WiFiManager wifiManager;
  wifiManager.autoConnect("NodeMCU");
  //if you get here you have connected to the WiFi
  Serial.println("connected...yeey :)");

  Blynk.begin(auth, WiFi.SSID().c_str(), WiFi.psk().c_str());
  Blynk.begin(auth, ssid, pass);

  Blynk.virtualWrite(V3, tadj);
  Blynk.virtualWrite(V4, hadj);

  dht.begin();

  // Setup a function to be called every second
  timer.setInterval(Sensor_loop_sec*1000L, sendSensor);
}

void loop()
{
  Blynk.run();
  timer.run();
}

PS:
在偵測完溫濕度後,若偵測成功,NodeMCU內建LED燈會閃一下10毫秒 (這是方便判斷DHT11偵測溫濕度有沒有成功)。