### Projekt 8: LCD1602-Display **Description** Wie wir alle wissen, ist ein Bildschirm eine der besten Möglichkeiten für Menschen, mit elektronischen Geräten zu interagieren. **Component Knowledge** 1602 ist ein Modul, das 16 Zeichen pro Zeile darstellen kann. Es verfügt über zwei Zeilen und verwendet das IIC-Kommunikationsprotokoll. ![Bild34](../media/066e093f1711ada67d3309ddc9bdc66e.png) **Control Pins** | SDA | SDA | | --- | --- | | SCL | SCL | #### Projekt 8.1: Anzeige von Zeichen auf dem LCD1602 **Description** Wir verwenden die Bibliotheksdateien i2c_lcd.py und lcd_api.py, die im ESP32-Speicher gespeichert werden sollten. ![Bild35](../media/b5d74645d450d329aded48064bd599c8.png) **Vorgehensweise** Öffnen Sie „Thonny“, klicken Sie auf „Dieser Computer“ → „D:“ → „2. Python Projects“ → „pj8_1_lcd1602“. Wählen Sie „i2c_lcd.py“ aus, klicken Sie mit der rechten Maustaste und wählen Sie „\ **Hochladen nach /**\ “, warten Sie, bis „i2c_lcd.py“ auf ESP32 hochgeladen wurde; dann wählen Sie „lcd_api.py“ aus, klicken Sie mit der rechten Maustaste und wählen Sie „\ **Hochladen nach /**\ “, warten Sie, bis „lcd_api.py“ auf ESP32 hochgeladen wurde. ![Bild](../media/img-20250603131246.png) ![Bild36](../media/img-20250603131916.png) Die gespeicherten Namen sind i2c_lcd.py und lcd_api.py ![Bild37](../media/img-20250603132138.png) **Test Code** ```python from time import sleep_ms, ticks_ms from machine import I2C, Pin from i2c_lcd import I2cLcd DEFAULT_I2C_ADDR = 0x27 i2c = I2C(scl=Pin(22), sda=Pin(21), freq=400000) lcd = I2cLcd(i2c, DEFAULT_I2C_ADDR, 2, 16) lcd.move_to(1, 0) lcd.putstr('Hello') lcd.move_to(1, 1) lcd.putstr('keyestudio') # The following line of code should be tested # using the REPL: # 1. To print a string to the LCD: # lcd.putstr('Hello world') # 2. To clear the display: #lcd.clear() # 3. To control the cursor position: # lcd.move_to(2, 1) # 4. To show the cursor: # lcd.show_cursor() # 5. To hide the cursor: #lcd.hide_cursor() # 6. To set the cursor to blink: #lcd.blink_cursor_on() # 7. To stop the cursor on blinking: #lcd.blink_cursor_off() # 8. To hide the currently displayed character: #lcd.display_off() # 9. To show the currently hidden character: #lcd.display_on() # 10. To turn off the backlight: #lcd.backlight_off() # 11. To turn ON the backlight: #lcd.backlight_on() # 12. To print a single character: #lcd.putchar('x') # 13. To print a custom character: #happy_face = bytearray([0x00, 0x0A, 0x00, 0x04, 0x00, 0x11, 0x0E, 0x00]) #lcd.custom_char(0, happy_face) #lcd.putchar(chr(0)) ``` **Test Result** Die erste Zeile des LCD1602 zeigt 'Hello' und die zweite Zeile zeigt 'keyestudio'. #### Projekt 8.2 Alarm bei gefährlichen Gasen **Description** Wenn ein Gassensor eine hohe Konzentration gefährlicher Gase erkennt, ertönt der Summer als Alarm und die Anzeige zeigt dangerous an. **Component Knowledge** **MQ2 Smoke Sensor**: Es ist ein Gerät zur Überwachung von Gaslecks für Haushalte und Fabriken, geeignet zur Erkennung von Flüssiggas, Benzin, Alkyl, Alkohol, Wasserstoff sowie Rauch. Unser Sensor hat einen digitalen Anschluss D und einen analogen Ausgang A; in diesem Projekt wird er als digitaler Sensor an D angeschlossen. ![Bild38](../media/4550c4935e6c08e595a1e8707b54b551.png) **Control Pin** | Gassensor | 23 | | --- | --- | | \ | | **Test Code** ```python from time import sleep_ms, ticks_ms from machine import SoftI2C, Pin from i2c_lcd import I2cLcd DEFAULT_I2C_ADDR = 0x27 scl_pin = Pin(22, Pin.OUT, pull=Pin.PULL_UP) # GPIO22 with internal pull-up enabled sda_pin = Pin(21, Pin.OUT, pull=Pin.PULL_UP) # GPIO21 with internal pull-up enabled i2c = SoftI2C(scl=Pin(22), sda=Pin(21), freq=100000) lcd = I2cLcd(i2c, DEFAULT_I2C_ADDR, 2, 16) from machine import Pin import time gas = Pin(23, Pin.IN, Pin.PULL_UP) while True: gasVal = gas.value() # Reads the value of button 1 print("gas =",gasVal) #Print it out in the shell lcd.move_to(1, 1) lcd.putstr('val: {}'.format(gasVal)) if(gasVal == 1): #lcd.clear() lcd.move_to(1, 0) lcd.putstr('Safety ') else: lcd.move_to(1, 0) lcd.putstr('dangerous') time.sleep(0.1) #delay 0.1s ``` **Test Result** Im Normalzustand zeigt der Bildschirm 'safety' an. Wenn der Gassensor jedoch gefährliche Gase wie Kohlenmonoxid in einer bestimmten Konzentration erkennt, ertönt der Summer als Alarm und der Bildschirm zeigt 'dangerous' an.