树莓派 python 驱动 lcd tft spi 1.8寸 ST7735S
成果展示
- 皮卡丘
- 离思
屏幕
The 4-lines serial interface use: CSX (chip enable), D/CX (data/
command flag), SCL (serial clock) and SDA (serial data input/output). Serial clock (SCL)
4线SPI接口使用:CSX(芯片使能),D / CX(数据/命令标志),SCL(串行时钟)和SDA(串行数据输入/输出)。
接线
python代码中指定了BOARD引脚模式,见下:
GPIO.setmode(GPIO.BOARD)
接线图:
代码简单说明
python版本见:
pi@raspberrypi:~/ST7735SPython $ python3 -V
Python 3.5.3
代码简单说明:
这个代码刷新屏幕的时长说明,就使用spi刷新还是很快的,用时:SpiTimeConsuming = 0.028s
但是读取颜色并处理色值这块,效率就很低:picReadTimeConsuming = 1.782s。
picReadTimeConsuming = 1.782s , SpiTimeConsuming = 0.028s
图片的缩放我没计时。根据原图的大小用时不同吧。我猜1-3秒。
代码共约100行,语法问题或是容错问题这里先不考虑,驱动起来才更有玩屏幕的兴致,已上传github,ST7735的数据手册也在github中了,代码地址
我也把所有代码贴这里吧,方便大家借鉴
# coding : UTF-8
import time #用于计算spi刷新整个屏幕所用时长
import RPi.GPIO as GPIO #用于操作引脚
import spidev #树莓派与屏幕的交互协议为SPI,说明见:https://github.com/doceme/py-spidev
from PIL import Image, ImageFont, ImageDraw #用于创建画布,或者读取具体路径下的图片。给图片添加文字。screenWidth = 160 #屏幕长度
screenHeight = 128 #屏幕宽度
PinDC = 29 #GPIO.BOARD引脚模式,第29号引脚
PinReset = 16 #GPIO.BOARD引脚模式,第16号引脚def hardReset(): #重置电平时序GPIO.output(PinReset, 0)time.sleep(.2)GPIO.output(PinReset, 1)time.sleep(.5)def sendCommand(command, *bytes): #发送指令(DC为低电平)和数据(DC为高电平)GPIO.output(PinDC, 0)spi.writebytes([command])if len(bytes) > 0:GPIO.output(PinDC, 1)spi.writebytes(list(bytes))def reset(): #屏幕初始化sendCommand(0x11);sendCommand(0x26, 0x04); # Set Default GammasendCommand(0xB1, 0x0e, 0x10); # Set Frame RatesendCommand(0xC0, 0x08, 0x00); # Set VRH1[4:0] & VC[2:0] for VCI1 & GVDDsendCommand(0xC1, 0x05); # Set BT[2:0] for AVDD & VCL & VGH & VGLsendCommand(0xC5, 0x38, 0x40); # Set VMH[6:0] & VML[6:0] for VOMH & VCOMLsendCommand(0x3a, 0x05); # Set Color FormatsendCommand(0x36, 0xc8); # RGBsendCommand(0x2A, 0x00, 0x00, 0x00, 0x7F); # Set Column AddresssendCommand(0x2B, 0x00, 0x00, 0x00, 0x9F); # Set Page AddresssendCommand(0xB4, 0x00);sendCommand(0xf2, 0x01); # Enable Gamma bitsendCommand(0xE0, 0x3f, 0x22, 0x20, 0x30, 0x29, 0x0c, 0x4e, 0xb7, 0x3c, 0x19, 0x22, 0x1e, 0x02, 0x01, 0x00);sendCommand(0xE1, 0x00, 0x1b, 0x1f, 0x0f, 0x16, 0x13, 0x31, 0x84, 0x43, 0x06, 0x1d, 0x21, 0x3d, 0x3e, 0x3f);sendCommand(0x29); # Display OnsendCommand(0x2C);def sendManyBytes(bytes): #发送屏幕数据GPIO.output(PinDC, 1)spi.writebytes(bytes)def drawImg(img160x128): #入参为160x128像素的image对象picReadStartTime = time.time()bytes = []i = 0 for x in range(0, screenWidth):for y in range(screenHeight - 1, -1, -1):colorValue = img160x128.getpixel((x, y))red = colorValue[0]green = colorValue[1]blue = colorValue[2]red = red >> 3; # st7735s的红色占5位green = green >> 2; # st7735s的绿色占6位blue = blue >> 3; # st7735s的蓝色占5位highBit = 0 | (blue << 3) | (green >> 3); # 每个像素写入个字节,highBit高字节,lowBit低字节lowBit = 0 | (green << 5) | red;bytes.append(highBit)bytes.append(lowBit)picReadTimeConsuming = time.time() - picReadStartTimestartTime = time.time()# screenWidth*screenHeight*2 每个像素写入个字节。以下for循环是为了控制每次传入的数组长度,防止这个报错,:OverflowError: Argument list size exceeds 4096 bytes.for j in range(2000, screenWidth * screenHeight * 2, 2000): sendManyBytes(bytes[i:j])i = i + 2000sendManyBytes(bytes[i:screenWidth * screenHeight * 2])SpiTimeConsuming = time.time() - startTimeprint("picReadTimeConsuming = %.3fs , SpiTimeConsuming = %.3fs" % (picReadTimeConsuming, SpiTimeConsuming))GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
GPIO.setup(PinDC, GPIO.OUT)
GPIO.setup(PinReset, GPIO.OUT)spi = spidev.SpiDev() #https://github.com/doceme/py-spidev
spi.open(0, 0)
spi.max_speed_hz = 24000000 #通信时钟最大频率
spi.mode = 0x00 #SPI的模式,ST7735S为模式0,可以参看我这篇内容:
hardReset()
reset()image = Image.new('RGB', (160, 128)) #可以使用代码新建画布
#image = Image.open('/home/pi/test.jpg');image = image.convert('RGBA'); image = image.resize((160, 128)) #也可以从地址读取图片文件,并缩放为160x128
draw = ImageDraw.Draw(image)
setFont = ImageFont.truetype("/usr/share/fonts/myfont/STXINWEI.TTF", 32) #字体地址,请参考我这篇内容:https://blog.csdn.net/chenqide163/article/details/106933858
draw.text((35, 0), "离思", font=setFont, fill="#FFA500", direction=None)
setFont = ImageFont.truetype("/usr/share/fonts/myfont/STXINWEI.TTF", 16)
draw.text((105, 15), "元稹", font=setFont, fill="#00FFFF", direction=None)
setFont = ImageFont.truetype("/usr/share/fonts/myfont/STXINWEI.TTF", 20)
draw.text((0, 35), "曾经沧海难为水,", font=setFont, fill="#FFFF00", direction=None)
draw.text((0, 60), "除却巫山不是云。", font=setFont, fill="#FFFF00", direction=None)
draw.text((0, 85), "取次花丛懒回顾,", font=setFont, fill="#FFFF00", direction=None)
draw.text((0, 110), "半缘修道半缘君。", font=setFont, fill="#FFFF00", direction=None)drawImg(image)
树莓派 python 驱动 lcd tft spi 1.8寸 ST7735S相关推荐
- 树莓派python驱动PCA9685
树莓派python驱动PCA9685 1.开启iic 输入命令:sudo raspi-config 2.安装adafruit_python_pca9685 输入命令:sudo pip install ...
- 树莓派 java 驱动 4.2寸 微雪 墨水屏 天气 预报
结果展示 我做的这个很简陋,需要插电,自己玩玩还行,效果见下: B站视频指导 视频指导:视频地址 https://www.bilibili.com/video/BV1bQ4y1Z7xL 实现说明 我一 ...
- STM32L475 SPI驱动LCD ST7789V2详解
概述 最近在学习正点原子潘多拉开发板,在此结合原子哥的代码, 对SPI驱动LCD做一个详细介绍. TFTLCD 和 SPI TFTLCD介绍 TFT-LCD 即薄膜晶体管液晶显示器.其英文全称为:Th ...
- STC单片机驱动1.8‘TFT SPI屏幕示例模板(含资料包)
STC单片机驱动1.8'TFT SPI屏幕示例模板(含资料包) 驱动演示 STC单片机采用的是: STC12C5A60S2,采用的自制开发板:<[开源]STC12C5A60S2开发板> 1 ...
- ESP32 入门笔记08:1.54寸(240*240)彩色TFT 显示高清IPS LCD 屏幕 SPI接口
目录 1.屏幕规格 2.原理图 3.程序实现 3.1引脚定义 3.2Adafruit_GFX / Arduino_ST7789版 3.3TFT_eSPI库版 3.3.1配置TFT_eSPI a.选择屏 ...
- ESP32驱动LCD液晶屏选型、262K什么意思?SPI写LCD的GRAM时序、MCU液晶屏驱动IC的寄存器功能
最近转战ESP32,ESP32-D0WDQ6 型号的GPIO只有那么20个左右,且还有几个GPIO只能做输入,非常捉襟见肘.所以如果要驱动LCD液晶屏,绝大多数都会选择SPI接口的MCU屏. 为了编写 ...
- Arduino UNO驱动合宙1.8‘TFT SPI屏幕示例演示(含资料包)
Arduino UNO驱动合宙1.8"TFT SPI屏幕示例演示 效果展示 驱动参考资料包 来源于:http://www.lcdwiki.com/zh/1.8inch_Arduino_SPI ...
- 基于STM32F411使用SPI+DMA驱动LCD
先看效果 F411CE 硬件SPI+DMA驱动LCD 基于HAL库 其实HAL库我用不太习惯,一直也是用的标准库 但HAL库确实是好上手一些,就迅速创建一个新的template 这次就当尝试一下吧,因 ...
- Linux keypad 设备树,GitHub - bilibilifmk/rpi_mt: 树莓派移动终端 全键盘及2.4寸tft材质屏幕...
rpi_mt 树莓派移动终端 全键盘及2.4寸tft材质屏幕 这是一个还在开发中的项目 我自己打包的系统镜像 dd命令镜像:https://pan.baidu.com/s/1et3HwhCRhgPBm ...
- 树莓派 java 驱动 微雪 墨水屏 epaper
树莓派 java 驱动 微雪 墨水屏 epaper B站视频指导 驱动结果显示 官方驱动测试 接线 初步测试 java驱动(仅二值图片展示,非灰阶部分) 引脚初始化 初始化墨水屏 点阵排列 显示方法 ...
最新文章
- WindowsAPI开发常用资料
- [转]chroot的使用
- JVM的内存区域划分(转)
- C#6.0中$的用法
- leetcode421. 数组中两个数的最大异或值(贪心算法)
- RestFull架构
- 宝塔 php5.6 极速安装_cltphp5.6.6版本安装教程-宝塔练手
- 突破”子网隔离”***C段
- 植物学 —— 基本名词、术语及概念
- html5留言板网页设计,网页设计制作-留言板
- 神经网络加速器设计研究:寒武纪DianNao论文阅读
- 论文选题、标题、摘要怎么写
- 知了Excel教你vlookup反向查询,就是这么简单
- python+selenium打开浏览器-设置浏览器路径和驱动器路径
- 肖博老师高中数学必备知识点总结最全版
- 2016天善智能交流会第22场: R语言为量化而生
- 苹果订阅的升级、降级、同级转换
- 前端面试之html+css【一】
- ffmpeg 打开USB摄像头
- java某公司运维管理系统