2022.03.01
2022.02.22
- 修改一點程式碼,讓時間的顯示更整齊:
...... ...... 前略 //底下讓時:分:秒的格式更整齊 if (timeClient.getHours() < 10 ){ //當小時的數值為個位數時,前面補 0 lcd.print("0"); lcd.print(timeClient.getHours()); } else { lcd.print(timeClient.getHours()); } lcd.print(":"); if (timeClient.getMinutes() < 10 ){//當分的數值為個位數時,前面補 0 lcd.print("0"); lcd.print(timeClient.getMinutes()); } else { lcd.print(timeClient.getMinutes()); } //lcd.print(timeClient.getMinutes()); lcd.print(":"); if (timeClient.getSeconds() < 10 ){//當秒的數值為個位數時,前面補 0 lcd.print("0"); lcd.print(timeClient.getSeconds()); } else { lcd.print(timeClient.getSeconds()); } //lcd.print(timeClient.getSeconds()); lcd.print(" ");//因為更整齊了,只需要加上三個空白。 lcd.setCursor(0,1);//溫度及溼度顯示在第二列 lcd.print("T:");lcd.print((int)temperature);lcd.print("*C ");lcd.print("H:");lcd.print((int)humidity);lcd.print("% "); delay(950);//原先為delay(1000),顯示秒數時會有跳過的情形,經過幾次的調整,950 算是比較正常
2022.02.22
2022.02.21
- 說到做到,ESP8266+DHT-11+LCD1602 I2C Module,用了七條 F-F 杜邦線,吃完晚餐花了一個多小時搞定:
- 程式更完善些,加入了啟動時顯示 WI-FI 連接中:
- 程式碼:
#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display #include <NTPClient.h> #include <ESP8266WiFi.h> #include <WiFiUdp.h> #include <SimpleDHT.h> int pinDHT11 = D3; SimpleDHT11 dht11; const char *ssid = "XXX";//此處改為家裡基地台的 SSID const char *password = "XXXXXXXXX";//輸入登入基地台的密碼 const long utcOffsetInSeconds = 28800;//台灣在 UTC+08:00 時區,所以 8*60*60 = 28800 char daysOfTheWeek[7][12] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; // Define NTP Client to get time WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP, "pool.ntp.org", utcOffsetInSeconds); void setup() { lcd.init(); // 初始化 lcd lcd.backlight(); WiFi.begin(ssid, password); lcd.setCursor(0,0); lcd.print("Wi-Fi Connecting"); lcd.setCursor(0,1); while ( WiFi.status() != WL_CONNECTED ) { delay ( 500 ); //lcd.setCursor(0,1); 如果擺在 While 迴圈裡,"."會一直顯示在同一位置 lcd.print ( "." ); } timeClient.begin(); } void loop() { byte temperature = 0; byte humidity = 0; byte data[40] = {0}; if (dht11.read(pinDHT11, &temperature, &humidity, data)) { lcd.print("Read DHT11 failed"); return; } timeClient.update(); lcd.setCursor(0,0); lcd.print(daysOfTheWeek[timeClient.getDay()]); lcd.print(", "); lcd.print(timeClient.getHours()); lcd.print(":"); lcd.print(timeClient.getMinutes()); lcd.print(":"); lcd.print(timeClient.getSeconds()); lcd.print(" ");//這四個空白若不加,會顯示前面的"Wi-Fi Connecting"後面"ting"四個字母 lcd.setCursor(0,1);//溫度及溼度顯示在第二列 lcd.print("T:");lcd.print((int)temperature);lcd.print("*C ");lcd.print("H:");lcd.print((int)humidity);lcd.print("% "); delay(1000); }
- 這篇文章:Arduino初體驗 - NodeMCU ESP8266 接LCD 說明了接腳如何連接;拷貝了這篇文章:Getting Date & Time From NTP Server With ESP8266 NodeMCU 的程式碼來顯示時間(把 Serial.print() 改成 lcd.print() 就可以了)。
- 準備裝入 Apple Pencil 的空盒裡......
2022.02.21
- 天氣冷又溼,繼續驗貨:LCD1602 I2C Module,Kit 附的範例只顯示 Hello World 太無趣,再加上 DHT-11 來顯示溫度與溼度:
- 程式很簡單,只是再加上 DHT-11 的範例程式碼而已:
#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display #include <SimpleDHT.h> int pinDHT11 = 2; SimpleDHT11 dht11; void setup() { lcd.init(); // initialize the lcd lcd.backlight(); } void loop() { byte temperature = 0; byte humidity = 0; byte data[40] = {0}; if (dht11.read(pinDHT11, &temperature, &humidity, data)) { lcd.print("Read DHT11 failed"); return; } lcd.setCursor(0,0);//地點顯示在第一列 lcd.print("Taichung : ");//地點 lcd.setCursor(0,1);//溫度及溼度顯示在第二列 lcd.print("T:");lcd.print((int)temperature);lcd.print("*C ");lcd.print("H:");lcd.print((int)humidity);lcd.print("%"); delay(1000);// DHT11 sampling rate is 1HZ. }
- 這只 LCD 應該只能輸入 ASCII 字元而已,因為要顯示度C的 ˚ 會變成亂碼。
- 截錄維基百科的說明:「I²C(Inter-Integrated Circuit)字面上的意思是積體電路之間,它其實是I²C Bus簡稱,所以中文應該叫積體匯流排電路,它是一種串列通訊匯流排,使用多主從架構,由飛利浦公司在1980年代為了讓主機板、嵌入式系統或手機用以連接低速週邊裝置而發展。I²C的正確讀法為「I平方C」("I-squared-C")。」I²C的一個優勢在於其接腳數少。通過兩個接腳以及相應的軟體,微控制器就可以控制某一個網路內的裝置,而使用其他技術則需要更多的接腳。
- 可以來試試配合 ESP 8266 ,利用 NTP 校時,把現在時刻顯示在第一列,溫度、 溼度顯示在第二列。由於前面已做過利用 ESP 8266 Wi-Fi 達成 NTP 校時的時鐘程式,要再來改應該不難---值得試一試。
- 天氣冷又溼,教學影片看累了,就繼續購買的Super Starter Kit for Arduino Uno 套裝各項配件驗貨。這次檢查 Active buzzer,附的範例實在太無趣,找到之前下載的 ElegooTutorial,內有 MorseCode Translater 範例,比較有趣:
- 但都需要從 Serial Monitor 輸入字串,所以想到 Keypad Membrane Switch Module 也順便一起驗貨,確認也沒問題,下次再來修改程式以它輸入,然後產生 MorseCode 。
2022.02.20
- 先從頭到尾將整個系列影片看過一遍,把需要再購買的配件整理後,等蝦皮免運日時,找個賣場一次買足。
沒有留言:
張貼留言
您可以留下意見,但 Luke 可能無法馬上回覆,尚請見諒。