# IoT 第三次聚會 課程講義
## 大綱
* 運用溫度顯示器與LCD顯示器,做出一個能顯示出溫濕度的小儀器。
## 接線表
### DHT11
|Src|Dst|備註|
|:-:|:-:|:-:|
|VCC|5V||
|GND|GND||
|DATA|隨你高興|但要接在Digital的腳位上|
### Nokia 5110 LCD
|Src|Dst|備註|
|:-:|:-:|:-:|
|RST Pin|pin 6(Uno Rev3)|串聯10k電阻|
|SCE Pin|pin 7(Uno Rev3)|串聯1k電阻|
|D/C Pin|pin 5(Uno Rev3)|串聯10k電阻|
|DIN Pin|pin 4(Uno Rev3)|串聯10k電阻|
|CLK Pin|pin 3(Uno Rev3)|串聯10k電阻|
|VCC Pin|3.3V|串聯10k電阻|
|LED Pin|可變電阻中間pin腳|可變電阻其餘兩個pin接至3.3V及GND|
|GND Pin|GND||
### LCD 1602A
|Src|Dst|備註|
|:-:|:-:|:-:|
|1 VSS Pin|GND|電源負極|
|2 VCC Pin|5V|電源正極|
|3 Vo Pin|可變電阻中腳|調整對比|
|4 RS Pin|腳位 2|D0~D7放入資料暫存器 (1) 或指令資料暫存器 (0)|
|5 RW Pin|GND (寫入)|讀取 (1) 或寫入 (0) LCD|
|6 E Pin|腳位 3|可寫入 (1) 或不可寫入 (0) LCD|
|7 D0 Pin|不接|資料位元 0|
|8 D1 Pin|不接|資料位元 1|
|9 D2 Pin|不接|資料位元 2|
|10 D3 Pin|不接|資料位元 3|
|11 D4 Pin|腳位 4|資料位元 4|
|12 D5 Pin|腳位 5|資料位元 5|
|13 D6 Pin|腳位 6|資料位元 6|
|14 D7 Pin|腳位 7|資料位元 7|
|15 A(+) Pin|5V|背光電源正極|
|16 K(-) Pin|GND|背光電源負極|
### LCD 1602A接腳圖

## 相關程式碼
#### DHT11
```cpp
// some example code here.
#include "DHT.h"
#define dhtPin 10
#define dhtType DHT11
DHT dht(dhtPin, dhtType);
void setup() {
Serial.begin(9600);
dht.begin();
}
void loop() {
float h = dht.readHumidity(); // 讀取濕度
float t = dht.readTemperature(); // 讀取攝氏溫度
float f = dht.readTemperature(true); // 讀取華氏
if (isnan(h) || isnan(t) || isnan(f)) { // 檢查資料是否為數值
Serial.println("無法從DHT傳感器讀取!");
return;
}
Serial.print("濕度:");
Serial.print(h);
Serial.print(" ");
Serial.print("攝氏溫度:");
Serial.print(t);
Serial.print("*C ");
Serial.print("華氏溫度:");
Serial.print(f);
Serial.print("*F\n");
delay(3000);//延時1秒
}
```
#### Nokia 5110
```cpp
#include <PCD8544.h>
PCD8544 lcd;
void setup() {
lcd.begin(84, 48);
}
void loop() {
int a = 822;
lcd.setCursor(0, 0);
lcd.print("Hello");
lcd.setCursor(0, 1);
lcd.print("Lab ");
lcd.print(a);
delay(2000);
lcd.clear();
delay(1000);
}
```
#### LCD1602A
```cpp
#include <LiquidCrystal.h>
#define RS 2
#define E 3
#define D4 4
#define D5 5
#define D6 6
#define D7 7
LiquidCrystal lcd(RS, E, D4, D5, D6, D7); // 建構 lcd 物件
void setup() {
lcd.begin(16,2); // 定義LCD為 2列 16行
lcd.clear(); // 清除螢幕
}
void loop() {
lcd.setCursor(0,0); //設定游標在螢幕的第0行 第0列
lcd.print("time:");
lcd.print(millis() / 1000); // 印出執行秒數
lcd.setCursor(0,1); // 設定游標在 第1列 第0行
lcd.print("lab 822");
}
```
[Library 連結](https://drive.google.com/open?id=1V1uT87rLM5SEMQlaxA-UxGRm6k7M2BTA)
## 延伸閱讀
[DHT11 Humidity and Temperature Sensor Datasheet](https://www.mouser.com/ds/2/758/DHT11-Technical-Data-Sheet-Translated-Version-1143054.pdf)
[Interfacing-nokia-5110-lcd-with-arduino](https://create.arduino.cc/projecthub/muhammad-aqib/interfacing-nokia-5110-lcd-with-arduino-7bfcdd)
[Arduino 液晶顯示器](http://yhhuang1966.blogspot.com/2015/03/arduino_25.html)