跳到主要內容

 自 109 / 2 /25 起啟用

物聯網 / Blynk / Blynk 遠端監測及控制家電

給合繼電器,Blynk 遠端監測及控制家電。 

Blynk App

Datastreams 是 Device 裝置與 Blynk 雲端之間資料傳輸的通道
 
Device 裝置向 Blynk 雲端傳送數據:
Blynk.virtualWrite(虛擬腳位 vPin, 數據 value) 函數將感測數據 value 傳送至 Blynk 之虛擬腳位 vPin
 
Blynk 雲端向 Device 裝置傳送數據:
BLYNK_WRITE(虛擬腳位 vPin)   // 當虛擬腳位 vPin 有改變時,便會觸發執行
{
     int pinValue = param.asInt();   // param.asInt() 函數:以整數型態讀取虛擬腳位 vPin 的值
}
  • 溼度數據傳送到 Blynk 虛擬腳位 V5
  • 溫度數據傳送到 Blynk 虛擬腳位 V6
  • 光照度數據傳送到 Blynk 虛擬腳位 V7
  • Blynk 虛擬腳位 V1 控制風扇開關
  • Blynk 虛擬腳位 V2 控制風燈開關

Datastreams

// Template ID、Template Name、Auth Token 一定要放在程式的最前面
#define BLYNK_TEMPLATE_ID                "TMPLoKYO0Ki-"
#define BLYNK_TEMPLATE_NAME         "Quickstart Template"
#define BLYNK_AUTH_TOKEN                "JW2j1JiRW1br2gR6JdwIPk9bo8NGSRyb"
 
#include "ESP8266WiFi.h"
#include "BlynkSimpleEsp8266.h"
 
char ssid[] = "TCGS-IOT";    //無線基地台SSID名稱
char pass[] = "22205108";     //無線基地台密碼
 
#include "SSD1306.h" //匯入OLED程式庫
#include "DHTesp.h" //匯入DHT程式庫
#include "BH1750.h"//匯入光照度感測器程式庫
SSD1306  display(0x3C, D2, D1);    //宣告使用OLED螢幕物件(位址,SDA,SCL)==SDA>D2,SCL>D1
DHTesp dht; //宣告dht物件
BH1750 lightMeter;  //宣告光照度BH1750物件,物件名稱為lightMeter
BlynkTimer timer; //宣告BlynkTimer計時器物件
float humidity = 0; //宣告一個資料型態為float的全域變數humidity
float temperature = 0; //宣告一個資料型態為float的全域變數temperature
float lux;  //宣告一個資料型態為float的全域變數lux
String message1 = "", message2 = "";
 
void setup()
{
  display.init(); //螢幕初始化
  display.setFont(ArialMT_Plain_16);    //使用16字體
  display.flipScreenVertically();  //螢幕垂直翻轉
  dht.setup(D3, DHTesp::DHT22);   // 設定DHT的接腳位置及DHT的型號DHT11或DHT22
  Wire.begin(D2, D1); //Wire.begin(SDA,SCL)  //宣告光照度感測器I2C SDA及SCL接腳
  lightMeter.begin();  //啟用光照度感測器
  pinMode(D0, OUTPUT); //設定D0的接腳狀態為OUTPUT
  pinMode(D4, OUTPUT); //設定D4的接腳狀態為OUTPUT
  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);   // 連接到Blynk伺服器
  timer.setInterval(2000L, sendSensor);   // 每2秒呼叫sendSensor()傳送資料至Blynk伺服器
}
 
void loop()
{
  Blynk.run();   //執行Blynk
  timer.run();  //執行BlynkTimer計時器
}
 
BLYNK_CONNECTED()   // 當設備成功連接至 Blynk 伺服器後執行
{
  Blynk.syncVirtual(V1, V2);  // 同步虛擬腳位 V1, V2 風扇及電燈的狀態,會觸發執行 BLYNK_WRITE(V1)、BLYNK_WRITE(V2)
}
 
void sendSensor()  // 傳送感測數值至 Blynk
{
  humidity = dht.getHumidity(); //讀取濕度值儲存於humidity變數內
  temperature = dht.getTemperature(); //讀取溫度值儲存於temperature變數內
  lux = lightMeter.readLightLevel();  //宣告lux變數,並將讀取到的光照度儲存於lux變數
 
  Blynk.virtualWrite(V5, humidity);  // 濕度資料傳送到虛擬腳位 V5
  Blynk.virtualWrite(V6, temperature);  // 溫度資料傳送到虛擬腳位 V6
  Blynk.virtualWrite(V7, lux);  // 光照度資料傳送到虛擬腳位 V7
 
  Display_Message();
}
 
BLYNK_WRITE(V1) // 當 Blynk 風扇虛擬腳位 V1 有改變時便觸發
{
  int pinValue =  param.asInt();   // 以整數型態讀取 pin V1 value
 
  if (pinValue == 1)   // pin V1 value 1(ON)、0(OFF)
  {
    digitalWrite(D0, LOW);   // Fan ON:0(LOW)
    message1 =  "Fan ON";
  }
  else
  {
    digitalWrite(D0, HIGH);   //  Fan OFF:1(HIGH)
    message1 = "Fan OFF";
  }
  Display_Message();
}
 
BLYNK_WRITE(V2) // 當 Blynk 電燈虛擬腳位 V2 有改變時便觸發
{
  int pinValue =  param.asInt();   // 以整數型態讀取 pin V2 value
 
  if (pinValue == 1)   // pin V2 value 1(ON)、0(OFF)
  {
    digitalWrite(D4, LOW);   // Light ON:0(LOW)
    message2 = "Light ON";
  }
  else
  {
    digitalWrite(D4, HIGH);   //  Light OFF:1(HIGH)
    message2 =  "Light OFF";
  }
  Display_Message();
}
 
void Display_Message()
{
  char value_str[20];
  display.clear();  //清除螢幕
  dtostrf(temperature, 4, 1, value_str);
  display.drawString(0, 0, "T:" + String(value_str) + "°C"); //x=0,y=0位置顯示溫度的值
  dtostrf(humidity, 4, 1, value_str);
  display.drawString(68, 0, "H:" + String(value_str) + "%"); //x=0,y=68位置顯示濕度的值
  display.drawString(0, 16, "Light : " + String(lux) + " LUX"); //x=0,y=16位置顯示光照度數據
  display.drawString(0, 32, message1); //x=0,y=32位置顯示 Fan 的狀態
  display.drawString(0, 48, message2); //x=0,y=48位置顯示 Light 的狀態
  display.display();  //OLED螢幕顯示畫面
}

 

消息公佈欄

時間類別單位標題發佈點閱
跳至網頁頂部