综合案例2.0 - 称重数据上传云端
最新案例教程点击下方链接跳转,CSDN已停止更新
点
击
跳
转
效果展示
python写的4G云电子秤案例,附源码教程
案例说明
使用hx711串口模块称重,结合IOT studio制作手机APP远程控制并采集物体重量。
- 模块购买链接:
- hx711串口模块用多种使用模式,这里只使用方式1,指令0xA1。
- 使用流程
- 手机APP界面如下
- 1,用于显示物体重量
- 2,用于矫正称重的精准度物体重量计算公式:实际重量=传感器数据/K; // K 是一个系数,通过调节K值调节称的精准度。
- 3,去皮是去掉装物品的篮子之类的容器的重量,可以准确称出称量物的实际重量。先按去皮按钮,重量显示为零,再把要秤的物品放进容器里,显示的就是物品的实际重量了。
- 4,称重,在模式1下,每次按下称重才会将当前物体的重量显示在APP或OLED屏幕上.
- 5,进行模式切换,模式一的情况下每次按下称重才会显示当前重量。模式二的情况下当称上物体重量发生变化就会显示数据,每秒显示一次。
- 手机APP界面如下
连线
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保存预览
手机扫码就可以使用了