# 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接腳圖 ![](https://i.imgur.com/Lycur1k.png) ## 相關程式碼 #### 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)