5.35 综合案例2.0 -称重数据上传云端

最新案例教程点击下方链接跳转,CSDN已停止更新

点击跳转HaaS506官方最新案例







效果展示

python写的4G云电子秤案例,附源码教程

案例说明

使用hx711串口模块称重,结合IOT studio制作手机APP远程控制并采集物体重量。

  • 模块购买链接:
  • hx711串口模块用多种使用模式,这里只使用方式1,指令0xA1。
  • 使用流程
    • 手机APP界面如下在这里插入图片描述
    • 1,用于显示物体重量
    • 2,用于矫正称重的精准度物体重量计算公式:实际重量=传感器数据/K; // K 是一个系数,通过调节K值调节称的精准度。
    • 3,去皮是去掉装物品的篮子之类的容器的重量,可以准确称出称量物的实际重量。先按去皮按钮,重量显示为零,再把要秤的物品放进容器里,显示的就是物品的实际重量了。
    • 4,称重,在模式1下,每次按下称重才会将当前物体的重量显示在APP或OLED屏幕上.
    • 5,进行模式切换,模式一的情况下每次按下称重才会显示当前重量。模式二的情况下当称上物体重量发生变化就会显示数据,每秒显示一次。

请添加图片描述

连线

hx711安装焊接参考使用说明
在这里插入图片描述

hx711模块需要使用5v供电,注意vcc连线
在这里插入图片描述

功能实现

1.阿里云平台连接

阿里云环境创建参考高级组件库-aliyunIoT进行搭建。
创建产品,添加产品后添加物模型。
在这里插入图片描述

代码

在这里插入图片描述
main.py

import utime as time
from driver import UART
from driver import GPIO
from ssd1306 import SSD1306_128_64
import aliyun
import hx711
from driver import TIMER

#A通道指令:模式1发送一直指令获取一次重量/模式2每隔1000ms获取一次物体重量
MODEL1_PASSIVITY_A  = b'\xA1'


disp=SSD1306_128_64()
#实例化key1
key1=GPIO(10,10)
key1.open("KEY1")

# 初始化oled
disp.begin()
disp.clear()    #清屏 
readBuf=bytearray(10)
weight_state=False
modle=1
maopi_on=False
GapValue=430
key=False
Weight_Shiwu=0

def modle1():
    global Weight_Shiwu,weight_state,GapValue
    disp.oled_showStr(110,0,'1',2)
    if weight_state:
        Weight_Shiwu=get_weight()
        disp.oled_showStr(85,0,'md:',2)
        disp.oled_showStr(110,0,'1',2)
        disp.oled_showStr(50,3,'            ',2)
        disp.oled_showStr(50,5,'            ',2)
        disp.oled_showStr(0,3,'Weight:',2)
        disp.oled_showStr(50,3,str(Weight_Shiwu),2)
        aliyun.update("weight",Weight_Shiwu)
        weight_state=False
        aliyun.re_weight_state(0)


Weight_Shiwu_2=0
def modle2(args):
    global Weight_Shiwu,Weight_Shiwu_2,modle
    if (modle ==2):
        Weight_Shiwu=get_weight()
        if Weight_Shiwu_2!=Weight_Shiwu:
            disp.oled_showStr(85,0,'md:',2)
            disp.oled_showStr(110,0,'2',2)
            disp.oled_showStr(50,3,'            ',2)
            disp.oled_showStr(50,5,'            ',2)
            disp.oled_showStr(0,3,'Weight:',2)
            disp.oled_showStr(50,3,str(Weight_Shiwu),2)
            aliyun.update("weight",Weight_Shiwu)
            Weight_Shiwu_2=Weight_Shiwu



timer = TIMER(0)
timer.open(period=1000, mode=TIMER.PERIODIC, callback=modle2)


#中断回调函数
def key1_callback(args):
    global weight_state
    time.sleep(1)
    weight_state=True
    key1.disableIrq()
    key1.clearIrq()

def enable_key():
    #开启中断
    key1.enableIrq(key1_callback)

Weight_Maopi=0
def Get_Maopi():
    global Weight_Maopi
    Weight_Maopi =hx711.hx711_read()
    print('Weight_Maopi',Weight_Maopi)


def get_weight():
    global Weight_Maopi,GapValue
    Weight_1 = hx711.hx711_read()
    Weight_1= Weight_Maopi-Weight_1
    if Weight_1>=0:
        i=1
        Weight_1=round((float(Weight_1)/GapValue),1)
        print('Weight_1:',i*Weight_1)
    else:
        i=-1
        Weight_1=0-Weight_1
        Weight_1=round((float(Weight_1)/GapValue),1)
        print('Weight_1:',i*Weight_1)
    return i*Weight_1


def main():
    global weight_state,GapValue,modle,maopi_on,Weight_Shiwu,Weight_Maopi
    #等待阿里云连接
    aliyun.connect()
    while  not aliyun.get_connect_state():
        time.sleep_ms(10)

    
    hx711.writechar(MODEL1_PASSIVITY_A)     #默认模式1
    time.sleep_ms(200)
    Get_Maopi()
    time.sleep_ms(200)
    Get_Maopi()
    Weight_Shiwu=get_weight()
    aliyun.update("Maopi",maopi_on)
    aliyun.update("weight_state",weight_state)
    aliyun.update("k",GapValue)
    aliyun.update("modle",modle)
    aliyun.update("weight",Weight_Shiwu)
    #打开按键使能
    enable_key()
    disp.oled_showStr(85,0,'md:',2)
    disp.oled_showStr(110,0,'1',2)
    disp.oled_showStr(50,3,'            ',2)
    disp.oled_showStr(50,5,'            ',2)
    disp.oled_showStr(0,3,'Weight:',2)
    disp.oled_showStr(50,3,str(Weight_Shiwu),2)

    while True:
        if maopi_on:
            Get_Maopi()
            Weight_Shiwu=get_weight()
            disp.oled_showStr(50,3,'            ',2)
            disp.oled_showStr(50,5,'            ',2)
            disp.oled_showStr(0,3,'Weight:',2)
            disp.oled_showStr(50,3,str(Weight_Shiwu),2)
            aliyun.update("weight",Weight_Shiwu)
            aliyun.re_maopi(0)
        if modle ==1:
            modle1()
        maopi_on=aliyun.get_maopi()
        weight_state=aliyun.get_weight_state()
        GapValue=aliyun.get_k()
        modle=aliyun.get_modle()
        time.sleep_ms(100)


if __name__ == '__main__':
    main()

aliyun.py

注意更改产品信息

# coding=utf-8
import network
import ujson
import utime as time
import modem
from  aliyunIoT import Device
import ota
import kv




#更改产品信息
###############################
productKey = "*******"
productSecret = "**************"
###############################
global deviceName,g_connect_status,device_dyn_resigter_succed,netw
g_connect_status = False
netw = None
device = None
deviceSecret = None
device_dyn_resigter_succed = False

#初始化物联网平台Device类,获取device实例
device = Device()
# 定义需要升级的模块和版本号
module_name = 'default'
app_version = '1.0.1'
# 定义升级包的下载和安装路径,其中url,hash_type和hash 会通过服务端推送被保存下来
info = {
        'url': '',
        'store_path': '/data/pyamp/app.zip',
        'install_path': '/data/pyamp/',
        'length': 0,
        'hash_type': '',
        'hash': ''
}

 # ota 消息推送的接受函数
def on_trigger(data):
     global info
 # 保存服务端推送的ota信息
     info['url'] = data['url']
     info['length'] = data['length']
     info['module_name'] = data['module_name']
     info['version'] = data['version']
     info['hash'] = data['hash']
     info['hash_type'] = data['hash_type']
    # 开始ota 包下载
     dl_data = {}
     dl_data['url'] = info['url']
     dl_data['store_path'] = info['store_path']
     ota.download(dl_data)



 # ota 升级包下载结果回调函数
def on_download(data):
     global info
     if data >= 0:
         print('Ota download succeed')
     # 开始ota包校验
         param = {}
         param['length'] = info['length']
         param['store_path'] = info['store_path']
         param['hash_type'] = info['hash_type']
         param['hash'] = info['hash']
         ota.verify(param)

 # ota 升级包校验结果回调函数
def on_verify(data):
      global info
      print(data)
      if data >= 0 :
          print('Ota verify succeed')
          print('Start Upgrade')
     # 开始ota升级
          param = {}
          param['length'] = info['length']
          param['store_path'] = info['store_path']
          param['install_path'] = info['install_path']
          ota.upgrade(param)

 # ota 升级包结果回调函数
def on_upgrade(data):
     if data >= 0 :
        print('Ota succeed')
        #ota升完级后 重启设备
        reboot()


connect_state = False
def get_connect_state():
    global connect_state
    return connect_state
#当iot设备连接到物联网平台的时候触发'connect' 事件
def on_connect(data):
    global module_name,default_ver,productKey,deviceName,deviceSecret,on_trigger,on_download,on_verify,on_upgrade,connect_state
    print('***** connect lp succeed****')
    data_handle = {}
    data_handle['device_handle'] = device.getDeviceHandle()
    # 初始化ota服务
    ota.init(data_handle)
    connect_state = True
    # ota 回调函数注册
    ota.on(1,on_trigger)
    ota.on(2,on_download)
    ota.on(3,on_verify)
    ota.on(4,on_upgrade)
    report_info = {
         "device_handle": data_handle['device_handle'],
         "product_key": productKey ,
         "device_name": deviceName ,
         "module_name": module_name ,
         "version": app_version
         }
    # 上报本机ota相关信息,上报版本信息返回以后程序返回,知道后台推送ota升级包,才会调用on_trigger函数
    ota.report(report_info)   


def re_maopi(ret):
    global Maopi
    Maopi = ret
    update('Maopi',Maopi)


def re_weight_state(ret):
    global weight_state
    weight_state = ret
    update('weight_state',weight_state)

Maopi=False
def get_maopi():
    global Maopi
    return Maopi

weight_state=False
def get_weight_state():
    global weight_state
    return weight_state

k=430
def get_k():
    global k
    return k

modle=1
def get_modle():
    global modle
    return modle

#当iot云端下发属性设置时,触发'props'事件
def on_props(request):
    global Maopi,weight_state,k,modle
    print('clound req data is {}'.format(request))
    # # # #获取消息中的params数据
    params=request['params']
    # #去除字符串的'',得到字典数据
    params=eval(params)

    if "Maopi" in params :
        Maopi = params["Maopi"]
    if "weight_state" in params :
        weight_state = params["weight_state"]    
    if "k" in params :
        k = params["k"]
    if "modle" in params :
        modle = params["modle"]

#当连接断开时,触发'disconnect'事件
def on_disconnect():
    print('linkkit is disconnected')


#当iot云端调用设备service时,触发'service'事件
def on_service(id,request):
    print('clound req id  is {} , req is {}'.format(id,request))
#当设备跟iot平台通信过程中遇到错误时,触发'error'事件
def on_error(err):
    print('err msg is {} '.format(err))

#网络连接的回调函数
def on_4g_cb(args):
    global g_connect_status
    pdp = args[0]
    netwk_sta = args[1]
    if netwk_sta == 1:
        g_connect_status = True

    else:
        g_connect_status = False


#网络连接
def connect_network():
    global netw,on_4g_cb,g_connect_status
    #NetWorkClient该类是一个单例类,实现网络管理相关的功能,包括初始化,联网,状态信息等.
    netw = network.NetWorkClient()
    g_register_network = False
    if netw._stagecode is not None and netw._stagecode == 3 and netw._subcode == 1:
        g_register_network = True
    else:
        g_register_network = False
    if g_register_network:
    #注册网络连接的回调函数on(self,id,func);  1代表连接,func 回调函数  ;return 0 成功
        netw.on(1,on_4g_cb)
        netw.connect(None)
    else:
        print('网络注册失败')
    while True:
        if g_connect_status:
            print('网络连接成功')
            break
        time.sleep_ms(20)


#动态注册回调函数
def on_dynreg_cb(data):
    global deviceSecret,device_dyn_resigter_succed
    deviceSecret = data
    device_dyn_resigter_succed = True

# 连接物联网平台
def dyn_register_device(productKey,productSecret,deviceName):
    global on_dynreg_cb,device,deviceSecret,device_dyn_resigter_succed

    key = '_amp_customer_devicesecret'
    deviceSecretdict = kv.get(key)
    print("deviceSecretdict:",deviceSecretdict)
    if isinstance(deviceSecretdict,str):    
        deviceSecret = deviceSecretdict 

    if deviceSecretdict is None or deviceSecret is None:
        key_info = {
            'productKey': productKey  ,
            'productSecret': productSecret ,
            'deviceName': deviceName
            }
        # 动态注册一个设备,获取设备的deviceSecret
        #下面的if防止多次注册,当前若是注册过一次了,重启设备再次注册就会卡住,
        if not device_dyn_resigter_succed:
            device.register(key_info,on_dynreg_cb)  

def connect():
    global deviceName,g_connect_status,device_dyn_resigter_succed
    deviceName = None
     # 获取设备的IMEI 作为deviceName 进行动态注册
    deviceName = modem.info.getDevImei()
    # 连接网络
    connect_network()
    if deviceName is not None and len(deviceName) > 0 :
        #动态注册一个设备
        dyn_register_device(productKey,productSecret,deviceName)
    else:
        print("获取设备IMEI失败,无法进行动态注册")
    while deviceSecret is None:
        time.sleep(0.2)
    print('动态注册成功:' + deviceSecret)
    key_info = {
        'region' : 'cn-shanghai' ,
        'productKey': productKey ,
        'deviceName': deviceName ,
        'deviceSecret': deviceSecret ,
        'keepaliveSec': 60,
        }
    #打印设备信息
    print(key_info)
    #device.ON_CONNECT 是事件,on_connect是事件处理函数/回调函数
    device.on(device.ON_CONNECT,on_connect)
    device.on(device.ON_DISCONNECT,on_disconnect)
    device.on(device.ON_PROPS,on_props)
    device.on(device.ON_SERVICE,on_service)
    device.on(device.ON_ERROR,on_error)
    device.connect(key_info)



def update(key,value):
    global device
    post_data_str=ujson.dumps({key:value})
    data={
        "params":post_data_str
    }
    device.postProps(data)


hx711.py

'''
A通道采集数据增益128倍,精度更高.B通道增益只有32倍
波特率9600bps,无校验位,停止位1,返回数据10字节.
串口模块只需发送对应指令即可控制HX711.
工作方式1只读取数据,需要自己计算重量
工作方式2需要校准,调整系数k
案例使用工作方式1,
'''
from driver import UART
import utime as time

#A通道指令:模式1发送一直指令获取一次重量/模式2每隔100ms获取一次物体重量
MODEL1_PASSIVITY_A  = b'\xA1'
# MODEL1_INITIATIVE_A = b'\xA2'
# MODEL2_PASSIVITY_A  = b'\xA3'
# MODEL2_INITIATIVE_A = b'\xA4'
# RECTIFY_A = b'\xA5'
# QUPI_A = b'\xAA'
# ADD_A = b'\xAB'
# SUBTRACT_A = b'\xA5'
# K_430 = b'\xA6'
# K_210 = b'\xA7'
# K_106 = b'\xA8'
# K_26 = b'\xA9'

# #B通道指令
# MODEL1_PASSIVITY_B  = b'\xB1'
# MODEL1_INITIATIVE_B = b'\xB2'
# MODEL2_PASSIVITY_B  = b'\xB3'
# MODEL2_INITIATIVE_B = b'\xB4'
# RECTIFY_B = b'\xB5'
# QUPI_B = b'\xBA'


#串口实例化
uart0=UART()
uart0.open("serial1")

def writechar(char):
    uart0.write(bytearray(char))

def hx711_read():
    writechar(MODEL1_PASSIVITY_A)
    readBuf=bytearray(10)
    ret = uart0.read(readBuf)
    #print(readBuf)
    if ret>0:
        if (readBuf[0]==0XAA and readBuf[9]==0XFF):
            if((readBuf[7]*256+readBuf[8])==(readBuf[1]+readBuf[2]+readBuf[3]+readBuf[4]+readBuf[5]+readBuf[6])):
                Weight=readBuf[4]*65536+readBuf[5]*256+readBuf[6]
                print('getWeight',Weight)  
                return Weight
        else:
            print('get data false')
    else :
        return 0


OLED显示屏代码
ssd1306.py


import utime as time
import codetab

# Constants
SSD1306_I2C_ADDRESS = 0x3C    # 011110+SA0+RW - 0x3C or 0x3D
SSD1306_SETCONTRAST = 0x81
SSD1306_DISPLAYALLON_RESUME = 0xA4
SSD1306_DISPLAYALLON = 0xA5
SSD1306_NORMALDISPLAY = 0xA6
SSD1306_INVERTDISPLAY = 0xA7
SSD1306_DISPLAYOFF = 0xAE
SSD1306_DISPLAYON = 0xAF
SSD1306_SETDISPLAYOFFSET = 0xD3
SSD1306_SETCOMPINS = 0xDA
SSD1306_SETVCOMDETECT = 0xDB
SSD1306_SETDISPLAYCLOCKDIV = 0xD5
SSD1306_SETPRECHARGE = 0xD9
SSD1306_SETMULTIPLEX = 0xA8
SSD1306_SETLOWCOLUMN = 0x00
SSD1306_SETHIGHCOLUMN = 0x10
SSD1306_SETSTARTLINE = 0x40
SSD1306_MEMORYMODE = 0x20
SSD1306_COLUMNADDR = 0x21
SSD1306_PAGEADDR = 0x22
SSD1306_COMSCANINC = 0xC0
SSD1306_COMSCANDEC = 0xC8
SSD1306_SEGREMAP = 0xA0
SSD1306_CHARGEPUMP = 0x8D
SSD1306_EXTERNALVCC = 0x1
SSD1306_SWITCHCAPVCC = 0x2

# Scrolling constants
SSD1306_ACTIVATE_SCROLL = 0x2F
SSD1306_DEACTIVATE_SCROLL = 0x2E
SSD1306_SET_VERTICAL_SCROLL_AREA = 0xA3
SSD1306_RIGHT_HORIZONTAL_SCROLL = 0x26
SSD1306_LEFT_HORIZONTAL_SCROLL = 0x27
SSD1306_VERTICAL_AND_RIGHT_HORIZONTAL_SCROLL = 0x29
SSD1306_VERTICAL_AND_LEFT_HORIZONTAL_SCROLL = 0x2A


class SSD1306Base(object):
    def __init__(self, width, height):
        self.width = width
        self.height = height
        self._pages = height//8
        self._buffer = [0]*(width*self._pages)
        # Handle hardware I2C
        from driver import I2C
        self._i2c=I2C()
        self._i2c.open('OLED')


    def _initialize(self):
        raise NotImplementedError

    def writeCmd(self, command):
        """Send command byte to display."""
        # I2C write.
        control = 0x00   # Co = 0, DC = 0
        # writeBuf=bytearray(2)
        # writeBuf[0]=control
        # writeBuf[1]=command
        # self._i2c.write(writeBuf)

        writeBuf=bytearray(1)
        writeBuf[0]=command
        self._i2c.memWrite(writeBuf,control,8)


    def writeDat(self, data):
        """Send byte of data to display."""
        # I2C write.
        control = 0x40   # Co = 0, DC = 0
        # writeBuf=bytearray(2)
        # writeBuf[0]=control
        # writeBuf[1]=data
        # self._i2c.write(writeBuf)

        writeBuf=bytearray(1)
        writeBuf[0]=data
        self._i2c.memWrite(writeBuf,control,8)

    def begin(self, vccstate=SSD1306_SWITCHCAPVCC):
        """Initialize display."""
        # Save vcc state.
        self._vccstate = vccstate
        # Reset and initialize display.
        # self.reset()
        self._initialize()
        # Turn on the display.
        self.writeCmd(SSD1306_DISPLAYON)

# --------------------------------------------------------------
#  Prototype      : oled_fill(fill_data)
#  Parameters     : fill_data,范围0x00-0xff
#  Description    : 全屏填充,例如 0x00-全黑,0xff全亮
# --------------------------------------------------------------
    def oled_fill(self,fill_data):
        for i in range(8):
            #page0-page1
            self.writeCmd(0xb0+i)
            # low colum start address
            self.writeCmd(0x00)
            #high colum start address
            self.writeCmd(0x10)
        for i in range(128*64):
            self.writeDat(fill_data)  
      
# --------------------------------------------------------------
#  Prototype      : clear()
#  Parameters     : none
#  Description    : 全黑
# --------------------------------------------------------------
    def clear(self):
        self.oled_fill(0x00)



# --------------------------------------------------------------
#  Prototype      : oled_setPos(x,y)
#  Parameters     : x,y -- 起始点坐标(x:0~127, y:0~7)
#  Description    : 设置起始坐标
# --------------------------------------------------------------
    def oled_setPos(self,x,y):
        self.writeCmd(0xb0+y)
        self.writeCmd(((x&0xf0)>>4)|0x10)
        self.writeCmd((x&0x0f)|0x01)

# --------------------------------------------------------------
#  Prototype      : oled_showCN(x,y,n)
#  Parameters     : x,y -- 起始点坐标(x:0~127, y:0~7); N:汉字在codetab.h中的索引
#  Description    : 显示codetab.py中的汉字,16*16点阵
# --------------------------------------------------------------
    def oled_showCN(self,x,y,n):
        self.oled_setPos(x,y)
        adder=32*n
        for i in range(16):
            self.writeDat(codetab.F1[adder])
            adder+=1
        self.oled_setPos(x,y+1)
        for i in range(16):
            self.writeDat(codetab.F1[adder])
            adder+=1

# --------------------------------------------------------------
#  Prototype      : oled_showStr(x,y,ch,TextSize)
#  Parameters     : x,y -- 起始点坐标(x:0~127, y:0~7); ch[] -- 要显示的字符串; TextSize -- 字符大小(1:6*8 ; 2:8*16)
#  Description    : 显示codetab.py中的ASCII字符,有6*8和8*16可选择
# --------------------------------------------------------------    

    def oled_showStr(self,x,y,ch,TextSize):
        c=0
        j=0
        if TextSize==1:
            while ch[j]!='\0':
                #ord()将字符转换成十进制,如'a'->97
                c=ord(ch[j])-32
                if x>126:
                    x=0
                    y+=1
                self.oled_setPos(x,y)
                for i in range(6):
                    self.writeDat(codetab.F6x8[c][i]) 
                x+=6
                j+=1
                #防止index out of range 
                if j==len(ch):
                    break
        if TextSize==2:
             while ch[j]!='\0':
                #ord()将字符转换成十进制,如'a'->97
                c=ord(ch[j])-32
                if x>120:
                    x=0
                    y+=1
                self.oled_setPos(x,y)
                for i in range(8):
                    self.writeDat(codetab.F8X16[c*16+i]) 
                self.oled_setPos(x,y+1)
                for i in range(8):
                    self.writeDat(codetab.F8X16[c*16+i+8])    
                x+=8
                j+=1    
                #防止index out of range                                    
                if j==len(ch):
                    break
# --------------------------------------------------------------
# Prototype      : oled_showPicture(x0,y0,x1,y1,BMP)
# Parameters     : x0,y0 -- 起始点坐标(x0:0~127, y0:0~7); x1,y1 -- 起点对角线(结束点)的坐标(x1:1~128,y1:128)
# Description    : 显示BMP位图
# --------------------------------------------------------------
    def oled_showPicture(self,x0,y0,x1,y1,BMP):
        i=0
        if y1%8==0:
            y=y1/8
        else:
            y=y1/8+1
        for y in range(y0,y1):
            self.oled_setPos(x0,y)   
            for x in range(x0,x1):
                self.writeDat(BMP[i])  
                i+=1    
            if i==len(BMP) :
                break

# --------------------------------------------------------------
# Prototype      : set_contrast(contrast)
# Parameters     : coontrast,取值范围为0-255
# Description    : 对比度/亮度调节
# --------------------------------------------------------------    
    def set_contrast(self, contrast):
        if contrast < 0 or contrast > 255:
            raise ValueError('Contrast must be a value from 0 to 255 (inclusive).')
        self.writeCmd(SSD1306_SETCONTRAST)
        self.writeCmd(contrast)


class SSD1306_128_64(SSD1306Base):
    def __init__(self):
        super(SSD1306_128_64, self).__init__(128, 64)

    def _initialize(self):
        # 128x64 pixel specific initialization.
        self.writeCmd(SSD1306_DISPLAYOFF)                    # 0xAE
        self.writeCmd(SSD1306_SETDISPLAYCLOCKDIV)            # 0xD5
        self.writeCmd(0x80)                                  # the suggested ratio 0x80
        self.writeCmd(SSD1306_SETMULTIPLEX)                  # 0xA8
        self.writeCmd(0x3F)
        self.writeCmd(SSD1306_SETDISPLAYOFFSET)              # 0xD3
        self.writeCmd(0x0)                                   # no offset
        self.writeCmd(SSD1306_SETSTARTLINE | 0x0)            # line #0
        self.writeCmd(SSD1306_CHARGEPUMP)                    # 0x8D
        if self._vccstate == SSD1306_EXTERNALVCC:
            self.writeCmd(0x10)
        else:
            self.writeCmd(0x14)
        self.writeCmd(SSD1306_MEMORYMODE)                    # 0x20
        self.writeCmd(0x00)                                  # 0x0 act like ks0108
        self.writeCmd(SSD1306_SEGREMAP | 0x1)
        self.writeCmd(SSD1306_COMSCANDEC)
        self.writeCmd(SSD1306_SETCOMPINS)                    # 0xDA
        self.writeCmd(0x12)
        self.writeCmd(SSD1306_SETCONTRAST)                   # 0x81
        if self._vccstate == SSD1306_EXTERNALVCC:
            self.writeCmd(0x9F)
        else:
            self.writeCmd(0xCF)
        self.writeCmd(SSD1306_SETPRECHARGE)                  # 0xd9
        if self._vccstate == SSD1306_EXTERNALVCC:
            self.writeCmd(0x22)
        else:
            self.writeCmd(0xF1)
        self.writeCmd(SSD1306_SETVCOMDETECT)                 # 0xDB
        self.writeCmd(0x40)
        self.writeCmd(SSD1306_DISPLAYALLON_RESUME)           # 0xA4
        self.writeCmd(SSD1306_NORMALDISPLAY)                 # 0xA6


class SSD1306_128_32(SSD1306Base):
    def __init__(self):
        super(SSD1306_128_32, self).__init__(128, 32)

    def _initialize(self):
        self.writeCmd(SSD1306_DISPLAYOFF)                    # 0xAE
        self.writeCmd(SSD1306_SETDISPLAYCLOCKDIV)            # 0xD5
        self.writeCmd(0x80)                                  # the suggested ratio 0x80
        self.writeCmd(SSD1306_SETMULTIPLEX)                  # 0xA8
        self.writeCmd(0x1F)
        self.writeCmd(SSD1306_SETDISPLAYOFFSET)              # 0xD3
        self.writeCmd(0x0)                                   # no offset
        self.writeCmd(SSD1306_SETSTARTLINE | 0x0)            # line #0
        self.writeCmd(SSD1306_CHARGEPUMP)                    # 0x8D
        if self._vccstate == SSD1306_EXTERNALVCC:
            self.writeCmd(0x10)
        else:
            self.writeCmd(0x14)
        self.writeCmd(SSD1306_MEMORYMODE)                    # 0x20
        self.writeCmd(0x00)                                  # 0x0 act like ks0108
        self.writeCmd(SSD1306_SEGREMAP | 0x1)
        self.writeCmd(SSD1306_COMSCANDEC)
        self.writeCmd(SSD1306_SETCOMPINS)                    # 0xDA
        self.writeCmd(0x02)
        self.writeCmd(SSD1306_SETCONTRAST)                   # 0x81
        self.writeCmd(0x8F)
        self.writeCmd(SSD1306_SETPRECHARGE)                  # 0xd9
        if self._vccstate == SSD1306_EXTERNALVCC:
            self.writeCmd(0x22)
        else:
            self.writeCmd(0xF1)
        self.writeCmd(SSD1306_SETVCOMDETECT)                 # 0xDB
        self.writeCmd(0x40)
        self.writeCmd(SSD1306_DISPLAYALLON_RESUME)           # 0xA4
        self.writeCmd(SSD1306_NORMALDISPLAY)                 # 0xA6


class SSD1306_96_16(SSD1306Base):
    def __init__(self):
        super(SSD1306_96_16, self).__init__(96, 16)

    def _initialize(self):
        self.writeCmd(SSD1306_DISPLAYOFF)                    # 0xAE
        self.writeCmd(SSD1306_SETDISPLAYCLOCKDIV)            # 0xD5
        self.writeCmd(0x60)                                  # the suggested ratio 0x60
        self.writeCmd(SSD1306_SETMULTIPLEX)                  # 0xA8
        self.writeCmd(0x0F)
        self.writeCmd(SSD1306_SETDISPLAYOFFSET)              # 0xD3
        self.writeCmd(0x0)                                   # no offset
        self.writeCmd(SSD1306_SETSTARTLINE | 0x0)            # line #0
        self.writeCmd(SSD1306_CHARGEPUMP)                    # 0x8D
        if self._vccstate == SSD1306_EXTERNALVCC:
            self.writeCmd(0x10)
        else:
            self.writeCmd(0x14)
        self.writeCmd(SSD1306_MEMORYMODE)                    # 0x20
        self.writeCmd(0x00)                                  # 0x0 act like ks0108
        self.writeCmd(SSD1306_SEGREMAP | 0x1)
        self.writeCmd(SSD1306_COMSCANDEC)
        self.writeCmd(SSD1306_SETCOMPINS)                    # 0xDA
        self.writeCmd(0x02)
        self.writeCmd(SSD1306_SETCONTRAST)                   # 0x81
        self.writeCmd(0x8F)
        self.writeCmd(SSD1306_SETPRECHARGE)                  # 0xd9
        if self._vccstate == SSD1306_EXTERNALVCC:
            self.writeCmd(0x22)
        else:
            self.writeCmd(0xF1)
        self.writeCmd(SSD1306_SETVCOMDETECT)                 # 0xDB
        self.writeCmd(0x40)
        self.writeCmd(SSD1306_DISPLAYALLON_RESUME)           # 0xA4
        self.writeCmd(SSD1306_NORMALDISPLAY)                 # 0xA6


codetab.py


##*--  文字:  煜  --*#
##*--  文字:  瑛  --*#
##*--  文字:  物  --*#
##*--  文字:  联  --*#
##*--  文字:  网  --*#
##*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*#
#列表大小:10*16
F1=[
	0x80,0x70,0x00,0xFF,0x10,0x08,0x00,0x7E,0x2A,0xAA,0x2A,0x2A,0x2A,0x7E,0x00,0x00,
	0x80,0x60,0x18,0x07,0x08,0x50,0x42,0x4A,0x52,0x42,0x43,0x42,0x52,0x4A,0x42,0x00, #煜

	0x84,0x84,0xFC,0x84,0x84,0x00,0x04,0xC4,0x5F,0x44,0xF4,0x44,0x5F,0xC4,0x04,0x00,
	0x10,0x30,0x1F,0x08,0x08,0x00,0x84,0x47,0x24,0x14,0x0F,0x14,0x24,0x47,0x84,0x00, #瑛

	0x40,0x3C,0x10,0xFF,0x10,0x10,0x20,0x10,0x8F,0x78,0x08,0xF8,0x08,0xF8,0x00,0x00,
	0x02,0x06,0x02,0xFF,0x01,0x01,0x04,0x42,0x21,0x18,0x46,0x81,0x40,0x3F,0x00,0x00, #物

	0x02,0xFE,0x92,0x92,0xFE,0x02,0x00,0x10,0x11,0x16,0xF0,0x14,0x13,0x10,0x00,0x00, 
	0x10,0x1F,0x08,0x08,0xFF,0x04,0x81,0x41,0x31,0x0D,0x03,0x0D,0x31,0x41,0x81,0x00, #联

	0x00,0xFE,0x02,0x22,0x42,0x82,0x72,0x02,0x22,0x42,0x82,0x72,0x02,0xFE,0x00,0x00, 
	0x00,0xFF,0x10,0x08,0x06,0x01,0x0E,0x10,0x08,0x06,0x01,0x4E,0x80,0x7F,0x00,0x00, #网
]

# 每个字符是8x16(宽x高) 点阵,
F2=[
	0x10,0xF0,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,    #*"h",0*#

	0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x19,0x24,0x24,0x12,0x3F,0x20,0x00,    #*"a",1*#

	0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x19,0x24,0x24,0x12,0x3F,0x20,0x00,     #*"a",2*#

	0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,     #*"s",3*#

	0x00,0xF8,0x88,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x20,0x20,0x20,0x11,0x0E,0x00,     #*"5",4*#

	0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,     #*"0",5*#

	0x00,0xE0,0x10,0x88,0x88,0x90,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x20,0x1F,0x00,     #*"6",6*#

]

#字符串 6x8点阵
F6x8=[
    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00],# sp
	[0x00, 0x00, 0x00, 0x2f, 0x00, 0x00],# !
	[0x00, 0x00, 0x07, 0x00, 0x07, 0x00],# "
	[0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14],# #
	[0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12],# $
	[0x00, 0x62, 0x64, 0x08, 0x13, 0x23],# %
	[0x00, 0x36, 0x49, 0x55, 0x22, 0x50],# &
	[0x00, 0x00, 0x05, 0x03, 0x00, 0x00],# '
	[0x00, 0x00, 0x1c, 0x22, 0x41, 0x00],# (
	[0x00, 0x00, 0x41, 0x22, 0x1c, 0x00],# )
	[0x00, 0x14, 0x08, 0x3E, 0x08, 0x14],# *
	[0x00, 0x08, 0x08, 0x3E, 0x08, 0x08],# +
	[0x00, 0x00, 0x00, 0xA0, 0x60, 0x00],# ,
	[0x00, 0x08, 0x08, 0x08, 0x08, 0x08],# -
	[0x00, 0x00, 0x60, 0x60, 0x00, 0x00],# .
	[0x00, 0x20, 0x10, 0x08, 0x04, 0x02],# #
	[0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E],# 0
	[0x00, 0x00, 0x42, 0x7F, 0x40, 0x00],# 1
	[0x00, 0x42, 0x61, 0x51, 0x49, 0x46],# 2
	[0x00, 0x21, 0x41, 0x45, 0x4B, 0x31],# 3
	[0x00, 0x18, 0x14, 0x12, 0x7F, 0x10],# 4
	[0x00, 0x27, 0x45, 0x45, 0x45, 0x39],# 5
	[0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30],# 6
	[0x00, 0x01, 0x71, 0x09, 0x05, 0x03],# 7
	[0x00, 0x36, 0x49, 0x49, 0x49, 0x36],# 8
	[0x00, 0x06, 0x49, 0x49, 0x29, 0x1E],# 9
	[0x00, 0x00, 0x36, 0x36, 0x00, 0x00],# :
	[0x00, 0x00, 0x56, 0x36, 0x00, 0x00],# ;
	[0x00, 0x08, 0x14, 0x22, 0x41, 0x00],# <
	[0x00, 0x14, 0x14, 0x14, 0x14, 0x14],# =
	[0x00, 0x00, 0x41, 0x22, 0x14, 0x08],# >
	[0x00, 0x02, 0x01, 0x51, 0x09, 0x06],# ?
	[0x00, 0x32, 0x49, 0x59, 0x51, 0x3E],# @
	[0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C],# A
	[0x00, 0x7F, 0x49, 0x49, 0x49, 0x36],# B
	[0x00, 0x3E, 0x41, 0x41, 0x41, 0x22],# C
	[0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C],# D
	[0x00, 0x7F, 0x49, 0x49, 0x49, 0x41],# E
	[0x00, 0x7F, 0x09, 0x09, 0x09, 0x01],# F
	[0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A],# G
	[0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F],# H
	[0x00, 0x00, 0x41, 0x7F, 0x41, 0x00],# I
	[0x00, 0x20, 0x40, 0x41, 0x3F, 0x01],# J
	[0x00, 0x7F, 0x08, 0x14, 0x22, 0x41],# K
	[0x00, 0x7F, 0x40, 0x40, 0x40, 0x40],# L
	[0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F],# M
	[0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F],# N
	[0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E],# O
	[0x00, 0x7F, 0x09, 0x09, 0x09, 0x06],# P
	[0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E],# Q
	[0x00, 0x7F, 0x09, 0x19, 0x29, 0x46],# R
	[0x00, 0x46, 0x49, 0x49, 0x49, 0x31],# S
	[0x00, 0x01, 0x01, 0x7F, 0x01, 0x01],# T
	[0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F],# U
	[0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F],# V
	[0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F],# W
	[0x00, 0x63, 0x14, 0x08, 0x14, 0x63],# X
	[0x00, 0x07, 0x08, 0x70, 0x08, 0x07],# Y
	[0x00, 0x61, 0x51, 0x49, 0x45, 0x43],# Z
	[0x00, 0x00, 0x7F, 0x41, 0x41, 0x00],# [
	[0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55],# 55
	[0x00, 0x00, 0x41, 0x41, 0x7F, 0x00],# ]
	[0x00, 0x04, 0x02, 0x01, 0x02, 0x04],# ^
	[0x00, 0x40, 0x40, 0x40, 0x40, 0x40],# _
	[0x00, 0x00, 0x01, 0x02, 0x04, 0x00],# '
	[0x00, 0x20, 0x54, 0x54, 0x54, 0x78],# a
	[0x00, 0x7F, 0x48, 0x44, 0x44, 0x38],# b
	[0x00, 0x38, 0x44, 0x44, 0x44, 0x20],# c
	[0x00, 0x38, 0x44, 0x44, 0x48, 0x7F],# d
	[0x00, 0x38, 0x54, 0x54, 0x54, 0x18],# e
	[0x00, 0x08, 0x7E, 0x09, 0x01, 0x02],# f
	[0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C],# g
	[0x00, 0x7F, 0x08, 0x04, 0x04, 0x78],# h
	[0x00, 0x00, 0x44, 0x7D, 0x40, 0x00],# i
	[0x00, 0x40, 0x80, 0x84, 0x7D, 0x00],# j
	[0x00, 0x7F, 0x10, 0x28, 0x44, 0x00],# k
	[0x00, 0x00, 0x41, 0x7F, 0x40, 0x00],# l
	[0x00, 0x7C, 0x04, 0x18, 0x04, 0x78],# m
	[0x00, 0x7C, 0x08, 0x04, 0x04, 0x78],# n
	[0x00, 0x38, 0x44, 0x44, 0x44, 0x38],# o
	[0x00, 0xFC, 0x24, 0x24, 0x24, 0x18],# p
	[0x00, 0x18, 0x24, 0x24, 0x18, 0xFC],# q
	[0x00, 0x7C, 0x08, 0x04, 0x04, 0x08],# r
	[0x00, 0x48, 0x54, 0x54, 0x54, 0x20],# s
	[0x00, 0x04, 0x3F, 0x44, 0x40, 0x20],# t
	[0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C],# u
	[0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C],# v
	[0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C],# w
	[0x00, 0x44, 0x28, 0x10, 0x28, 0x44],# x
	[0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C],# y
	[0x00, 0x44, 0x64, 0x54, 0x4C, 0x44],# z
	[0x14, 0x14, 0x14, 0x14, 0x14, 0x14]# horiz lines
]


#字符串 8x16点阵
F8X16=[
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,# 0
  0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,#! 1
  0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,#" 2
  0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,## 3
  0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,#$ 4
  0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,#% 5
  0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,#& 6
  0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,#' 7
  0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,#( 8
  0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,#) 9
  0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,#* 10
  0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,#+ 11
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,#, 12
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,#- 13
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,#. 14
  0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,## 15
  0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,#0 16
  0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,#1 17
  0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,#2 18
  0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,#3 19
  0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,#4 20
  0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,#5 21
  0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,#6 22
  0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,#7 23
  0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,#8 24
  0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,#9 25
  0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,#: 26
  0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,#; 27
  0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,#< 28
  0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,#= 29
  0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,#> 30
  0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,#? 31
  0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,#@ 32
  0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,#A 33
  0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,#B 34
  0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,#C 35
  0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,#D 36
  0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,#E 37
  0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,#F 38
  0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,#G 39
  0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,#H 40
  0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,#I 41
  0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,#J 42
  0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,#K 43
  0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,#L 44
  0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,#M 45
  0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,#N 46
  0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,#O 47
  0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,#P 48
  0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,#Q 49
  0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,#R 50
  0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,#S 51
  0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,#T 52
  0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,#U 53
  0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,#V 54
  0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,#W 55
  0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,#X 56
  0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,#Y 57
  0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,#Z 58
  0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,#[ 59
  0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,#\ 60
  0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,#] 61
  0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,#^ 62
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,#_ 63
  0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,#` 64
  0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,#a 65
  0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,#b 66
  0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,#c 67
  0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,#d 68
  0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,#e 69
  0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,#f 70
  0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,#g 71
  0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,#h 72
  0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,#i 73
  0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,#j 74
  0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,#k 75
  0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,#l 76
  0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,#m 77
  0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,#n 78
  0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,#o 79
  0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,#p 80
  0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,#q 81
  0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,#r 82
  0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,#s 83
  0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,#t 84
  0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,#u 85
  0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,#v 86
  0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,#w 87
  0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,#x 88
  0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,#y 89
  0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,#z 90
  0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,# 91
  0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,#| 92
  0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,# 93
  0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,#~ 94
]

BMP1=[
    0x00,0x03,0x05,0x09,0x11,0xFF,0x11,0x89,0x05,0xC3,0x00,0xE0,0x00,0xF0,0x00,0xF8,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x28,0xFF,0x11,0xAA,0x44,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x83,0x01,0x38,0x44,0x82,0x92,
	0x92,0x74,0x01,0x83,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x44,0xC7,0x01,0x7D,
	0x7D,0x7D,0x7D,0x01,0x7D,0x7D,0x7D,0x7D,0x01,0x7D,0x7D,0x7D,0x7D,0x01,0xFF,0x00,
	0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,
	0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,
	0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x00,0x00,
	0x6D,0x6D,0x6D,0x6D,0x6D,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x40,0x40,
	0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDB,0xDB,0xDB,0xDB,0xDB,0x00,0x00,
	0xDB,0xDB,0xDB,0xDB,0xDB,0x00,0x00,0xDB,0xDB,0xDB,0xDB,0xDB,0x00,0x00,0xDB,0xDB,
	0xDB,0xDB,0xDB,0x00,0x00,0xDA,0xDA,0xDA,0xDA,0xDA,0x00,0x00,0xD8,0xD8,0xD8,0xD8,
	0xD8,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,
	0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x80,
	0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x06,0x06,0x06,0x00,0x00,
	0x06,0x06,0x06,0x06,0x06,0x00,0x00,0x06,0x06,0x06,0x06,0x06,0x00,0x00,0x06,0x06,
	0x06,0x06,0x06,0x00,0x00,0x06,0x06,0x06,0xE6,0x66,0x20,0x00,0x06,0x06,0x86,0x06,
	0x06,0x00,0x00,0x06,0x06,0x06,0x06,0x86,0x00,0x00,0x06,0x06,0x06,0x06,0x06,0x00,
	0x00,0x86,0x86,0x86,0x86,0x86,0x80,0x80,0x86,0x86,0x06,0x86,0x86,0xC0,0xC0,0x86,
	0x86,0x86,0x06,0x06,0xD0,0x30,0x76,0x06,0x06,0x06,0x06,0x00,0x00,0x06,0x06,0x06,
	0x06,0x06,0x00,0x00,0x06,0x06,0x06,0x06,0x06,0x00,0x00,0x06,0x06,0x06,0x06,0x06,
	0x00,0x00,0x06,0x06,0x06,0x06,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x1C,0x00,0xFE,0x00,0x01,
	0x02,0x00,0xC4,0x18,0x20,0x02,0x9E,0x63,0xB2,0x0E,0x00,0xFF,0x81,0x81,0xFF,0x00,
	0x00,0x80,0x40,0x30,0x0F,0x00,0x00,0x00,0x00,0xFF,0x00,0x23,0xEA,0xAA,0xBF,0xAA,
	0xEA,0x03,0x3F,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x0C,0x08,0x00,0x00,0x01,0x01,0x01,
	0x01,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x81,0x80,0x80,0x81,0x80,
	0x81,0x80,0x80,0x80,0x80,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
	0x01,0x00,0x01,0x01,0x09,0x0C,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,
	0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,
	0x00,0x1E,0x21,0x40,0x40,0x50,0x21,0x5E,0x00,0x1E,0x21,0x40,0x40,0x50,0x21,0x5E,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xC1,0xC1,0xFF,
	0xFF,0xC1,0xC1,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x80,0xFC,0xF3,0xEF,0xF3,0xFC,
	0x80,0xFF,0x80,0xEE,0xEE,0xEE,0xF5,0xFB,0xFF,0x9C,0xBE,0xB6,0xB6,0x88,0xFF,0x00
    ]

#像素:64*64
#列表大小:32*16
BMP2=[
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,
	0x60,0x38,0x08,0x0C,0x06,0xC2,0xE2,0x33,0x11,0xF9,0x11,0x33,0x73,0xE2,0x06,0x04,
	0x0C,0x18,0x30,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF7,
	0x00,0x00,0x00,0x00,0x00,0xC3,0x87,0x06,0x0C,0xFF,0x0C,0x18,0x18,0xF0,0xE0,0x00,
	0x00,0x00,0x00,0x81,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
	0x07,0x0C,0x18,0x30,0x30,0x61,0x63,0x46,0x46,0x5F,0x46,0x46,0x43,0x63,0x20,0x30,
	0x18,0x0C,0x06,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x80,0xE0,0xE0,0xF0,0xE0,0xE0,0xC0,0x60,0x70,0x30,0x38,0x18,0x18,0x0C,
	0x0C,0x0C,0x66,0x66,0x66,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,
	0x66,0x66,0x0C,0x0C,0x0C,0x18,0x18,0x30,0x30,0x60,0xE0,0xE0,0x70,0x38,0x18,0x0C,
	0xFC,0xFC,0x1C,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0xC7,0xFF,0x79,0x1B,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0xC3,0xC3,0xC7,0x06,0x0C,0x18,0x70,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x83,0xFF,0x7F,0x00,0x00,
	0x00,0x00,0x00,0x03,0x07,0xFE,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0xC0,
	0xC0,0xC0,0x60,0x60,0x30,0x30,0x18,0x1C,0x0E,0x06,0x03,0x03,0x01,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x3F,0x78,0xE0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,
	0xFE,0xFE,0x06,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,
	0x1C,0x38,0xF0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xDC,0xFF,0xC3,0x01,0x01,0x01,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
]

#32-32.bmp
BMP3=[
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x0E,0x02,0x9B,0xBD,0xFF,0x65,0xED,0xCB,
	0x06,0x9C,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0x60,0x61,0x23,0xF6,0xFD,0x7F,0x7F,0x7B,0x7D,0xF4,
	0xF6,0x23,0x60,0x60,0xC0,0xC0,0x60,0x60,0xE0,0x60,0x20,0x00,0x00,0x00,0x00,0x00,
	0x20,0xFF,0x8F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x1B,0x06,0x0C,0x18,0x90,0xF0,0x20,
	0x00,0x01,0x1F,0x7E,0xE0,0x80,0x80,0xA0,0xF0,0x30,0x20,0x20,0x20,0x20,0x20,0x20,
	0x60,0xC0,0x80,0x80,0xF0,0xF0,0x18,0x18,0x08,0x0C,0x04,0x06,0x03,0x01,0x01,0x00,
]

board.json

  • 使用485读取log
{
    "version": "2.0.0",
    "io": {
        "OLED": {
            "type": "I2C",
            "port": 1,
            "addrWidth": 7,
            "freq": 400000,
            "mode": "master",
            "devAddr": 60
          },   
        "serial1":{
            "type":"UART",
            "port":0,
            "dataWidth":8,
            "baudRate":9600,
            "stopBits":1,
            "flowControl":"disable",
            "parity":"none"
          },
          "KEY1": {
            "type": "GPIO",
            "port": 44,
            "dir": "irq",
            "pull": "pullup",
            "intMode": "rising"
            }
        },
        "debugLevel": "ERROR",
        "repl": "enable",
        "replPort": 2
    }
    
    

应用开发

以下是物联网应用开发流程,接下来按以下流程介绍移动端应用的开发。

3.1新建‘普通项目’

  • 使用阿里云IoTStudio创建项目。
  • 在项目管理新建空白项目
    在这里插入图片描述
    在这里插入图片描述

3.2关联产品和设备

在这里插入图片描述
在这里插入图片描述

3.3新建‘移动应用’

在这里插入图片描述
在这里插入图片描述

3.4添加组件

在这里插入图片描述

3.5配置组件信息

物体重量
在这里插入图片描述
在这里插入图片描述
单位"克"
在这里插入图片描述
系数k,最大值改2000
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

去皮
在这里插入图片描述
在这里插入图片描述
称重
在这里插入图片描述
在这里插入图片描述
再添加两个按钮用来切换模式
在这里插入图片描述
在这里插入图片描述

3.6保存预览

在这里插入图片描述
手机扫码就可以使用了
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值