OLED+DHT11溫濕度+LINE

OLED+DHT11溫濕度+LINE

前言

這次要來實驗菜市場傳感器😂-DHT11在OLED上顯示並且在LINE上通知
溫濕度。

接線


程式碼

關於DHT11可以參考這篇
先測試傳感器使其能顯示於OLED上
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_GrayOLED.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>

#define DHTPIN 4     // Digital pin connected to the DHT sensor

#define DHTTYPE DHT11     // DHT 11

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(115200);
  // Initialize device.
  dht.begin();
  Serial.print("success connected!");
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }
  delay(2000);
  display.clearDisplay();
  display.setTextColor(WHITE);

}

void loop() {
  // Delay between measurements.
  delay(2000);
  float t=dht.readTemperature();
  float h=dht.readHumidity();
  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
  }
  // clear display
  display.clearDisplay();
 
  // display temperature
  display.setTextSize(1);
  display.setCursor(0,10);
  display.print("Temperature: ");
  display.setTextSize(2);
  display.setCursor(0,20);
  display.print(t);
  display.print(" ");
  display.setTextSize(1);
  display.cp437(true);
  display.write(167);
  display.setTextSize(2);
  display.print("C");
 
  // display humidity
  display.setTextSize(1);
  display.setCursor(0, 35);
  display.print("Humidity: ");
  display.setTextSize(2);
  display.setCursor(0, 45);
  display.print(h);
  display.print(" %");
  display.display();
 
}

LINE的設定

申請 LINE Notify 權杖

打開 LINE Notify 的網站 ( https://notify-bot.line.me/zh_TW/ ),用自己的 LINE 帳號登入


按右上角"登入"

輸入自己的LINE帳號密碼

右上角點選"個人頁面"

點選"發行權杖"

當出現這畫面時,就是開始申請權杖(Token),所以請先輸入名稱,及選擇透過1對1聊天接收Line Notify的通知,都選擇好後點擊發行

將權杖複製並存到記事本,這裡權限只會顯示一次,要特別留意

再回到程式碼並加入相關函式

加入LINE程式碼

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_GrayOLED.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_Sensor.h>
#include <TridentTD_LineNotify.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <DHT.h>

#define LINE_TOKEN "q6LtMY1QO2BC5VxVGK7oveZf5qZ1j08hyVRyEnUS8Vg"

#define DHTPIN 4     // Digital pin connected to the DHT sensor

#define DHTTYPE DHT11     // DHT 11

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

DHT dht(DHTPIN, DHTTYPE);

// 設定無線基地台SSID跟密碼
const char* ssid     = "CTK";
const char* password = "ctk674011";

void setup() {
  Serial.begin(115200);
  // Initialize device.
  dht.begin();
  WiFi.begin(ssid, password);
  while (WiFi.isConnected()==false)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.print("success connected!");
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }
  delay(2000);
  display.clearDisplay();
  display.setTextColor(WHITE);

  // 顯示 Line版本
  Serial.println(LINE.getVersion());
}

void loop() {
  // Delay between measurements.
  delay(2000);
  float t=dht.readTemperature();
  float h=dht.readHumidity();
  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
  }
  // clear display
  display.clearDisplay();
 
  // display temperature
  display.setTextSize(1);
  display.setCursor(0,10);
  display.print("Temperature: ");
  display.setTextSize(2);
  display.setCursor(0,20);
  display.print(t);
  display.print(" ");
  display.setTextSize(1);
  display.cp437(true);
  display.write(167);
  display.setTextSize(2);
  display.print("C");
 
  // display humidity
  display.setTextSize(1);
  display.setCursor(0, 35);
  display.print("Humidity: ");
  display.setTextSize(2);
  display.setCursor(0, 45);
  display.print(h);
  display.print(" %");
  display.display();
  String tempe="溫度:"+String(t)+"℃";  
  String humid="濕度:"+String(h)+"%";


  LINE.setToken(LINE_TOKEN);
  // 先換行再顯示
  LINE.notify("\n" + tempe + " ;" + humid);  
  // 每2分鐘發送一次(delay120000)
  delay(100000);
}





留言

這個網誌中的熱門文章