视频链接:https://www.bilibili.com/video/BV1G34y1E7tE?p=12&spm_id_from=333.880.my_history.page.click&vd_source=b91967c499b23106586d7aa35af46413

文档连接:https://doc.itprojects.cn/0006.zhishi.esp32/02.doc/index.html#/12.240x240gif

1、制作要显示的动图(动图显示时间不要过长)。

2、将动图转换为多张静态图片,这里使用 Python 代码去做。

from PIL import Image
from PIL import ImageSequenceimg = Image.open('C:\\Users\\Administrator\\Desktop\\123.gif')i = 0
for frame in ImageSequence.Iterator(img):frame.save("frame%d.png" % i)i += 1

3、调整图片大小

from PIL import Image  # python3安装pillow库
import os.path
import globdef convertSize(jpgfile, outdir, width=125, height=225):  # 图片的大小256*256img = Image.open(jpgfile)try:new_img = img.resize((width, height), Image.BILINEAR)if new_img.mode == 'P':new_img = new_img.convert("RGB")if new_img.mode == 'RGBA':new_img = new_img.convert("RGB")new_img.save(os.path.join(outdir, os.path.basename(jpgfile)))except Exception as e:print(e)for jpgfile in glob.glob("*.png"):  # 修改该文件夹下的图片convertSize(jpgfile, "./")  # 另存为的文件夹路径

4、将图片转换为.dat文件

import struct
import numpy as np
from PIL import Imagedef color565(r, g, b):return (r & 0xf8) << 8 | (g & 0xfc) << 3 | b >> 3def main():for i in range(1, 16):  # 16张图片循环播放img = Image.open("frame{}.png".format(i))print(i, img.format, img.size, img.mode)img_data = np.array(img)  # 225行125列有3个 225x125x3with open("./frame{}.dat".format(i), "wb") as f:for line in img_data:for dot in line:f.write(struct.pack("H", color565(*dot))[::-1])if __name__ == '__main__':main()

5、就是要把转换好的 .dat 文件传给 ESP32,这是使用无线局域网的传输方式。首先在 ESP32 端运行接收代码(连接到 WiFi 后把自己的 ip 地址告诉给电脑),然后在电脑端运行发送代码。

接收端代码:

import time
import network
import machine
import socketdef do_connect():wlan = network.WLAN(network.STA_IF)wlan.active(True)if not wlan.isconnected():print('connecting to network...')wlan.connect('ChinaNet-SAD8JJ', '13179734613')i = 1while not wlan.isconnected():print("正在链接...{}".format(i))i += 1time.sleep(1)print('network config:', wlan.ifconfig())# 0. 连接wifi
do_connect()# 1. 创建 TCP 套接字
server_s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 2. 绑定本地信息
server_s.bind(("", 8080))# 3. 设置为被动的
server_s.listen(128)print("等待对方链接...")# 4. 等待客户端链接
new_s, client_info = server_s.accept()print("等待对方发送图片数据...")# 3. 创建文件,接收数据
for i in range(1, 16):  # 15张图片循环播放with open("img{}.dat".format(i), "wb") as f:for j in range(225):# 3.1 接收数据data = new_s.recv(250)   # 125*2=250 一行有125个点, 每个点有两个字节# 3.2 写到文件f.write(data)# print("接收第%d行" % (i+1))print("img{}--接收完毕".format(i))# 7. 关闭套接字
new_s.close()
server_s.close()

发送端代码:

import struct
import numpy as np
from PIL import Imagedef color565(r, g, b):return (r & 0xf8) << 8 | (g & 0xfc) << 3 | b >> 3def main():for i in range(1, 16):  # 16张图片循环播放img = Image.open("frame{}.png".format(i))print(i, img.format, img.size, img.mode)img_data = np.array(img)  # 225行125列有3个 225x125x3with open("./frame{}.dat".format(i), "wb") as f:for line in img_data:for dot in line:f.write(struct.pack("H", color565(*dot))[::-1])if __name__ == '__main__':main()

6、显示动图代码,是在上一节显示静态图片的驱动上改的。

import random
from machine import Pin, SPI
import st7789
import st7789py# 解决第1次启动时,不亮的问题
st7789.ST7789(SPI(2, 80000000), dc=Pin(2), cs=Pin(5), rst=Pin(15))# 创建显示屏对象
tft = st7789py.ST7789(SPI(2, 10000000), 135, 240, reset=Pin(15), dc=Pin(2), cs=Pin(5), rotation=0)# 屏幕显示蓝色
tft.fill(st7789py.color565(0, 0, 0))#RGB# 因为用到了15张图片,所以这里创建15个文件对象
f_list = [open("img{}.dat".format(i), "rb") for i in range(1, 16)]def show_img():for f in f_list:f.seek(0) # 让文件指针指向0, 即从img1开始播放for row in range(0, 225, 25): # 从0行开始,一共有225行,每次读取22行有问题(尽量取能整除的数)buffer = f.read(250*25)tft.show_img(0, row, 124, row+25, buffer) #起点坐标(0, row),终点坐标(124, row)while True:show_img()

每次读取的行数阅读,播放的速度就越快,既不能每次读取的行数太多(48行没问题),否则会申请内存错误。也不能一行一行的读取,否则刷新太慢,有过于明显地刷新页面的过程,显示效果不佳。尽量每次读取是行数的整数倍 (尽量取能整除的数),避免还剩半行没读完的情况,比如这里读取 22 行就有问题。

8、ESP32-S - 控制 SPI 液晶屏显示动态图片相关推荐

  1. Wemos D1 R32 ESP32开发板OLED液晶屏显示

    目录 一.实验准备 二.实验代码 1.OLED液晶屏显示"Hello World" 2. OLED液晶满屏显示字符 3.OLED屏显示时钟 4.OLED屏显示矢量图片 5 OLED ...

  2. 使用Python控制1602液晶屏实时显示时间(附PyCharm远程调试)

    前言 原创文章,转载引用务必注明链接.水平有限,如有疏漏,欢迎指正. 本文介绍一下UP板的GPIO资源使用,以及一个使用Python演示一个简单的demo. 本文使用Markdown写成,为获得更好的 ...

  3. ARDUINO:ESP32 + ILI9431 SPI TFT液晶屏静态展示图片

    折腾了半天,终于搞定ESP32开发板 + ILI9431 SPI TFT小液晶屏静态展示图片. 库:Arduino IDE的库管理中搜索 TFT_eSPI.或者从GITHUB手动下载:https:// ...

  4. 树莓派开发系列教程10——树莓派spi液晶屏支持(fbtft)

        树莓派官方支持av及HDMI输出,板子上预留了一个csi接口的液晶显示屏,但是一直没有相应的模组出现.在很多应用场合我们需要一些小型的液晶屏显示一些基本的信息,所以小屏驱动很是必要. 在git ...

  5. 57步进电机驱动板,可以通过编码器调速,支持SPI通讯屏显示,485通讯

    57步进电机驱动板,可以通过编码器调速,支持SPI通讯屏显示,485通讯. 板子上面有电位器可电流设定或者485改电流设定. 最大电流支持4.5A,如果需要更大电流需要改元器件参数. 有启停和方向按键 ...

  6. Linux高级应用(二)文件IO函数与液晶屏显示

    一.结构体占用的内存 struct test { char a; int b; short c; long d; char *p; }; 求该结构体占用的内存?sizeof(struct test) ...

  7. 超声波传感器与液晶屏显示实验

    实验二  超声波传感器与液晶屏显示实验 一.实验目的 了解液晶屏显示的基本原理以及电路连接. 二.实验内容  了解液晶屏的工作原理和工作情况. 三.实验仪器 导线若干,1602液晶显示屏,LY-F2 ...

  8. c语言52单片机液晶屏显示,[手把手教你学51单片机C语言教程]22 LCD12864液晶屏显示.pdf...

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspC/C++资料 [手把手教你学51单片机C语言教程]22 LCD ...

  9. nokia5110液晶屏显示汉字,图形,…

    nokia5110液晶屏显示汉字,图形,字符,字符串 从网上看到的文章,感觉很好,顾转载收藏啦 #include #include #define uchar unsigned char #defin ...

  10. 液晶屏显示的对讲机?还是手咪?

    美国大片中经常看到警车里面出现这样的场景:某一辆警车发现犯罪嫌疑人,警察拿起一个类似话筒的玩意儿,呼叫指挥中心,以便其余警车的人可以知道.包括现在国产电影也会经常出现警察随身携带这类产品呼叫中心的画面 ...

最新文章

  1. Python使用matplotlib函数subplot可视化多个不同颜色的折线图、在折线图上为每个数据点添加数值标签
  2. 凡客即便走小米模式也很难
  3. C++编码中减少内存缺陷的方法和工具
  4. 大促场景下云通信高可用、稳定性实战
  5. 城市地区级联二级下拉选择菜单js特效
  6. Pacman主题下给Hexo增加简历类型
  7. 口红机源码运营版对接CC支付源码
  8. 东北林大计算机考研难吗,北京林业大学考研难吗?一般要什么水平才可以进入?...
  9. Java Jersey2使用总结
  10. OpenPose 命令行说明
  11. smartdns使用指南_OpenWrt之SmartDNS 使用教程(PW版)
  12. numpy的choose 函数实现条件筛选
  13. 编译MKL50.1 (for 一加手机)
  14. 财务金额转换:小写金额转换成大写算法
  15. React 性能分析神器 React Profiler 介绍
  16. 尚硅谷java学习笔记第五天(数组上)
  17. 初学安装oracle11g遇到的问题,以及解决方案
  18. 深度学习配置环境全攻略
  19. ASP.NET:aspx文件
  20. BAT卖不动「医疗云」:医院逃离、山头林立、行有行规

热门文章

  1. ​力扣解法汇总904.水果成篮
  2. 详细解读行人重识别的k-reciprocal Encoding(k个相互近邻编码方法) re-ranking方法及其实现代码解读
  3. android 毫秒 计时器,Android 计时器: CountDownTimer和JobService
  4. 【机器视觉锁付整体解决方案】视觉纠偏和找孔示教操作
  5. R语言|plot和par函数绘图详解,绘图区域设置 颜色设置 绘图后修改及图像输出
  6. unity-shader-头发渲染-各向异性
  7. 服务器收到syn包不回消息,TCP:SYN请求接收SYN响应代替SYN-ACK
  8. 弘辽科技:淘宝店铺评分太低是降权了吗?
  9. Cox回归和HR值理解要点难点,实例讲解
  10. Ubuntu20.04开启night夜间模式保护视力