0.49inch-OLED-Module.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. from machine import Pin,I2C
  2. import framebuf
  3. import time
  4. class OLED_0inch49(framebuf.FrameBuffer):
  5. def __init__(self,i2c_num=1,i2c_scl=7,i2c_sda=6,i2c_freq=1000000):
  6. self.width = 64
  7. self.height = 32
  8. self.rotate = 180 #only 0 and 180
  9. self.olde_addr = 0x3c
  10. self.i2c = I2C(id=i2c_num, scl=Pin(i2c_scl), sda=Pin(i2c_sda), freq=i2c_freq)
  11. self.temp = bytearray(2)
  12. self.buffer = bytearray(self.width * self.height//2)
  13. super().__init__(self.buffer, self.width, self.height, framebuf.MONO_VLSB)
  14. self.init_display()
  15. self.white = 0xffff
  16. self.black = 0x0000
  17. def write_cmd(self, cmd):
  18. self.temp[0] = 0x00
  19. self.temp[1] = cmd
  20. self.i2c.writeto(self.olde_addr, self.temp)
  21. def write_data(self, buf):
  22. self.temp[0] = 0x40
  23. self.temp[1] = buf
  24. # self.i2c.writeto(self.olde_addr, b'\x40'+buf)
  25. self.i2c.writeto(self.olde_addr, self.temp)
  26. def init_display(self):
  27. """Initialize dispaly"""
  28. self.write_cmd(0xAE); # display off
  29. self.write_cmd(0x00); # set lower column address
  30. self.write_cmd(0x12); # set higher column address
  31. self.write_cmd(0x00); # set display start line
  32. self.write_cmd(0xB0); # set page address
  33. self.write_cmd(0x81); # contract control
  34. self.write_cmd(0x4f); # 128
  35. self.write_cmd(0xA1); # set segment remap
  36. self.write_cmd(0xA6); # normal / reverse
  37. self.write_cmd(0xA8); # multiplex ratio
  38. self.write_cmd(0x1F); # duty = 1/32
  39. self.write_cmd(0xC8); # Com scan direction
  40. self.write_cmd(0xD3); # set display offset
  41. self.write_cmd(0x00);
  42. self.write_cmd(0x20);
  43. self.write_cmd(0x01); # set Vertical Addressing Mode
  44. self.write_cmd(0xD5); # set osc division
  45. self.write_cmd(0x80);
  46. self.write_cmd(0xD9); # set pre-charge period
  47. self.write_cmd(0xf1);
  48. self.write_cmd(0xDA); # set COM pins
  49. self.write_cmd(0x12);
  50. self.write_cmd(0xdb); # set vcomh
  51. self.write_cmd(0x40);
  52. self.write_cmd(0x8d); # set charge pump enable
  53. self.write_cmd(0x14);
  54. self.write_cmd(0xAF); # display ON
  55. def show(self):
  56. for i in range(0, 4):
  57. self.write_cmd(0x22)
  58. self.write_cmd(0x00+i) # set start page address
  59. self.write_cmd(0x00+i) # set end page address
  60. self.write_cmd(0x21)
  61. self.write_cmd(0x20) # set low column address
  62. self.write_cmd(0x5f) # set high column address
  63. # write data #
  64. for j in range(0, self.width):
  65. self.write_data(self.buffer[j+self.width*i])
  66. return
  67. if __name__=='__main__':
  68. OLED = OLED_0inch49()
  69. OLED.fill(0x00)
  70. OLED.text("OLED0.49",0,1,OLED.white)
  71. OLED.text("64x32Px",4,12,OLED.white)
  72. OLED.text("SSD1315",4,23,OLED.white)
  73. OLED.show()
  74. time.sleep(1)
  75. while True:
  76. pass