一、目的

这一节我们学习如何使用我们的ESP32开发板来控制2.90寸电子墨水屏模块(黑白套件)。

二、环境

ESP32 + 2.90寸 电子墨水屏模块 + Thonny IDE + 几根杜邦线

接线方法:

 三、墨水屏驱动

此处注意注意:不同的型号、不同厂家的墨水屏驱动方式有些不同,一定要联系卖家。这里分享一下墨水屏驱动。

1、老版本墨水屏驱动:

"""
MicroPython Waveshare 4.2" Black/White GDEW042T2 e-paper display driver
https://github.com/mcauser/micropython-waveshare-epaperMIT License
Copyright (c) 2017 Waveshare
Copyright (c) 2018 Mike CauserPermission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
"""from micropython import const
from time import sleep_ms
import ustruct# Display resolution
EPD_WIDTH  = const(296)
EPD_HEIGHT = const(128)# Display commands
PANEL_SETTING                  = const(0x00)
POWER_SETTING                  = const(0x01)
POWER_OFF                      = const(0x02)
#POWER_OFF_SEQUENCE_SETTING     = const(0x03)
POWER_ON                       = const(0x04)
#POWER_ON_MEASURE               = const(0x05)
BOOSTER_SOFT_START             = const(0x06)
DEEP_SLEEP                     = const(0x07)
DATA_START_TRANSMISSION_1      = const(0x10)
#DATA_STOP                      = const(0x11)
DISPLAY_REFRESH                = const(0x12)
DATA_START_TRANSMISSION_2      = const(0x13)
LUT_FOR_VCOM                   = const(0x20)
LUT_WHITE_TO_WHITE             = const(0x21)
LUT_BLACK_TO_WHITE             = const(0x22)
LUT_WHITE_TO_BLACK             = const(0x23)
LUT_BLACK_TO_BLACK             = const(0x24)
PLL_CONTROL                    = const(0x30)
#TEMPERATURE_SENSOR_COMMAND     = const(0x40)
#TEMPERATURE_SENSOR_SELECTION   = const(0x41)
#TEMPERATURE_SENSOR_WRITE       = const(0x42)
#TEMPERATURE_SENSOR_READ        = const(0x43)
VCOM_AND_DATA_INTERVAL_SETTING = const(0x50)
#LOW_POWER_DETECTION            = const(0x51)
#TCON_SETTING                   = const(0x60)
TCON_RESOLUTION                 = const(0x61)
RESOLUTION_SETTING             = const(0x61)
#GSST_SETTING                   = const(0x65)
#GET_STATUS                     = const(0x71)
#AUTO_MEASUREMENT_VCOM          = const(0x80)
#READ_VCOM_VALUE                = const(0x81)
VCM_DC_SETTING                 = const(0x82)
#PARTIAL_WINDOW                 = const(0x90)
#PARTIAL_IN                     = const(0x91)
#PARTIAL_OUT                    = const(0x92)#PROGRAM_MODE                   = const(0xA0)
#ACTIVE_PROGRAMMING             = const(0xA1)
#READ_OTP                       = const(0xA2)
#POWER_SAVING                   = const(0xE3)BUSY = const(0)  # 0=busy, 1=idleclass EPD:# 44/42 bytes (look up tables)LUT_VCOM0 = bytearray(b'\x00\x17\x00\x00\x00\x02\x00\x17\x17\x00\x00\x02\x00\x0A\x01\x00\x00\x01\x00\x0E\x0E\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')LUT_WW    = bytearray(b'\x40\x17\x00\x00\x00\x02\x90\x17\x17\x00\x00\x02\x40\x0A\x01\x00\x00\x01\xA0\x0E\x0E\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')LUT_BW    = LUT_WWLUT_BB    = bytearray(b'\x80\x17\x00\x00\x00\x02\x90\x17\x17\x00\x00\x02\x80\x0A\x01\x00\x00\x01\x50\x0E\x0E\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')LUT_WB    = LUT_BBdef __init__(self, spi, cs, dc, rst, busy):self.spi = spiself.cs = csself.dc = dcself.rst = rstself.busy = busyself.cs.init(self.cs.OUT, value=1)self.dc.init(self.dc.OUT, value=0)self.rst.init(self.rst.OUT, value=0)self.busy.init(self.busy.IN)self.width = EPD_WIDTHself.height = EPD_HEIGHTdef _command(self, command, data=None):self.dc(0)self.cs(0)self.spi.write(bytearray([command]))self.cs(1)if data is not None:self._data(data)def _data(self, data):self.dc(1)self.cs(0)self.spi.write(data)self.cs(1)def init(self):self.reset()self._command(POWER_SETTING, b'\x03\x00\x2B\x2B\xFF') # VDS_EN VDG_EN, VCOM_HV VGHL_LV[1] VGHL_LV[0], VDH, VDL, VDHR# self._command(POWER_SETTING, b'\x03\x00\x2B\x2B\x29')self._command(BOOSTER_SOFT_START, b'\x17\x17\x17') # 07 0f 17 1f 27 2F 37 2fself._command(POWER_ON)self.wait_until_idle()self._command(PANEL_SETTING, b'\xBF\x0B') # KW-BF   KWR-AF  BWROTP 0f# self._command(PANEL_SETTING, b'\xCF')self._command(VCOM_AND_DATA_INTERVAL_SETTING, b'\x17')self._command(PLL_CONTROL, b'\x3C') # 3A 100HZ   29 150Hz 39 200HZ  31 171HZ# self._command(PLL_CONTROL, b'\x39')# self._command(TCON_RESOLUTION, bytearray([self.width, self.height>>8, self.height]))# self._command(VCM_DC_SETTING, b'\x0E')def wait_until_idle(self):while self.busy.value() == BUSY:sleep_ms(10)def reset(self):self.rst(0)sleep_ms(20)self.rst(1)sleep_ms(20)def set_lut(self):self._command(LUT_FOR_VCOM, self.LUT_VCOM0)    # vcomself._command(LUT_WHITE_TO_WHITE, self.LUT_WW) # ww --self._command(LUT_BLACK_TO_WHITE, self.LUT_BW) # bw rself._command(LUT_WHITE_TO_BLACK, self.LUT_BB) # wb wself._command(LUT_BLACK_TO_BLACK, self.LUT_WB) # bb b# draw the current frame memorydef display_frame(self, frame_buffer):self._command(RESOLUTION_SETTING, ustruct.pack(">HH", EPD_WIDTH, EPD_HEIGHT))self._command(VCM_DC_SETTING, b'\x12')self._command(VCOM_AND_DATA_INTERVAL_SETTING)self._command(0x97) # VBDF 17|D7 VBDW 97  VBDB 57  VBDF F7  VBDW 77  VBDB 37  VBDR B7# TODO should ^ this be _data(0x97), not sure what it doesif frame_buffer:"""self._command(DATA_START_TRANSMISSION_1)for i in range(0, self.width * self.height // 8):self._data(bytearray([0xFF])) # bit set: white, bit reset: blacksleep_ms(2)"""self._command(DATA_START_TRANSMISSION_2)sleep_ms(2)print("self.width * self.height // 8 =====", self.width * self.height // 8)for i in range(0, self.width * self.height // 8):# print(">>>>>i=", i, "<<<<<<111 ")self._data(bytearray([frame_buffer[i]]))# print(">>>>>i=", i, "<<<<<<111222222222")sleep_ms(2)self.set_lut()self._command(DISPLAY_REFRESH)sleep_ms(10)self.wait_until_idle()

2、新版本墨水屏驱动:

"""
日期:2022年9月27日
说明:1. 此版本对应于2.9寸墨水屏,且是从2022年8月份更新后的版本,之前的老版本墨水屏不通用2. 【2022年10月1日】更新:修复文字显示相反的bug
"""from time import sleep_ms# Display resolution
EPD_WIDTH  = 296
EPD_HEIGHT = 128class EPD:def __init__(self, spi, cs, dc, rst, busy):self.spi = spiself.cs = csself.dc = dcself.rst = rstself.busy = busyself.cs.init(self.cs.OUT, value=1)self.dc.init(self.dc.OUT, value=0)self.rst.init(self.rst.OUT, value=0)self.busy.init(self.busy.IN)self.width = EPD_WIDTHself.height = EPD_HEIGHTdef _command(self, command, data=None):sleep_ms(1)self.dc(0)self.cs(0)print("command=", command)try:self.spi.write(bytearray([command]))except:self.spi.write(command)self.cs(1)if data is not None:self._data(data)def _data(self, data):sleep_ms(1)self.cs(0)self.dc(1)self.spi.write(data)self.cs(1)def init(self):self.reset()self.wait_until_idle()self._command(b'\x12')self.wait_until_idle()self._command(b'\x01')  # Driver output control      self._data(b'\x27')self._data(b'\x01')self._data(b'\x00')self._command(b'\x11')  # data entry mode       self._data(b'\x03')  # 这里影响内容镜像self._command(b'\x44')  # set Ram-X address start/end position   self._data(b'\x00')  # X起始点为0(1个字节)self._data(b'\x0F')  # X终止点为(1个字节)0x0F-->(15+1)*8=128self._command(b'\x45')  # set Ram-Y address start/end position          self._data(b'\x00')  # Y设置起始点为 0(2个字节)self._data(b'\x00') self._data(b'\x27')  # 终止点为(2个字节):0x0127-->(295+1)=296self._data(b'\x01')self._command(b'\x3C')  # BorderWavefromself._data(b'\x05')  self._command(b'\x21')  # Display update controlself._data(b'\x00')    self._data(b'\x80')          self._command(b'\x18')  # Read built-in temperature sensorself._data(b'\x80')  self._command(b'\x4E')  # set RAM x address count to 0self._data(b'\x00')self._command(b'\x4F')  # set RAM y address count to 0X199    self._data(b'\x27')self._data(b'\x01')self.wait_until_idle()def wait_until_idle(self):while True:if self.busy.value() == 0:  # 1 busy breaksleep_ms(10)def reset(self):self.rst(0)sleep_ms(10)self.rst(1)sleep_ms(10)def display_frame(self, frame_buffer):self._command(b'\x24')if frame_buffer:print("self.width * self.height // 8 =====", self.width * self.height // 8)for i in range(0, self.width * self.height // 8):# print(">>>>>i=", i, "<<<<<<111 ")self._data(bytearray([frame_buffer[i]]))# print(">>>>>i=", i, "<<<<<<111222222222")sleep_ms(1)self.epd_udpate()def epd_udpate(self):self._command(b'\x22')  # Display Update Controlself._data(b'\xF7')   self._command(b'\x20')  # Activate Display Update Sequenceself.wait_until_idle()

五、墨水屏显示图片

1、准备图片。制作1个296x128像素的图片,图片的格式必须是jpg格式。

2,使用工具image2lcd转变图片为程序格式。工具从百度自行下载,或者从文末下载。

程序会保存为一个.C的文件,我们打开文件,复制里面的十六进制数据:

3,打开Thonny IDE,新建一个Python文件,命名为image_array.py,把上一步的十六进制数据粘贴在代码里面:

# 128 x 296
image_array = bytearray([0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X0F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X03,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X7F,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X1F,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X1F,0X80,0X03,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X3F,0XC0,0X03,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X3F,0XC0,0X01,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X3F,0XCE,0X00,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X3F,0XCF,0X00,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X3F,0XCF,0X80,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X3F,0XCF,0XC0,0X7F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X3F,0X8F,0XC0,0X3F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X3F,0X9F,0XE0,0X3F,0XFF,0XFF,
0XFF,0XFF,0XFF,0X1F,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X3F,0X9F,0XF0,0X3F,0XFF,0XFF,
0XFF,0XFF,0XE3,0X0F,0XFF,0XFF,0XFF,0XFF,0X81,0X80,0X3F,0X9F,0XF0,0X1F,0XFF,0XFF,
0XFF,0XFF,0XE0,0X0F,0XFF,0XFF,0XFF,0XFF,0X81,0X80,0X3F,0X1F,0XF8,0X1F,0XFF,0XFF,
0XFF,0XFF,0XE0,0X0F,0XFF,0XFF,0XFF,0XFF,0X83,0X80,0X3F,0X1F,0XFC,0X1F,0XFF,0XFF,
0XFF,0XFF,0XE0,0X0F,0XFF,0XFF,0XFF,0XFF,0X03,0X80,0X3F,0X1F,0XFC,0X0F,0XFF,0XFF,
0XFF,0XFF,0XE0,0X0F,0XFF,0XFF,0XFF,0XFF,0X07,0X80,0X3F,0X1F,0XFC,0X0F,0XFF,0XFF,
0XFF,0XFF,0XF0,0X07,0XFF,0XFF,0XFF,0XFF,0X07,0X80,0X10,0X03,0XF0,0X0F,0XFF,0XFF,
0XFF,0XFF,0XF0,0X07,0XFF,0XFF,0XFF,0XFF,0X07,0X80,0X00,0X01,0XE0,0X0F,0XFF,0XFF,
0XFF,0XFF,0XF0,0X07,0XFF,0XFF,0XFF,0XFF,0X0F,0X80,0X00,0X00,0X00,0X0F,0XFF,0XFF,
0XFF,0XFF,0XF0,0X07,0XFF,0XFF,0XFF,0XFF,0X0F,0X80,0X00,0X00,0X06,0X0F,0XFF,0XFF,
0XFF,0XFF,0XF8,0X03,0XFF,0XFF,0XFF,0XFE,0X0F,0X80,0X00,0X00,0X0E,0X07,0XFF,0XFF,
0XFF,0XFF,0XF8,0X03,0XFF,0XFF,0XFF,0XFE,0X07,0X80,0X00,0X20,0X07,0X07,0XFF,0XFF,
0XFF,0XFF,0XF8,0X03,0XFF,0XFF,0XFF,0XFE,0X01,0X80,0X00,0X70,0X07,0X07,0XFF,0XFF,
0XFF,0XFF,0XFC,0X01,0XFF,0XFF,0XFF,0XFE,0X00,0X00,0X00,0XF0,0X03,0X07,0XFF,0XFF,
0XFF,0XFF,0XFC,0X01,0XFF,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X61,0X01,0X07,0XFF,0XFF,
0XFF,0XFF,0XFC,0X01,0XFF,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X43,0X81,0X07,0XFF,0XFF,
0XFF,0XFF,0XFE,0X00,0XFF,0XFF,0XDF,0XFE,0X00,0X00,0X00,0X07,0XC0,0X07,0XFF,0XFF,
0XFF,0XFF,0XFE,0X00,0XFF,0XFF,0X9F,0XFE,0X00,0X00,0X00,0X07,0XE0,0X07,0XFF,0XFF,
0XFF,0XFF,0XFE,0X00,0XFF,0XFF,0X8F,0XF0,0X00,0X00,0X00,0X07,0XF0,0X07,0XFF,0XFF,
0XFF,0XFF,0XFE,0X00,0XFF,0XFF,0X8F,0XE0,0X00,0X00,0X00,0X07,0XF0,0X07,0XFF,0XFF,
0XFF,0XFF,0XFF,0X00,0XFF,0XFF,0X8F,0XC0,0X00,0X00,0X00,0X0F,0XF8,0X07,0XFF,0XFF,
0XFF,0XFF,0XFF,0X00,0X7F,0XFF,0X8F,0X80,0X00,0X00,0X00,0X0F,0XF8,0X07,0XFF,0XFF,
0XFF,0XFF,0XFF,0X00,0X7F,0XFF,0X8F,0X00,0X00,0X00,0X00,0X03,0XF8,0X07,0XFF,0XFF,
0XFF,0XFF,0XFF,0X00,0X7F,0XFF,0X8F,0X00,0X00,0X00,0X00,0X00,0XF8,0X07,0XFF,0XFF,
0XFF,0XFF,0XFF,0X00,0X7F,0XFF,0X84,0X00,0X00,0X00,0X00,0X00,0X30,0X07,0XFF,0XFF,
0XFF,0XFF,0XFF,0X00,0X7F,0XFF,0X84,0X04,0X00,0X00,0X00,0X08,0X00,0X07,0XFF,0XFF,
0XFF,0XFF,0XFF,0X80,0X3F,0XFF,0X00,0X1E,0X00,0X00,0X00,0X1E,0X00,0X07,0XFF,0XFF,
0XFF,0XFF,0XFF,0X80,0X3F,0XFF,0X00,0X1C,0X00,0X00,0X00,0X1F,0X80,0X07,0XFF,0XFF,
0XFF,0XFF,0XFF,0X80,0X3F,0X7F,0X00,0X38,0X00,0X00,0X00,0X1F,0X00,0X07,0XFF,0XFF,
0XFF,0XFF,0XFF,0X80,0X3F,0X1F,0X00,0X38,0X00,0X00,0X00,0X1F,0X1C,0X07,0XFF,0XFF,
0XFF,0XFF,0XFF,0X80,0X3E,0X1F,0X00,0X00,0X00,0X00,0X00,0X1C,0X3E,0X07,0XFF,0XFF,
0XFF,0XFF,0XFF,0X80,0X3C,0X1E,0X00,0X00,0X00,0X00,0X00,0X18,0XFF,0X07,0XFF,0XFF,
0XFF,0XFF,0XFF,0X80,0X38,0X0E,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0X0F,0XFF,0XFF,
0XFF,0XFF,0XFF,0X80,0X30,0X0C,0X00,0X00,0X00,0X00,0X00,0X01,0XFE,0X0F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFE,0X0F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFE,0X0F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFE,0X0F,0XFF,0XFF,
0XFF,0XFF,0XDF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFC,0X0F,0XFF,0XFF,
0XFF,0XFF,0X9F,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFC,0X0F,0XFF,0XFF,
0XFF,0XFF,0X9F,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XF8,0X0F,0XFF,0XFF,
0XFF,0XFF,0X9F,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X38,0X0F,0XFF,0XFF,
0XFF,0XFF,0XDF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,
0XFF,0XFF,0XCF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X0C,0X11,0X00,0X0F,0XFF,0XFF,
0XFF,0XFF,0XCF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X0C,0X09,0XC0,0X0F,0XFF,0XFF,
0XFF,0XFF,0XCF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X3C,0X49,0XE0,0X0F,0XFF,0XFF,
0XFF,0XFF,0XCF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X3C,0XCC,0XE0,0X1F,0XFF,0XFF,
0XFF,0XFF,0XCF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X3C,0XCC,0XC0,0X1F,0XFF,0XFF,
0XFF,0XFF,0XCF,0XF8,0X00,0X00,0X00,0X00,0X18,0X00,0X3C,0XE4,0X00,0X1F,0XFF,0XFF,
0XFF,0XFF,0XCF,0XF8,0X00,0X00,0X00,0X00,0X78,0X00,0X3D,0XE6,0X00,0X1F,0XFF,0XFF,
0XFF,0XFF,0XCF,0XF8,0X00,0X00,0X00,0X00,0XFC,0X00,0X3D,0XE2,0X00,0X1F,0XFF,0XFF,
0XFF,0XFF,0XC7,0XFC,0X00,0X00,0X00,0X03,0XFC,0X00,0X39,0XF0,0X00,0X3F,0XFF,0XFF,
0XFF,0XFF,0XC7,0XFC,0X00,0X00,0X00,0X0F,0XFC,0X00,0X39,0XF0,0X04,0X3F,0XFF,0XFF,
0XFF,0XFF,0XE7,0XFC,0X00,0X00,0X00,0X1F,0XFE,0X00,0X19,0XC0,0X0C,0X3F,0XFF,0XFF,
0XFF,0XFF,0XE3,0X00,0X00,0X00,0X00,0X1F,0XFC,0X00,0X00,0X00,0X18,0X7F,0XFF,0XFF,
0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X1F,0XFE,0X00,0X00,0X00,0X38,0X7F,0XFF,0XFF,
0XFF,0XFF,0XE0,0X00,0X00,0X00,0XC0,0X1F,0XFF,0X00,0X00,0X00,0X70,0XFF,0XFF,0XFF,
0XFF,0XFF,0XE0,0X00,0X00,0X03,0XE0,0X1F,0XFF,0X00,0X00,0X00,0XE0,0XFF,0XFF,0XFF,
0XFF,0XFF,0XF0,0X00,0X00,0X03,0XF0,0X1F,0XFC,0X00,0X00,0X00,0XE0,0XFF,0XFF,0XFF,
0XFF,0XFF,0XF4,0X00,0X00,0X0F,0XF8,0X0F,0XC0,0X00,0X00,0X04,0X80,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFE,0X00,0X00,0X1F,0XF8,0X0F,0X00,0X00,0X00,0X3E,0X03,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFE,0X01,0X00,0X3F,0XF8,0X0F,0X00,0X00,0X03,0XFE,0X03,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0X01,0X00,0X7F,0XFC,0X0E,0X00,0X00,0X07,0XFC,0X03,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0X01,0X01,0XFF,0XFC,0X0C,0X00,0X00,0X07,0XF8,0X07,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XC3,0X83,0XFF,0XFE,0X00,0X00,0X80,0X02,0X80,0X0F,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X83,0XFF,0XFE,0X00,0X03,0X80,0X00,0X00,0X1F,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X83,0XFF,0XFF,0X00,0X0F,0X80,0X00,0X00,0X3F,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X80,0X1F,0XFF,0X00,0X1F,0X80,0X00,0X00,0X7F,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X80,0X0F,0XFF,0X80,0X3F,0X80,0X00,0X00,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X80,0X07,0XFF,0X80,0XFF,0X80,0X30,0X03,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X80,0X03,0XFF,0XC0,0XFF,0X80,0X3C,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X80,0X03,0XFF,0XC3,0XFF,0X80,0X3E,0X7F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X80,0X03,0XFF,0XE3,0XFF,0X80,0X3E,0X7F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X80,0X01,0XFF,0XFF,0XFF,0X80,0X3C,0X7F,0XCF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X80,0XE0,0XFF,0XFF,0XFF,0X80,0X38,0X7F,0XCF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X81,0XF1,0XFF,0XFF,0XFF,0XC0,0X30,0XFF,0XCF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X81,0XF1,0XFF,0XFF,0XFF,0XC0,0X20,0XFF,0X8F,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X01,0XF1,0XFF,0XFF,0XFF,0XE0,0X00,0XFF,0X8F,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X03,0XF9,0XFF,0XFF,0XFF,0XF0,0X01,0XFF,0X0F,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X03,0XF9,0XFF,0XFF,0XFF,0XF0,0X01,0XFF,0X0F,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X07,0XFD,0XFF,0XFB,0XFF,0XF0,0X03,0XFC,0X0F,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X07,0XFD,0XFF,0XF9,0XFF,0X80,0X03,0XF0,0X0F,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X07,0XFD,0XFE,0X79,0XE0,0X00,0X03,0XE0,0X0F,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X0F,0XFF,0XFE,0X39,0X00,0X00,0X06,0X00,0X07,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X0F,0XFF,0XFF,0X31,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X0F,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X01,0X0F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X1F,0XFF,0XFF,0X80,0X00,0X00,0X00,0X03,0X00,0X0F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X1F,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X1F,0XE0,0X0F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X7F,0XF0,0X0F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0XE0,0X00,0X00,0X00,0XFF,0XF8,0X0F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0XE0,0X00,0X07,0X03,0XFF,0XF8,0X0F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0XC0,0X00,0X3E,0X03,0XFF,0XFC,0X0F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0XC0,0X01,0XFE,0X07,0XFF,0XFC,0X0F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0XC0,0X07,0XFC,0X07,0XFF,0XFE,0X0F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFE,0X3F,0XFF,0XFF,0XC0,0X3F,0XFC,0X0F,0XFF,0XFF,0X0F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFE,0X3F,0XFF,0XFF,0XC0,0XFF,0XFC,0X0F,0XFF,0XFF,0X0F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFE,0X3F,0XFF,0XFF,0X83,0XFF,0XF8,0X0F,0XFF,0XFF,0X0F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFE,0X3F,0XFF,0XFF,0X87,0XFF,0XF8,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFE,0X3F,0XFF,0XFF,0X87,0XFF,0XF8,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFE,0X7F,0XFF,0XFF,0XC7,0X00,0XF0,0X18,0X7F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFE,0XFF,0XFF,0XFF,0XC6,0X00,0X00,0X18,0X7F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X18,0X7F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X1E,0X7F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X1E,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X1E,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X1E,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X1E,0X3F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X18,0X1F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X02,0X03,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X02,0X03,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X07,0X83,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X07,0XC1,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X07,0XE1,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X0F,0XF0,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X0F,0XF8,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X1F,0XF8,0X7F,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X3F,0XFC,0X3F,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X3F,0XFC,0X3F,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X7F,0XFE,0X1F,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0XFF,0XFF,0X0F,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X01,0XFF,0XFF,0X8F,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0X87,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XC7,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X01,0XFF,0XFF,0XC3,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X01,0XFF,0XFF,0XC1,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X01,0XFF,0XFF,0XE1,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X01,0XFF,0XFF,0XF0,0X3F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X01,0XFF,0XFF,0XF0,0X0F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X03,0XFF,0XFF,0XF8,0X0F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X03,0XFF,0XFF,0XFC,0X07,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X03,0XFF,0XFF,0XFC,0X07,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X03,0XFF,0XFF,0XFC,0X07,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X01,0XFF,0XFF,0XFE,0X03,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X01,0XFF,0XFF,0XFE,0X03,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X01,0XFF,0XFF,0XFF,0X03,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X01,0XFF,0XFF,0XFF,0XC3,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X01,0XFF,0XFF,0XFF,0XC3,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X01,0XFF,0XFF,0XFF,0XE3,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X01,0XFF,0XFF,0XFF,0XE3,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X01,0XFF,0XFF,0XFF,0XF3,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0XFF,0XFF,0XFF,0XF3,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0XFF,0XFF,0XFF,0XF3,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0XFF,0XFF,0XFF,0XFB,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XE0,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XC0,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XC0,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X80,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X0F,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XC6,0X0F,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X3C,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X18,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XF9,0XC0,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFC,0XC0,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFC,0XC0,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFC,0X80,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X03,0XC7,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X01,0X03,0X87,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X01,0X81,0X07,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X0C,0X00,0X00,0X01,0X81,0X0F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFE,0XE0,0X00,0X3F,0X00,0X03,0X03,0XC0,0X0F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFE,0X70,0X00,0X7F,0XC0,0X07,0X03,0XC0,0X0F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X30,0X00,0XFF,0XF0,0X1F,0X03,0XE0,0X1F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X10,0X00,0XFF,0XFC,0X7F,0X07,0XE0,0X1F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X7F,0XFF,0XFF,0X07,0XE0,0X1F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X3F,0XFF,0XFF,0X0F,0XE0,0X1F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X1F,0XEF,0XFF,0X0F,0XE0,0X0F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X0F,0X07,0XFF,0X0F,0XC0,0X0F,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X1F,0XFF,0X0F,0X80,0X07,0XFB,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X1F,0XFF,0X0F,0X00,0X83,0XFB,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X1F,0XFE,0X00,0X01,0X81,0XFB,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X0F,0XFE,0X00,0X01,0XE0,0XF3,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X03,0XFE,0X00,0X03,0XE0,0X33,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X03,0XFF,0X00,0XFF,0XF8,0X03,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X03,0XFF,0X03,0XFF,0XF8,0X03,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X03,0XFF,0X07,0XFF,0XFE,0X03,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XC8,0X00,0X00,0X1F,0XFF,0XCF,0XFF,0XFF,0X03,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XC8,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0X03,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0X81,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0X81,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X3F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X1F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X0F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFE,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X07,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFE,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X07,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFE,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X07,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFE,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X07,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC7,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC7,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE7,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE7,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF])

4、测试程序。在新建一个文件,命名为test.py,代码如下:

from machine import Pin, SPI
import framebuf
import epaper# 1. 创建对应的引脚
miso = Pin(19)
mosi = Pin(23)
sck = Pin(18)
cs = Pin(33)
dc = Pin(32)
rst = Pin(19)
busy = Pin(35)
spi = SPI(2, baudrate=10000000, polarity=0, phase=0, sck=sck, miso=miso, mosi=mosi)# 2. 创建墨水屏驱动对象
e = epaper.EPD(spi, cs, dc, rst, busy)
e.init()# 3. 定义要显示的内容宽度高度
w = 296
h = 128# 4. 创建需要的对象
buf = bytearray(w * h // 8)  # 296 * 128 // 8 = 4736
fb = framebuf.FrameBuffer(buf, h, w, framebuf.MONO_HLSB)def show_black_white():black = 0white = 1fb.fill(white)# fb.fill(black)e.display_frame(buf)def show_image():from image_array import image_array# 注意:实际的图片多大这里就写多大,例如实际的图片是118x296,那么就将下面的128改为118fbImage = framebuf.FrameBuffer(image_array, 128, 296,  framebuf.MONO_HLSB)fb.blit(fbImage, 0, 0)e.display_frame(buf)if __name__ == "__main__":# show_black_white()show_image()

代码运行效果如下:

 六、墨水屏显示文字

上面我们显示图片时的test.py中使用了framebuf库,原来的这个库不能调整显示文字的方向。我们更新下这个库,使用它可以4个方向任意调整和可以放大字体。字体库在文末下载。

newframebuf.py

# SPDX-FileCopyrightText: <text> 2018 Kattni Rembor, Melissa LeBlanc-Williams
# and Tony DiCola, for Adafruit Industries.
# Original file created by Damien P. George </text>
#
# SPDX-License-Identifier: MIT"""
`adafruit_framebuf`
====================================================
CircuitPython pure-python framebuf module, based on the micropython framebuf module.
Implementation Notes
--------------------
**Hardware:**
* `Adafruit SSD1306 OLED displays <https://www.adafruit.com/?q=ssd1306>`_
**Software and Dependencies:**
* Adafruit CircuitPython firmware for the supported boards:https://github.com/adafruit/circuitpython/releases
"""__version__ = "0.0.0-auto.0"
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_framebuf.git"import os
import struct# Framebuf format constants:
MVLSB = 0  # Single bit displays (like SSD1306 OLED)
RGB565 = 1  # 16-bit color displays
GS4_HMSB = 2  # Unimplemented!
MHMSB = 3  # Single bit displays like the Sharp Memory
RGB888 = 4  # Neopixels and Dotstarsclass MHMSBFormat:"""MHMSBFormat"""@staticmethoddef set_pixel(framebuf, x, y, color):"""Set a given pixel to a color."""index = (y * framebuf.stride + x) // 8offset = 7 - x & 0x07framebuf.buf[index] = (framebuf.buf[index] & ~(0x01 << offset)) | ((color != 0) << offset)@staticmethoddef get_pixel(framebuf, x, y):"""Get the color of a given pixel"""index = (y * framebuf.stride + x) // 8offset = 7 - x & 0x07return (framebuf.buf[index] >> offset) & 0x01@staticmethoddef fill(framebuf, color):"""completely fill/clear the buffer with a color"""if color:fill = 0xFFelse:fill = 0x00for i in range(len(framebuf.buf)):  # pylint: disable=consider-using-enumerateframebuf.buf[i] = fill@staticmethoddef fill_rect(framebuf, x, y, width, height, color):"""Draw a rectangle at the given location, size and color. The ``fill_rect`` method drawsboth the outline and interior."""# pylint: disable=too-many-argumentsfor _x in range(x, x + width):offset = 7 - _x & 0x07for _y in range(y, y + height):index = (_y * framebuf.stride + _x) // 8framebuf.buf[index] = (framebuf.buf[index] & ~(0x01 << offset)) | ((color != 0) << offset)class MVLSBFormat:"""MVLSBFormat"""@staticmethoddef set_pixel(framebuf, x, y, color):"""Set a given pixel to a color."""index = (y >> 3) * framebuf.stride + xoffset = y & 0x07framebuf.buf[index] = (framebuf.buf[index] & ~(0x01 << offset)) | ((color != 0) << offset)@staticmethoddef get_pixel(framebuf, x, y):"""Get the color of a given pixel"""index = (y >> 3) * framebuf.stride + xoffset = y & 0x07return (framebuf.buf[index] >> offset) & 0x01@staticmethoddef fill(framebuf, color):"""completely fill/clear the buffer with a color"""if color:fill = 0xFFelse:fill = 0x00for i in range(len(framebuf.buf)):  # pylint: disable=consider-using-enumerateframebuf.buf[i] = fill@staticmethoddef fill_rect(framebuf, x, y, width, height, color):"""Draw a rectangle at the given location, size and color. The ``fill_rect`` method drawsboth the outline and interior."""# pylint: disable=too-many-argumentswhile height > 0:index = (y >> 3) * framebuf.stride + xoffset = y & 0x07for w_w in range(width):framebuf.buf[index + w_w] = (framebuf.buf[index + w_w] & ~(0x01 << offset)) | ((color != 0) << offset)y += 1height -= 1class RGB888Format:"""RGB888Format"""@staticmethoddef set_pixel(framebuf, x, y, color):"""Set a given pixel to a color."""index = (y * framebuf.stride + x) * 3if isinstance(color, tuple):framebuf.buf[index : index + 3] = bytes(color)else:framebuf.buf[index : index + 3] = bytes(((color >> 16) & 255, (color >> 8) & 255, color & 255))@staticmethoddef get_pixel(framebuf, x, y):"""Get the color of a given pixel"""index = (y * framebuf.stride + x) * 3return ((framebuf.buf[index] << 16)| (framebuf.buf[index + 1] << 8)| framebuf.buf[index + 2])@staticmethoddef fill(framebuf, color):"""completely fill/clear the buffer with a color"""fill = (color >> 16) & 255, (color >> 8) & 255, color & 255for i in range(0, len(framebuf.buf), 3):framebuf.buf[i : i + 3] = bytes(fill)@staticmethoddef fill_rect(framebuf, x, y, width, height, color):"""Draw a rectangle at the given location, size and color. The ``fill_rect`` method drawsboth the outline and interior."""# pylint: disable=too-many-argumentsfill = (color >> 16) & 255, (color >> 8) & 255, color & 255for _x in range(x, x + width):for _y in range(y, y + height):index = (_y * framebuf.stride + _x) * 3framebuf.buf[index : index + 3] = bytes(fill)class FrameBuffer:"""FrameBuffer object.:param buf: An object with a buffer protocol which must be large enough to contain everypixel defined by the width, height and format of the FrameBuffer.:param width: The width of the FrameBuffer in pixel:param height: The height of the FrameBuffer in pixel:param buf_format: Specifies the type of pixel used in the FrameBuffer; permissible valuesare listed under Constants below. These set the number of bits used toencode a color value and the layout of these bits in ``buf``. Where acolor value c is passed to a method, c is  a small integer with an encodingthat is dependent on the format of the FrameBuffer.:param stride: The number of pixels between each horizontal line of pixels in theFrameBuffer. This defaults to ``width`` but may need adjustments whenimplementing a FrameBuffer within another larger FrameBuffer or screen. The``buf`` size must accommodate an increased step size."""def __init__(self, buf, width, height, buf_format=MVLSB, stride=None):# pylint: disable=too-many-argumentsself.buf = bufself.width = widthself.height = heightself.stride = strideself._font = Noneif self.stride is None:self.stride = widthif buf_format == MVLSB:self.format = MVLSBFormat()elif buf_format == MHMSB:self.format = MHMSBFormat()elif buf_format == RGB888:self.format = RGB888Format()else:raise ValueError("invalid format")self._rotation = 0@propertydef rotation(self):"""The rotation setting of the display, can be one of (0, 1, 2, 3)"""return self._rotation@rotation.setterdef rotation(self, val):if not val in (0, 1, 2, 3):raise RuntimeError("Bad rotation setting")self._rotation = valdef fill(self, color):"""Fill the entire FrameBuffer with the specified color."""self.format.fill(self, color)def fill_rect(self, x, y, width, height, color):"""Draw a rectangle at the given location, size and color. The ``fill_rect`` method drawsboth the outline and interior."""# pylint: disable=too-many-arguments, too-many-boolean-expressionsself.rect(x, y, width, height, color, fill=True)def pixel(self, x, y, color=None):"""If ``color`` is not given, get the color value of the specified pixel. If ``color`` isgiven, set the specified pixel to the given color."""if self.rotation == 1:x, y = y, xx = self.width - x - 1if self.rotation == 2:x = self.width - x - 1y = self.height - y - 1if self.rotation == 3:x, y = y, xy = self.height - y - 1if x < 0 or x >= self.width or y < 0 or y >= self.height:return Noneif color is None:return self.format.get_pixel(self, x, y)self.format.set_pixel(self, x, y, color)return Nonedef hline(self, x, y, width, color):"""Draw a horizontal line up to a given length."""self.rect(x, y, width, 1, color, fill=True)def vline(self, x, y, height, color):"""Draw a vertical line up to a given length."""self.rect(x, y, 1, height, color, fill=True)def circle(self, center_x, center_y, radius, color):"""Draw a circle at the given midpoint location, radius and color.The ```circle``` method draws only a 1 pixel outline."""x = radius - 1y = 0d_x = 1d_y = 1err = d_x - (radius << 1)while x >= y:self.pixel(center_x + x, center_y + y, color)self.pixel(center_x + y, center_y + x, color)self.pixel(center_x - y, center_y + x, color)self.pixel(center_x - x, center_y + y, color)self.pixel(center_x - x, center_y - y, color)self.pixel(center_x - y, center_y - x, color)self.pixel(center_x + y, center_y - x, color)self.pixel(center_x + x, center_y - y, color)if err <= 0:y += 1err += d_yd_y += 2if err > 0:x -= 1d_x += 2err += d_x - (radius << 1)def rect(self, x, y, width, height, color, *, fill=False):"""Draw a rectangle at the given location, size and color. The ```rect``` method draws onlya 1 pixel outline."""# pylint: disable=too-many-argumentsif self.rotation == 1:x, y = y, xwidth, height = height, widthx = self.width - x - widthif self.rotation == 2:x = self.width - x - widthy = self.height - y - heightif self.rotation == 3:x, y = y, xwidth, height = height, widthy = self.height - y - height# pylint: disable=too-many-boolean-expressionsif (width < 1or height < 1or (x + width) <= 0or (y + height) <= 0or y >= self.heightor x >= self.width):returnx_end = min(self.width - 1, x + width - 1)y_end = min(self.height - 1, y + height - 1)x = max(x, 0)y = max(y, 0)if fill:self.format.fill_rect(self, x, y, x_end - x + 1, y_end - y + 1, color)else:self.format.fill_rect(self, x, y, x_end - x + 1, 1, color)self.format.fill_rect(self, x, y, 1, y_end - y + 1, color)self.format.fill_rect(self, x, y_end, x_end - x + 1, 1, color)self.format.fill_rect(self, x_end, y, 1, y_end - y + 1, color)def line(self, x_0, y_0, x_1, y_1, color):# pylint: disable=too-many-arguments"""Bresenham's line algorithm"""d_x = abs(x_1 - x_0)d_y = abs(y_1 - y_0)x, y = x_0, y_0s_x = -1 if x_0 > x_1 else 1s_y = -1 if y_0 > y_1 else 1if d_x > d_y:err = d_x / 2.0while x != x_1:self.pixel(x, y, color)err -= d_yif err < 0:y += s_yerr += d_xx += s_xelse:err = d_y / 2.0while y != y_1:self.pixel(x, y, color)err -= d_xif err < 0:x += s_xerr += d_yy += s_yself.pixel(x, y, color)def blit(self):"""blit is not yet implemented"""raise NotImplementedError()def scroll(self, delta_x, delta_y):"""shifts framebuf in x and y direction"""if delta_x < 0:shift_x = 0xend = self.width + delta_xdt_x = 1else:shift_x = self.width - 1xend = delta_x - 1dt_x = -1if delta_y < 0:y = 0yend = self.height + delta_ydt_y = 1else:y = self.height - 1yend = delta_y - 1dt_y = -1while y != yend:x = shift_xwhile x != xend:self.format.set_pixel(self, x, y, self.format.get_pixel(self, x - delta_x, y - delta_y))x += dt_xy += dt_y# pylint: disable=too-many-argumentsdef text(self, string, x, y, color, *, font_name="font5x8.bin", size=1):"""Place text on the screen in variables sizes. Breaks on \n to next line.Does not break on line going off screen."""# determine our effective width/height, taking rotation into accountframe_width = self.widthframe_height = self.heightif self.rotation in (1, 3):frame_width, frame_height = frame_height, frame_widthfor chunk in string.split("\n"):if not self._font or self._font.font_name != font_name:# load the font!self._font = BitmapFont(font_name)width = self._font.font_widthheight = self._font.font_heightfor i, char in enumerate(chunk):char_x = x + (i * (width + 1)) * sizeif (char_x + (width * size) > 0and char_x < frame_widthand y + (height * size) > 0and y < frame_height):self._font.draw_char(char, char_x, y, self, color, size=size)y += height * size# pylint: enable=too-many-argumentsdef image(self, img):"""Set buffer to value of Python Imaging Library image.  The image shouldbe in 1 bit mode and a size equal to the display size."""# determine our effective width/height, taking rotation into accountwidth = self.widthheight = self.heightif self.rotation in (1, 3):width, height = height, widthif isinstance(self.format, RGB888Format) and img.mode != "RGB":raise ValueError("Image must be in mode RGB.")if isinstance(self.format, (MHMSBFormat, MVLSBFormat)) and img.mode != "1":raise ValueError("Image must be in mode 1.")imwidth, imheight = img.sizeif imwidth != width or imheight != height:raise ValueError("Image must be same dimensions as display ({0}x{1}).".format(width, height))# Grab all the pixels from the image, faster than getpixel.pixels = img.load()# Clear bufferfor i in range(len(self.buf)):  # pylint: disable=consider-using-enumerateself.buf[i] = 0# Iterate through the pixelsfor x in range(width):  # yes this double loop is slow,for y in range(height):  #  but these displays are small!if img.mode == "RGB":self.pixel(x, y, pixels[(x, y)])elif pixels[(x, y)]:self.pixel(x, y, 1)  # only write if pixel is true# MicroPython basic bitmap font renderer.
# Author: Tony DiCola
# License: MIT License (https://opensource.org/licenses/MIT)
class BitmapFont:"""A helper class to read binary font tiles and 'seek' through them as afile to display in a framebuffer. We use file access so we dont waste 1KBof RAM on a font!"""def __init__(self, font_name="font5x8.bin"):# Specify the drawing area width and height, and the pixel function to# call when drawing pixels (should take an x and y param at least).# Optionally specify font_name to override the font file to use (default# is font5x8.bin).  The font format is a binary file with the following# format:# - 1 unsigned byte: font character width in pixels# - 1 unsigned byte: font character height in pixels# - x bytes: font data, in ASCII order covering all 255 characters.#            Each character should have a byte for each pixel column of#            data (i.e. a 5x8 font has 5 bytes per character).self.font_name = font_name# Open the font file and grab the character width and height values.# Note that only fonts up to 8 pixels tall are currently supported.try:self._font = open(  # pylint: disable=consider-using-withself.font_name, "rb")self.font_width, self.font_height = struct.unpack("BB", self._font.read(2))# simple font file validation check based on expected file sizeif 2 + 256 * self.font_width != os.stat(font_name)[6]:raise RuntimeError("Invalid font file: " + font_name)except OSError:print("Could not find font file", font_name)raiseexcept OverflowError:# os.stat can throw this on boards without long int support# just hope the font file is valid and press onpassdef deinit(self):"""Close the font file as cleanup."""self._font.close()def __enter__(self):"""Initialize/open the font file"""self.__init__()return selfdef __exit__(self, exception_type, exception_value, traceback):"""cleanup on exit"""self.deinit()def draw_char(self, char, x, y, framebuffer, color, size=1):  # pylint: disable=too-many-arguments"""Draw one character at position (x,y) to a framebuffer in a given color"""size = max(size, 1)# Don't draw the character if it will be clipped off the visible area.# if x < -self.font_width or x >= framebuffer.width or \#   y < -self.font_height or y >= framebuffer.height:#    return# Go through each column of the character.for char_x in range(self.font_width):# Grab the byte for the current column of font data.self._font.seek(2 + (ord(char) * self.font_width) + char_x)try:line = struct.unpack("B", self._font.read(1))[0]except RuntimeError:continue  # maybe character isnt there? go to next# Go through each row in the column byte.for char_y in range(self.font_height):# Draw a pixel for each bit that's flipped on.if (line >> char_y) & 0x1:framebuffer.fill_rect(x + char_x * size, y + char_y * size, size, size, color)def width(self, text):"""Return the pixel width of the specified text message."""return len(text) * (self.font_width + 1)class FrameBuffer1(FrameBuffer):  # pylint: disable=abstract-method"""FrameBuffer1 object. Inherits from FrameBuffer."""pass

我们来测试下,新建一个文件test1.py

from machine import Pin, SPI
import newframebuf
import time
import epaperdef show_text():black = 0white = 1fb.fill(white)fb.text('Welcome to China!', 20, 10, black, size=2)"""e.display_frame(buf)time.sleep(0.5)fb.pixel(30, 10, black)e.display_frame(buf)time.sleep(0.5)fb.hline(30, 30, 10, black)e.display_frame(buf)time.sleep(0.5)fb.vline(30, 50, 10, black)fb.line(30, 70, 40, 80, black)fb.rect(30, 90, 10, 10, black)fb.fill_rect(30, 110, 10, 10, black)for row in range(0,36):fb.text(str(row), 0, row*8, black)fb.text('Line 36', 0, 268, black)"""e.display_frame(buf)if __name__ == "__main__":# 1. 创建对应的引脚miso = Pin(19)mosi = Pin(23)sck = Pin(18)cs = Pin(33)dc = Pin(32)rst = Pin(19)busy = Pin(35)spi = SPI(2, baudrate=10000000, polarity=0, phase=0, sck=sck, miso=miso, mosi=mosi)# 2. 创建墨水屏驱动对象e = epaper.EPD(spi, cs, dc, rst, busy)e.init()# 3. 定义要显示的内容宽度高度w = 296h = 128# 4. 创建需要的对象buf = bytearray(w * h // 8)  # 296 * 128 // 8 = 4736fb = newframebuf.FrameBuffer(buf, h, w, newframebuf.MHMSB)fb.rotation = 3  # 调整显示的方向,可以在0/1/2/3之间选择# 5. 显示文字show_text()

显示文字演示效果:

七、墨水屏连接WIFI显示日历加图片

        我们上面讲解了图片和文字的显示,下面我们将他们结合起来做。

1,图片制作

百度搜索一个你想要的图片,使用截图软件Snipaste进行截图,保存为jpg格式。

然后转化为十六进制

创建一个新的image_array.py文件

# 128 x 296
image_array = bytearray([0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XDF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF9,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF3,0XFF,0X9F,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XFF,0XE7,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE7,0XFF,0XF3,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XEF,0XFF,0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XEF,0XFF,0XFC,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XEF,0XF3,0XFE,0X7F,0XFF,0XFF,0XDF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XEF,0XC0,0X7F,0X3F,0XFF,0XFE,0X03,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XEF,0X8F,0X1F,0XBF,0XFF,0XFC,0XF1,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XEF,0X9F,0XCF,0X9F,0XFF,0XF9,0XFC,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XEF,0XBF,0XE7,0XDF,0XFF,0XF3,0XFE,0X7F,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XEF,0X3F,0XF3,0XCF,0XFF,0XF7,0XFF,0X3F,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XEF,0X3F,0XFB,0XE7,0XFF,0XE7,0XFF,0XBF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XEF,0XBF,0XF9,0XE7,0XFF,0XEF,0XFF,0XDF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XEF,0X3F,0XFD,0XF7,0XFF,0XCF,0XFF,0XCF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XEF,0X3F,0XFC,0XF3,0XFF,0XDF,0XFF,0XE7,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XEF,0X3F,0XFE,0XF3,0XFF,0X9F,0XFF,0XF7,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XEF,0XBF,0XFE,0X73,0XFF,0XBF,0XFF,0XF3,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XEF,0XBF,0XFE,0X79,0XFF,0XBF,0XFF,0XFB,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X9F,0XFF,0X79,0XFF,0X3F,0XFF,0XF9,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X07,0XFF,0X79,0XFF,0X7F,0XFF,0XFD,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X7F,0X79,0XFF,0X7F,0XFF,0XFC,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XF3,0XF0,0X07,0X79,0XFF,0X7F,0XFF,0XFC,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XF9,0XFF,0X80,0X79,0XFE,0X7F,0XFF,0XFE,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X3F,0XF0,0XFF,0XF8,0X3D,0XFE,0XFF,0XFF,0XFE,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X7F,0XE2,0X7F,0XFE,0X19,0XFE,0XFF,0XFF,0XFE,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0XFF,0XCF,0X3F,0XFF,0XC3,0XFC,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0XFF,0X9F,0XBF,0XFF,0XE1,0XFC,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFD,0XFF,0XBF,0X9F,0XFF,0XF8,0X7D,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFD,0XFF,0X3F,0XCF,0XFF,0XFE,0X3D,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF9,0XFF,0X7F,0XEF,0XFF,0XFF,0X9D,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFB,0XFE,0X7F,0XEF,0XFF,0XFF,0XC5,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFB,0XFE,0XFF,0XE7,0XFF,0XFF,0XE1,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF3,0XFC,0XFF,0XF7,0XFF,0XFF,0XF1,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XFC,0XFF,0XF7,0XFF,0XFF,0XFC,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XFD,0XFF,0XF3,0XFF,0XFF,0XFE,0X7F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XF9,0XFF,0XFB,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XEF,0XF9,0XFF,0XFB,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XEF,0XFB,0XFF,0XF9,0XFF,0XFF,0XFF,0XE7,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XEF,0XFB,0XFF,0XF9,0XFF,0XFF,0XFF,0XE3,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XEF,0XF3,0XFF,0XF9,0XFF,0XFF,0XFF,0XF0,0XCF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XF3,0XFF,0XFD,0XFF,0XFF,0XFF,0XF8,0X07,0XFF,
0XFF,0XFF,0XFF,0XF0,0X7F,0XFF,0XCF,0XF3,0XF7,0XFD,0XFF,0XFF,0XFF,0XFC,0X33,0XFF,
0XFF,0XFF,0XFF,0XC7,0X0F,0XFF,0XDF,0XF7,0XEF,0XBD,0XFF,0XFF,0XFF,0XFE,0X33,0XFF,
0XFF,0XFF,0XFF,0X3F,0XE7,0XFF,0XDF,0XF7,0XEF,0X3D,0XFF,0XFF,0XFF,0XFF,0X19,0XFF,
0XFF,0XFF,0XFE,0X7F,0XF3,0XFF,0XDF,0XE7,0XEF,0X1D,0XFF,0XFF,0XFF,0XFF,0X89,0XFF,
0XFF,0XFF,0XFD,0XFF,0XF9,0XFF,0XDF,0XE7,0XCE,0X3C,0XFF,0XFF,0XFF,0XFF,0XCD,0XFF,
0XFF,0XFF,0XF9,0XFF,0XFD,0XFF,0XDF,0XE7,0XDC,0XFC,0XFF,0XFF,0XFF,0XFF,0XC4,0XFF,
0XFF,0XFF,0X03,0XFF,0XFE,0XFF,0X9F,0XE7,0XDD,0XFC,0XFF,0XFF,0XFF,0XFF,0XE4,0XFF,
0XFF,0XFE,0X7F,0XFF,0XFE,0XFF,0X9F,0XE7,0XDD,0XFC,0XFF,0XFF,0XFF,0XFF,0XE4,0XFF,
0XFF,0XFC,0XFF,0XFF,0XFE,0XFF,0X9F,0XEF,0XDD,0XEC,0XFF,0XFF,0XFF,0XFF,0XF2,0XFF,
0XFF,0XFD,0XFF,0XFF,0XFE,0XFF,0X9F,0XEF,0X9B,0XCE,0XFF,0XFF,0XFF,0XFF,0XF0,0XFF,
0XFF,0XF9,0XFF,0XFF,0XFD,0XFF,0XBF,0XEF,0XBB,0XDE,0XFF,0XFF,0XFF,0XFF,0XF0,0XFF,
0XFF,0XFB,0XFF,0XFF,0XF8,0XFF,0XBF,0XEF,0XBB,0XBC,0XFF,0XFF,0XFF,0XFF,0XF8,0XFF,
0XFF,0XFB,0XFF,0XFF,0XFA,0X3F,0XBF,0XEF,0XBB,0XFE,0XFF,0XFF,0XFF,0XFF,0XF8,0XFF,
0XFF,0XF3,0XFF,0XFF,0XFF,0X9F,0XBF,0XEF,0XBB,0XBE,0XFF,0XFF,0XFF,0XFF,0XF8,0XFF,
0XFF,0XF7,0XFF,0XFF,0XFF,0XDF,0XBF,0XEF,0XBB,0XBE,0XFF,0XFF,0XFF,0XFF,0XF8,0XFF,
0XFF,0XF7,0XFF,0XFF,0XFF,0XCF,0XBF,0XEF,0XB3,0XBE,0XFF,0XFF,0XFF,0XFF,0XF8,0XFF,
0XFF,0XF7,0XFF,0XFF,0XFF,0XCF,0XBF,0XEF,0XB3,0XBE,0XFF,0XFF,0XFF,0XFF,0XF8,0XFF,
0XFF,0XE7,0XFF,0XFF,0XFF,0XCF,0XBF,0XEF,0XB3,0XFE,0XFF,0XFF,0XFF,0XFF,0XF8,0XFF,
0XFF,0XF7,0XFF,0XFF,0XFF,0XDF,0XBF,0XEF,0XB3,0XFE,0XFF,0XFF,0XFF,0XFF,0XF8,0XFF,
0XFF,0XF7,0XFF,0XFF,0XFF,0XDF,0XBF,0XEF,0XB3,0XFE,0XFF,0XFF,0XFF,0XFF,0XFC,0XFF,
0XFF,0XF3,0XFF,0XFF,0XFF,0X9F,0XBF,0XEF,0XB3,0XFE,0XFF,0XFF,0XFF,0XFF,0XFC,0XFF,
0XFF,0XFB,0XFF,0XFF,0XFF,0XBF,0XBF,0XEF,0XB3,0XFE,0XFF,0XFF,0XFF,0XFF,0XFC,0XFF,
0XFF,0XF9,0XFF,0XFD,0XFE,0X7F,0X3F,0XEF,0XB3,0XFE,0XFF,0XFF,0XFF,0XFF,0XFC,0XFF,
0XFF,0XFE,0X7F,0XF8,0X78,0XFF,0X3F,0XEF,0XBB,0XFE,0XFF,0XFF,0XFF,0XFF,0XFC,0XFF,
0XFF,0XFF,0X7F,0XFB,0X03,0XFF,0X3F,0XEF,0XBB,0XFE,0XFF,0XFF,0XFF,0XFF,0XF8,0XFF,
0XFF,0XFF,0X3F,0XF3,0XFF,0XFF,0XBF,0XEF,0XBB,0XFE,0XFF,0XFF,0XFF,0XFF,0XF8,0XFF,
0XFF,0XFF,0X9F,0XE7,0XFF,0XFF,0XBF,0XEF,0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0XFF,
0XFF,0XFF,0XCF,0XCF,0XFF,0XFF,0XBF,0XEF,0XB9,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0XFF,
0XFF,0XFF,0XE0,0X1F,0XFF,0XFF,0XBF,0XEF,0X99,0XFE,0XFF,0XFF,0XFF,0XFF,0XF8,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XBF,0XEF,0XB9,0XF6,0XFF,0XFF,0XFF,0XFF,0XF8,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XBF,0XEF,0X9D,0XF6,0XFF,0XFF,0XFF,0XFF,0XF9,0XFF,
0XFF,0X03,0XFF,0XFF,0XFF,0XFF,0XBF,0XEF,0X9D,0XF6,0XFF,0XFF,0XFF,0XFF,0XF8,0XFF,
0XFE,0XF8,0XFF,0XFF,0XFF,0XFF,0XBF,0XE7,0XDD,0XF6,0XFF,0XFF,0XFF,0XFF,0XF8,0XFF,
0XFD,0XFE,0X7F,0XFF,0XFF,0XFF,0XBF,0XE7,0XDD,0XD6,0XFF,0XFF,0XFF,0XFF,0XF1,0XFF,
0XC9,0XFF,0X3F,0XFF,0XFF,0XFF,0XBF,0XE7,0XDE,0XE6,0XFF,0XFF,0XFF,0XFF,0XF1,0XFF,
0X13,0XFF,0X9F,0XFF,0XFF,0XFF,0X9F,0XE7,0XDE,0XFE,0XFF,0XFF,0XFF,0XFF,0XF7,0XFF,
0X7B,0XFF,0XCF,0XFF,0XFF,0XFF,0X9F,0XF7,0XDE,0XFE,0XFF,0XFF,0XFF,0XFF,0XE5,0XFF,
0XFF,0XFF,0XEF,0XFF,0XF4,0XC3,0XDF,0XF7,0XDF,0X7E,0XFF,0XFF,0XFF,0XFF,0XE5,0XFF,
0XFF,0XFF,0XEF,0XFF,0XEF,0X3B,0XDF,0XF7,0XDF,0XFC,0XFF,0XFF,0XFF,0XFF,0XE5,0XFF,
0XFF,0XFF,0XF7,0XFF,0XDF,0XFD,0XDF,0XF7,0XEF,0XFD,0XFF,0XFF,0XFF,0XFF,0XCD,0XFF,
0XFF,0XFF,0XF7,0XFF,0XDF,0XFC,0XDF,0XF3,0XFF,0XFD,0XFF,0XFF,0XFF,0XFF,0X4D,0XFF,
0XFF,0XFF,0XF3,0XFF,0X9F,0XFE,0XCF,0XF3,0XEF,0XFD,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,
0XFF,0XFF,0XF9,0XFF,0XDF,0XFE,0XCF,0XFB,0XEF,0XFD,0XFF,0XFF,0XFF,0XFF,0X3B,0XFF,
0XFF,0XFF,0XFC,0XFF,0XDF,0XFE,0X6F,0XFB,0XFF,0XFD,0XFF,0XFF,0XFF,0XFA,0X3B,0XFF,
0XFF,0XFF,0XFE,0X7F,0XEF,0XFF,0X6F,0XF9,0XFF,0XFD,0XFF,0XFF,0XFF,0XFE,0X7B,0XFF,
0XFF,0XFF,0XFF,0X7F,0XFF,0XFF,0X67,0XFD,0XFF,0XFD,0XFF,0XFF,0XFF,0XF0,0XF3,0XFF,
0X7F,0XFF,0XFF,0X7F,0XF3,0XFF,0X67,0XFD,0XFF,0XFD,0XFF,0XFF,0XFB,0XE6,0X43,0XFF,
0X7F,0XFF,0XFE,0X7F,0XFD,0XFF,0X77,0XFD,0XFF,0XFD,0XFF,0XFF,0XFB,0X0F,0X07,0XFF,
0X3F,0XFF,0XFE,0XFF,0XFD,0XFF,0X77,0XFC,0XFF,0XF9,0XFF,0XFF,0XFA,0X3F,0X07,0XFF,
0X9F,0XFF,0XE1,0XFF,0XFE,0XFE,0XF3,0XFE,0XFF,0XF9,0XFF,0XFF,0XFC,0XFF,0XDF,0XFF,
0XCF,0XFF,0XE3,0XFF,0XFE,0X7E,0XFB,0XFE,0XFF,0XFB,0XFF,0XFF,0XF1,0XFF,0XFF,0XFF,
0XEF,0XFF,0XF7,0XFF,0XFF,0X3D,0XFB,0XFF,0X7F,0XFB,0XFF,0XFF,0XD3,0XFF,0XFF,0XFF,
0XCF,0XFF,0XF7,0XFF,0XFF,0XCB,0XF9,0XFF,0X7F,0XFB,0XFF,0XFF,0X71,0XFF,0XFF,0XFF,
0XDF,0XFF,0XEF,0XFF,0XFF,0XFF,0XFD,0XFF,0XBF,0XFB,0XFF,0XFF,0XCD,0XFF,0XFF,0XFF,
0XDF,0XFF,0XEF,0XFF,0XFF,0XFF,0XFC,0XFF,0XBF,0XF3,0XFF,0X7F,0XCD,0XFF,0XFF,0XFF,
0XDF,0XFF,0XDF,0XFF,0XFF,0XFF,0XFE,0XFF,0XDF,0XF3,0XFF,0X7B,0X9D,0XFF,0XFF,0XFF,
0XDF,0XFF,0X3F,0XFF,0XFF,0XFF,0XFE,0X7F,0XCF,0XF3,0XFF,0X7B,0X3C,0XFF,0XFF,0XFF,
0XDF,0XFE,0X7F,0XFF,0XFF,0XFF,0XFF,0X7F,0XEF,0XF7,0XFF,0X5A,0X7E,0XFF,0XFF,0XFF,
0XEF,0XFC,0XFF,0XFF,0XFF,0XFF,0XFF,0X3F,0XF7,0XF7,0XFF,0X5C,0XFE,0XFF,0XFF,0XFF,
0XF7,0XFB,0XFF,0XFF,0XFF,0XFF,0XFF,0XBF,0XF3,0XE5,0XFE,0XD1,0XFE,0XFF,0XFF,0XFF,
0XF0,0XC7,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFD,0XED,0XF6,0XB3,0XFE,0XFF,0XFF,0XFF,
0XFC,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XDF,0XFF,0XED,0XF5,0XE7,0XFE,0X7F,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XEF,0XFF,0XEB,0X6D,0X1F,0XFF,0X7F,0XFF,0XFE,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE7,0XFF,0XDB,0X6B,0X3F,0XFF,0X7F,0XFF,0XFE,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF3,0XFF,0X96,0XD8,0XFF,0XFF,0X3F,0XFF,0XFE,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0XFF,0X36,0XF3,0XFF,0XFF,0XBF,0XFF,0XFE,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X04,0X6F,0X9F,0XFF,0XFF,0XBF,0XFF,0XFC,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X01,0XD8,0XFF,0XFF,0XFF,0XBF,0XFF,0XFC,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X81,0X3F,0XFF,0XFF,0XFF,0XDF,0XFF,0XFD,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XDF,0XFF,0XF9,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFB,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XEF,0XFF,0XF3,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE7,0XFF,0XF7,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF3,0XFF,0XE7,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFB,0XFF,0XCF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF9,0XFF,0XCF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0XFF,0X1F,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X3E,0X3F,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE3,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF])

创键新的test2.py文件

from machine import Pin, SPI, RTC
import newframebuf
import framebuf
import time
import epaper
import ntptime
import network# 记录上次矩形的左上角
last_rect_x = 0
last_rect_y = 0
# 记录上次显示的所有数字左上角
last_number_x_y = []def get_week_with_data(y,m,d):'''根据年月日计算星期几'''y = y - 1 if m == 1 or m == 2 else ym = 13 if m == 1 else (14 if m == 2 else m)w = (d + 2 * m + 3 * (m + 1) // 5 + y + y // 4 - y // 100 + y // 400) % 7 + 1return wdef is_leap_year(y):if y%400==0 or (y%4==0 and y%100!=0):return Truereturn  Falsedef get_days_in_month(y,m):if m in [1, 3, 5, 7, 8, 10, 12]:return 31elif m in [4, 6, 9, 11]:return 30else:return 29 if is_leap_year(y) else 28def connect_wifi(wifi, password):wlan = network.WLAN(network.STA_IF)wlan.active(True)if not wlan.isconnected():wlan.connect(wifi, password)def ntp():# 链接互联网connect_wifi("名字", "密码")  # WIFI名字密码time.sleep(2)ntptime.host="ntp1.aliyun.com"ntptime.NTP_DELTA = 3155644800  # 东八区 UTC+8偏移时间(秒)try:ntptime.settime()print("联网成功...")except Exception as e:passdef show_text(year, month, day):global last_rect_x, last_rect_y, last_number_x_y# 清空上次显示的数字for content, x, y in last_number_x_y:fb.text(content, x, y, white)# 清空列表last_number_x_y = []# 1.提示用户输入年月year = yearmouth = month# 2.计算这个月有多少天days = get_days_in_month(year, mouth)# 3.按照指定格式显示日期print('一 二 三 四 五 六 日')fb.text(' Mon Tus Wed Thu Fri Sat Sun', 0, 15, black)content = '-' * 30print(content)# fb.text(content, 0, 30, black)fb.hline(0, 30, 180, black)content = ""row = 3today_row = 0today_col = 0for i in range(1, days + 1):w = get_week_with_data(year, mouth, i)if i == 1:content = content + '    ' * (w-1)# print(content, end="*")else:if w == 1:print(content)fb.text(content, 0, row * 15 - 5, black)last_number_x_y.append([content, 0, row * 15 - 5])row += 1content = ""content = content + f"  {i:2d}"if i == day:today_row = rowtoday_col = wif content:print(content)fb.text(content, 0, row * 15 - 5, black)last_number_x_y.append([content, 0, row * 15 - 5])rect_x = (today_col - 1) * 24 + 5rect_y = today_row * 15 - 8if last_rect_x != 0 and last_rect_y != 0:print("last_rect_x=%d, last_rect_y=%d" % (last_rect_x, last_rect_y))fb.rect(last_rect_x, last_rect_y, 22, 14, white)last_rect_x, last_rect_y = rect_x, rect_yfb.rect(rect_x, rect_y,  22, 14, black)# fb.text('hello World', 0, 0, black, size=2)e.display_frame(buf)  # 刷新显示if __name__ == "__main__":# 1. 创建对应的引脚miso = Pin(19)mosi = Pin(23)sck = Pin(18)cs = Pin(33)dc = Pin(32)rst = Pin(19)busy = Pin(35)spi = SPI(2, baudrate=10000000, polarity=0, phase=0, sck=sck, miso=miso, mosi=mosi)# 2. 创建墨水屏驱动对象e = epaper.EPD(spi, cs, dc, rst, busy)e.init()# 3. 导入需要的背景图from image_array import image_array# 4. 定义要显示的内容宽度高度w = 296h = 128# 注意:实际的图片多大这里就写多大buf = image_array# buf = bytearray(w * h // 8)  # 296 * 128 // 8 = 4736 空白black = 0white = 1# 5. 以背景图为基础创建缓存区fb = newframebuf.FrameBuffer(buf, h, w, newframebuf.MHMSB)# fb.fill(white)  # 清空内容fb.rotation = 3  # 调整显示的方向,可以在0/1/2/3之间选择# 6. 联网 便于获取互联网时间rtc = RTC()ntp()# 7. 显示文字date = rtc.datetime()show_text(date[0], date[1], date[2])  # 年月日

演示效果

八、资料下载

本文代码,图片,工具比较多,我一起打包放在了下面链接:
链接: https://pan.baidu.com/s/1hvjEXYPzAbvRjqcZ1epEKA 提取码: 2rvi 复制这段内容后打开百度网盘手机App,操作更方便哦

五、购买

某宝链接如下:

https://item.taobao.com/item.htm?spm=a1z09.2.0.0.5ca42e8doe2jPd&id=627397618004&_u=9p01rch2819

2.9寸墨水屏资料链接:https://pan.baidu.com/s/1IZYnwmiBnMc2tnWwtxhslQ 
提取码:8888

物联网开发笔记(58)- 使用Micropython开发ESP32开发板之控制2.90寸电子墨水屏模块黑白套件相关推荐

  1. MLX90640开发笔记(一)概述及开发资料准备

    现在自己在做红外成像仪的越来越多了,两年前有个井下机电设备运行状态的科研项目,当时使用了AMG8833(8*8像素).前段时间因为公司生产电路板测试需要,打算买一台红外成像仪测量电路板发热是否正常,商 ...

  2. 物联网开发笔记(9)- 使用Wokwi仿真MicroPython on ESP32开发板实现温度和湿度检测并使用屏幕显示

    一.测试环境 我们同样使用在Wokwi网站上选择Micropython with ESP32进行仿真,来进行温度和湿度的检测. ESP32官方技术参考手册: https://www.espressif ...

  3. 基于MicroPython的ESP32开发

    很久前入手了一块ESP32 DEVKIT V1,当时基于C_SDK开发.最近想搞下MicroPython,就又把这块板子找出来了. 一.先下载支持MicroPython的ESP32固件 去MicroP ...

  4. Android开发笔记(七十一)区分开发模式和上线模式

    为什么要区分两种模式 许多开发者(包括博主在内)都是闷骚的程序员,为了开发调试方便,常常在代码里加上日志,还经常在页面上各种弹窗提示.这固然有利于发现bug.提高软件质量,但过多的调试信息往往容易泄露 ...

  5. 【Visual C++】游戏开发笔记三十一 回归季 游戏开发资料整理打包下载 专栏行文思路整理

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  6. 玩玩带ESP32的电子墨水屏模块

    之前一直对电子墨水屏很感兴趣,所以最近入手了一个墨水屏模块来玩玩,主控是ESP32,但是在上手的过程中因为有些商家资料有问题踩了很多坑. 这里记录下来希望对同样入手了的同学有所帮助吧. 电子墨水具有超 ...

  7. 云炬Android开发笔记 5-8文件下载功能设计与实现

    5.文件下载功能设计与实现 [说明]比较复杂: [增加参数] [新建downloadhandler]新建下载处理类: [使用异步的下载方法] [file工具类]没有讲解,课下编写的 1 package ...

  8. stm32f429vref怎么接_STM32开发笔记58: STM32F407特殊引脚连接电路

    单片机型号:STM32F407VGT6 本文介绍STM32F407特殊引脚连接电路,见下图: 引脚:49.73 VCAP_1和VCAP_2,按照下列电路设计方法进行设计.这里应该着重看最后1句话,其表 ...

  9. Modbus协议栈开发笔记之六:Modbus RTU Master开发

    这一节我们来封装最后一种应用(Modbus RTU Master应用),RTU主站的开发与TCP客户端的开发是一致的.同样的我们也不是做具体的应用,而是实现RTU主站的基本功能.我们将RTU主站的功能 ...

最新文章

  1. [9.28模拟] good
  2. 数据类型的sizeof
  3. 【学习方法】学习心法总结之——如何平稳得开启数据之路
  4. Weka学习二(聚类算法)
  5. linux 提取ko文件,Linux获取so/ko文件版本号教程
  6. Linux系统下各文件目录的含义 入门
  7. 虚拟机中的Linux安装VMware Tools的方法
  8. 52次课(mysql用户管理、常用sql语句、 mysql数据库备份恢复)
  9. 前端工业物联网开发(Electron + Typescript + Vue)
  10. python花括号代替缩进_Python 为什么甩掉累赘的花括号,使用缩进来划分代码块?...
  11. 华为手机显示解析服务器返回错误,ajax服务器返回错误
  12. Timer源码之TaskQueue
  13. 自律selfdiscipline
  14. 重装的电脑360打补丁都是智能忽略
  15. html整体框架的大小,html如何动态改变框架的大小
  16. HPC高性能计算知识: HPDA新兴技术分析(附下载)
  17. 互联网“晒娃”安全须知
  18. 基于springboot框架开发的作业提交与批改系统
  19. android手机连接电脑,安卓手机连接电脑的方法
  20. 苦追12年从第六备胎逆袭成功的IT男的故事

热门文章

  1. 【广告系列一】广告相关名词 CTR/CVR/eCPM...
  2. 惠普打印机2132故障灯大全图解_绝对干货!二手打印机选购攻略!
  3. sap 新增科目表_SAP系统中四大科目表的总结
  4. HTML5触摸事件(多点、单点触控)
  5. 如何使用JWT进行身份验证与授权
  6. 如何做好开发组长工作
  7. Python 爬取微博、百度实时热点
  8. 解决U盘制作Ubuntu系统安装盘后无法格式化且容量无法恢复
  9. Android弹性滑动在自定义View中的高级应用
  10. 到底什么是工业互联网?