成果展示

  1. 皮卡丘
  2. 离思

屏幕


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相关推荐

  1. 树莓派python驱动PCA9685

    树莓派python驱动PCA9685 1.开启iic 输入命令:sudo raspi-config 2.安装adafruit_python_pca9685 输入命令:sudo pip install ...

  2. 树莓派 java 驱动 4.2寸 微雪 墨水屏 天气 预报

    结果展示 我做的这个很简陋,需要插电,自己玩玩还行,效果见下: B站视频指导 视频指导:视频地址 https://www.bilibili.com/video/BV1bQ4y1Z7xL 实现说明 我一 ...

  3. STM32L475 SPI驱动LCD ST7789V2详解

    概述 最近在学习正点原子潘多拉开发板,在此结合原子哥的代码, 对SPI驱动LCD做一个详细介绍. TFTLCD 和 SPI TFTLCD介绍 TFT-LCD 即薄膜晶体管液晶显示器.其英文全称为:Th ...

  4. STC单片机驱动1.8‘TFT SPI屏幕示例模板(含资料包)

    STC单片机驱动1.8'TFT SPI屏幕示例模板(含资料包) 驱动演示 STC单片机采用的是: STC12C5A60S2,采用的自制开发板:<[开源]STC12C5A60S2开发板> 1 ...

  5. 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.选择屏 ...

  6. ESP32驱动LCD液晶屏选型、262K什么意思?SPI写LCD的GRAM时序、MCU液晶屏驱动IC的寄存器功能

    最近转战ESP32,ESP32-D0WDQ6 型号的GPIO只有那么20个左右,且还有几个GPIO只能做输入,非常捉襟见肘.所以如果要驱动LCD液晶屏,绝大多数都会选择SPI接口的MCU屏. 为了编写 ...

  7. Arduino UNO驱动合宙1.8‘TFT SPI屏幕示例演示(含资料包)

    Arduino UNO驱动合宙1.8"TFT SPI屏幕示例演示 效果展示 驱动参考资料包 来源于:http://www.lcdwiki.com/zh/1.8inch_Arduino_SPI ...

  8. 基于STM32F411使用SPI+DMA驱动LCD

    先看效果 F411CE 硬件SPI+DMA驱动LCD 基于HAL库 其实HAL库我用不太习惯,一直也是用的标准库 但HAL库确实是好上手一些,就迅速创建一个新的template 这次就当尝试一下吧,因 ...

  9. Linux keypad 设备树,GitHub - bilibilifmk/rpi_mt: 树莓派移动终端 全键盘及2.4寸tft材质屏幕...

    rpi_mt 树莓派移动终端 全键盘及2.4寸tft材质屏幕 这是一个还在开发中的项目 我自己打包的系统镜像 dd命令镜像:https://pan.baidu.com/s/1et3HwhCRhgPBm ...

  10. 树莓派 java 驱动 微雪 墨水屏 epaper

    树莓派 java 驱动 微雪 墨水屏 epaper B站视频指导 驱动结果显示 官方驱动测试 接线 初步测试 java驱动(仅二值图片展示,非灰阶部分) 引脚初始化 初始化墨水屏 点阵排列 显示方法 ...

最新文章

  1. WindowsAPI开发常用资料
  2. [转]chroot的使用
  3. JVM的内存区域划分(转)
  4. C#6.0中$的用法
  5. leetcode421. 数组中两个数的最大异或值(贪心算法)
  6. RestFull架构
  7. 宝塔 php5.6 极速安装_cltphp5.6.6版本安装教程-宝塔练手
  8. 突破”子网隔离”***C段
  9. 植物学 —— 基本名词、术语及概念
  10. html5留言板网页设计,网页设计制作-留言板
  11. 神经网络加速器设计研究:寒武纪DianNao论文阅读
  12. 论文选题、标题、摘要怎么写
  13. 知了Excel教你vlookup反向查询,就是这么简单
  14. python+selenium打开浏览器-设置浏览器路径和驱动器路径
  15. 肖博老师高中数学必备知识点总结最全版
  16. 2016天善智能交流会第22场: R语言为量化而生
  17. 苹果订阅的升级、降级、同级转换
  18. 前端面试之html+css【一】
  19. ffmpeg 打开USB摄像头
  20. java某公司运维管理系统

热门文章

  1. 【原创】将RGB图像转换到CMY空间
  2. 阿里云提示ECS实例存在挖矿活动的处理
  3. 一个强悍的算24点游戏的PHP程序
  4. 最短路径(信息学奥赛一本通 - T1378)
  5. 关于中国电信天翼开放平台短信接口的一些使用
  6. fast路由器服务器未响应,迅捷(FAST)无线路由器设置好了上不了网的解决方法
  7. python 控制鼠标滚轮_使用 python pyautogui实现鼠标键盘控制功能
  8. C语言实现图的深度优先遍历和广度优先遍历
  9. MVC模式初体验 properties解析工具 与 Dao层的结合 —————— 开开开山怪
  10. 【机器学习基础】无监督学习(1)——PCA