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)