OLED+DHT11溫濕度+LINE-ESP32


OLED+DHT11溫濕度+LINE-ESP32

tags: esp32 line dht11/dht12

前言

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

接線

程式碼

關於DHT11可以參考這篇

先測試傳感器使其能顯示於OLED上

#include <Wire.h>

#include <Adafruit_GFX.h>

#include <Adafruit_GrayOLED.h>

#include <Adafruit_SSD1306.h>

#include <Adafruit_Sensor.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 "q6LtMY1QO2BC5VxVGK7oveZf5----------------"

  
#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);

}


文章作者: blairan
版權聲明: 本博客所有文章除特別聲明外,均採用 CC BY 4.0 許可協議。轉載請註明來源 blairan !
评论
  目錄