Rangkaian
Sebelum memprogram sesuai perancangan, dilakukan cek pada koneksi LCD I2C untuk mengetahui alamat yang akan digunakan atau yang terhubung. Install terlebih dahulu library "LiquidCrystal I2C" oleh Frank de Brabander.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | /********* Rui Santos Complete project details at https://randomnerdtutorials.com *********/ #include <Wire.h> void setup() { Wire.begin(); Serial.begin(115200); Serial.println("\nI2C Scanner"); } void loop() { byte error, address; int nDevices; Serial.println("Scanning..."); nDevices = 0; for(address = 1; address < 127; address++ ) { Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) { Serial.print("I2C device found at address 0x"); if (address<16) { Serial.print("0"); } Serial.println(address,HEX); nDevices++; } else if (error==4) { Serial.print("Unknow error at address 0x"); if (address<16) { Serial.print("0"); } Serial.println(address,HEX); } } if (nDevices == 0) { Serial.println("No I2C devices found\n"); } else { Serial.println("done\n"); } delay(5000); } |
Perhatikan feedback dari serial monitor, apabila menggunakan LCD 16x2 maka kemungkinan akan keluar hasil 0x27, seperti pada gambar berikut.
Berdasarkan alamat I2C yang sudah didapatkan, maka dapat kita lanjutkan ke pemrograman utama dari rangkaian yang dibuat.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | /////LCD I2C/////// #include <Wire.h> #include <LiquidCrystal_I2C.h> ////DHT//////////// #include <DHT.h> #include <DHT_U.h> LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address #define DHTPIN D7 #define DHTTYPE DHT22 DHT_Unified dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); dht.begin(); sensor_t sensor; dht.temperature().getSensor(&sensor); dht.humidity().getSensor(&sensor); delay(2200); lcd.begin(16,2); // initialize the lcd for 16 chars 2 lines, turn on backlight lcd.backlight(); delay(250); lcd.noBacklight(); delay(250); lcd.backlight(); } void loop() { sensors_event_t event; dht.temperature().getEvent(&event); if (isnan(event.temperature)) { lcd.setCursor(0,0); lcd.print("Err read Temp!"); delay(1000); } else { lcd.setCursor(0,0); lcd.print("Temp:"+String(event.temperature)+char(223)+"C"); delay(1000); } // Get humidity event and print its value. dht.humidity().getEvent(&event); if (isnan(event.relative_humidity)) { lcd.print("Err read Humd!"); } else { lcd.setCursor(0,1); lcd.print("Humd:"+String(event.relative_humidity)+"%"); delay(1000); } } |
Kode program di atas menemui beberapa kendala saat dibuat, kendala tersebut diantaranya adalah penulisan integer yang ingin ditampilkan dengan cara digabung dengan string, kemudian penulisan "°C" yang tidak bisa dituliskan langsung dalam string untuk ditampilkan. Kendala pertama dapat diatasi dengan digunakan fungsi String() untuk variabel integer yang ingin dikonversi. Kendala berikutnya dapat diatasi dengan merujuk ke HD44780 set karakter kode dengan kode dari derajat yaitu 223.
Usefull source
1. ESP32 I2C LCD
3. Concatenate String and Integer(converted)
4. Print Celcius Degree
Tidak ada komentar:
Posting Komentar