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帳號密碼
右上角點選"個人頁面"
點選"發行權杖"
再回到程式碼並加入相關函式
加入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);
}
留言
張貼留言