module:micropython:esp32lcdisplayi2c:esp32lcdisplayi2c
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
module:micropython:esp32lcdisplayi2c:esp32lcdisplayi2c [2021/12/16 15:05] – [Links] omdevelop | module:micropython:esp32lcdisplayi2c:esp32lcdisplayi2c [2022/09/13 11:58] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 9: | Line 9: | ||
===== Übersicht ===== | ===== Übersicht ===== | ||
+ | * Esp32-Ansteuerung eines LCDisplays mit I2C-Interface(PCF8574) | ||
+ | * das LCDisplay besitzt 4 Zeilen und 20 Spalten | ||
==== Links ==== | ==== Links ==== | ||
* [[https:// | * [[https:// | ||
- | ==== ==== | + | ==== Quell-Code==== |
- | + | **Main-Program: | |
- | **Module** | + | |
<code python> | <code python> | ||
# | # | ||
Line 65: | Line 66: | ||
</ | </ | ||
- | **Module** | + | **Library-Module: LCDisplayI2C.py (derived from Basic-Class)** |
+ | <code python> | ||
+ | # | ||
+ | """ | ||
+ | # | ||
+ | from LCDisplay import CLCDisplay | ||
+ | from time import sleep_ms | ||
+ | # | ||
+ | # The PCF8574 has a jumper selectable address: 0x20 - 0x27 | ||
+ | DEFAULT_I2C_ADDR = 0x27 | ||
+ | # | ||
+ | MASK_RS = 0x01 | ||
+ | MASK_RW = 0x02 | ||
+ | MASK_E = 0x04 | ||
+ | SHIFT_BACKLIGHT = 3 | ||
+ | SHIFT_DATA = 4 | ||
+ | # | ||
+ | class CLCDisplayI2C(CLCDisplay): | ||
+ | # | ||
+ | def __init__(self, | ||
+ | self.I2C = i2c | ||
+ | self.I2CAddress = i2caddress | ||
+ | self.I2C.writeto(self.I2CAddress, | ||
+ | sleep_ms(20) | ||
+ | # Send reset 3 times | ||
+ | self.hal_write_init_nibble(self.LCD_FUNCTION_RESET) | ||
+ | sleep_ms(5) | ||
+ | self.hal_write_init_nibble(self.LCD_FUNCTION_RESET) | ||
+ | sleep_ms(1) | ||
+ | self.hal_write_init_nibble(self.LCD_FUNCTION_RESET) | ||
+ | sleep_ms(1) | ||
+ | # Put LCD into 4 bit mode | ||
+ | self.hal_write_init_nibble(self.LCD_FUNCTION) | ||
+ | sleep_ms(1) | ||
+ | CLCDisplay.__init__(self, | ||
+ | cmd = self.LCD_FUNCTION | ||
+ | if countrows > 1: | ||
+ | cmd |= self.LCD_FUNCTION_2LINES | ||
+ | self.hal_write_command(cmd) | ||
+ | # | ||
+ | def hal_write_init_nibble(self, | ||
+ | byte = ((nibble >> 4) & 0x0f) << SHIFT_DATA | ||
+ | self.I2C.writeto(self.I2CAddress, | ||
+ | self.I2C.writeto(self.I2CAddress, | ||
+ | # | ||
+ | def hal_backlight_on(self): | ||
+ | self.I2C.writeto(self.I2CAddress, | ||
+ | # | ||
+ | def hal_backlight_off(self): | ||
+ | self.I2C.writeto(self.I2CAddress, | ||
+ | # | ||
+ | def hal_write_command(self, | ||
+ | """ | ||
+ | byte = ((self.Backlight << SHIFT_BACKLIGHT) | (((cmd >> 4) & 0x0f) << SHIFT_DATA)) | ||
+ | self.I2C.writeto(self.I2CAddress, | ||
+ | self.I2C.writeto(self.I2CAddress, | ||
+ | byte = ((self.Backlight << SHIFT_BACKLIGHT) | ((cmd & 0x0f) << SHIFT_DATA)) | ||
+ | self.I2C.writeto(self.I2CAddress, | ||
+ | self.I2C.writeto(self.I2CAddress, | ||
+ | if cmd <= 3: # The home and clear commands require a worst case delay of 4.1 msec | ||
+ | sleep_ms(5) | ||
+ | # | ||
+ | def hal_write_data(self, | ||
+ | byte = (MASK_RS | (self.Backlight << SHIFT_BACKLIGHT) | (((data >> 4) & 0x0f) << SHIFT_DATA)) | ||
+ | self.I2C.writeto(self.I2CAddress, | ||
+ | self.I2C.writeto(self.I2CAddress, | ||
+ | byte = (MASK_RS | (self.Backlight << SHIFT_BACKLIGHT) | ((data & 0x0f) << SHIFT_DATA)) | ||
+ | self.I2C.writeto(self.I2CAddress, | ||
+ | self.I2C.writeto(self.I2CAddress, | ||
+ | # | ||
+ | # | ||
+ | </ | ||
+ | |||
+ | **Library-Module: | ||
<code python> | <code python> | ||
""" | """ | ||
Line 213: | Line 287: | ||
# | # | ||
# | # | ||
- | </ | ||
- | |||
- | **Module** | ||
- | <code python> | ||
- | # | ||
- | """ | ||
- | # | ||
- | from LCDisplay import CLCDisplay | ||
- | from time import sleep_ms | ||
- | # | ||
- | # The PCF8574 has a jumper selectable address: 0x20 - 0x27 | ||
- | DEFAULT_I2C_ADDR = 0x27 | ||
- | # | ||
- | MASK_RS = 0x01 | ||
- | MASK_RW = 0x02 | ||
- | MASK_E = 0x04 | ||
- | SHIFT_BACKLIGHT = 3 | ||
- | SHIFT_DATA = 4 | ||
- | # | ||
- | class CLCDisplayI2C(CLCDisplay): | ||
- | # | ||
- | def __init__(self, | ||
- | self.I2C = i2c | ||
- | self.I2CAddress = i2caddress | ||
- | self.I2C.writeto(self.I2CAddress, | ||
- | sleep_ms(20) | ||
- | # Send reset 3 times | ||
- | self.hal_write_init_nibble(self.LCD_FUNCTION_RESET) | ||
- | sleep_ms(5) | ||
- | self.hal_write_init_nibble(self.LCD_FUNCTION_RESET) | ||
- | sleep_ms(1) | ||
- | self.hal_write_init_nibble(self.LCD_FUNCTION_RESET) | ||
- | sleep_ms(1) | ||
- | # Put LCD into 4 bit mode | ||
- | self.hal_write_init_nibble(self.LCD_FUNCTION) | ||
- | sleep_ms(1) | ||
- | CLCDisplay.__init__(self, | ||
- | cmd = self.LCD_FUNCTION | ||
- | if countrows > 1: | ||
- | cmd |= self.LCD_FUNCTION_2LINES | ||
- | self.hal_write_command(cmd) | ||
- | # | ||
- | def hal_write_init_nibble(self, | ||
- | byte = ((nibble >> 4) & 0x0f) << SHIFT_DATA | ||
- | self.I2C.writeto(self.I2CAddress, | ||
- | self.I2C.writeto(self.I2CAddress, | ||
- | # | ||
- | def hal_backlight_on(self): | ||
- | self.I2C.writeto(self.I2CAddress, | ||
- | # | ||
- | def hal_backlight_off(self): | ||
- | self.I2C.writeto(self.I2CAddress, | ||
- | # | ||
- | def hal_write_command(self, | ||
- | """ | ||
- | byte = ((self.Backlight << SHIFT_BACKLIGHT) | (((cmd >> 4) & 0x0f) << SHIFT_DATA)) | ||
- | self.I2C.writeto(self.I2CAddress, | ||
- | self.I2C.writeto(self.I2CAddress, | ||
- | byte = ((self.Backlight << SHIFT_BACKLIGHT) | ((cmd & 0x0f) << SHIFT_DATA)) | ||
- | self.I2C.writeto(self.I2CAddress, | ||
- | self.I2C.writeto(self.I2CAddress, | ||
- | if cmd <= 3: # The home and clear commands require a worst case delay of 4.1 msec | ||
- | sleep_ms(5) | ||
- | # | ||
- | def hal_write_data(self, | ||
- | byte = (MASK_RS | (self.Backlight << SHIFT_BACKLIGHT) | (((data >> 4) & 0x0f) << SHIFT_DATA)) | ||
- | self.I2C.writeto(self.I2CAddress, | ||
- | self.I2C.writeto(self.I2CAddress, | ||
- | byte = (MASK_RS | (self.Backlight << SHIFT_BACKLIGHT) | ((data & 0x0f) << SHIFT_DATA)) | ||
- | self.I2C.writeto(self.I2CAddress, | ||
- | self.I2C.writeto(self.I2CAddress, | ||
- | # | ||
- | # | ||
</ | </ | ||
module/micropython/esp32lcdisplayi2c/esp32lcdisplayi2c.1639663546.txt.gz · Last modified: 2021/12/16 16:05 (external edit)