分享一个stm32的OLED驱动,实现图像平移滚动滑动,esp8266-wifi物联网远程开关天气,开源代码电路原理图
分享一个自己写的OLED驱动库,可实现平移,滑动,图像拼接等操作。MCU主控是stm32F103,OLED主控是sdd1306,0.96寸分辨率128x64。先上图为敬。上面是单独的时钟界面,结合FreeRTOS使用很流畅。CSDN图片5M限制,GIF的帧率不敢太高。下方的是增加了 ESP8266-WiFi 的物联网开发板,对时钟、开关、天气进行显示。关于这个库,只适用于主控是sdd1306的OL
分享一个自己写的OLED驱动库,可实现平移,滑动,图像拼接等操作。
亦可使用 esp8266-wifi 交互OneNET物联网云平台实现远程开关,心知天气获取近3日天气。
先上图:
上面是单独的时钟界面,结合FreeRTOS使用很流畅。CSDN图片5M限制,GIF的帧率只有15FPS不敢太高。
下方的是增加了 ESP8266-WiFi 的物联网开发板,对时间、开关状态、3日天气进行显示。
- 适用屏幕:
关于这个库,只适用于主控是sdd1306的OLED,因为它的描点方式很特殊,结合它的描点做了优化。
MCU主控是stm32F103,OLED主控是sdd1306,0.96寸分辨率128x64。
- RAM占用:
占用的内存大小,取决于界面的多少,像最上面的图,只有一个界面,只占1K+128x8Byte=2KB。而下面的有三个界面,需要占用1K+3x128x8Byte=4KB。
- 刷新方式:
实现原理是将想要显示的图片加载到单片机的RAM上,然后整屏幕刷新,因为这个OLED的刷屏方式比较特殊,刷满一整个屏幕,也只需要128x8x8=8192左右个时钟,F103单片机使用9MHz的SPI,可轻松在2ms内刷完。不想搞局部刷屏算法,爽就完了。现在的刷屏,还是用等待完成的方式,没有用DMA方式,用DMA可以将CPU空闲出很多时间,不过也只局限于这单一硬件。
- 左右平移实现原理:
左右滚动滑动的实现,是使用单独的1KB内存,去处理图片拼接后的图像。而由于刷屏方式比较特殊,左右拼接的方式就是内存移位,而且是Byte与Byte间的移位,这就更方便了。
- 数字上下滚动实现原理:
上下移动滚动的实现,是将一张图片的一条纵列像素,合成一个 uint64,然后对这个 uint64进行硬件移位。需要跟它拼接的图片做同样的操作,最后将两个uint64相与,合成一条新的纵列,最后反向移位,将 uint64还原给之前像素。图片的宽度有多大,整个过程就循环多少次,整个过程只占2个uint64的RAM空间。
- 示例工程的功能:
工程中,MCU型号为stm32F103c8t6,运行FreeRTOS实时系统,ESP8266实现联网功能,HTTP方式从OneNET获取4路远程开关状态,天气和时间由心知天气获取,配网需要将wifi密码写入程序重新烧录(设计硬件时忘记加配网按键了,先这么玩吧)
- 代码、电路、相关资料:
wifi密码修改、OneNet云平台账号、城市天气修改:wifi.h、onenet_http.h、seniverse_http.h 中的宏定义
OneNET云平台产品创建:OneNET云平台使用
心知天气产品创建:心知天气获取消息
GitHub源码仓库、电路:F103_IOT_DEV
字体、图片的取模方式:
https://blog.csdn.net/Mark_md/article/details/107930207
https://blog.csdn.net/Mark_md/article/details/107932293
更多推荐
所有评论(0)