分享一个自己写的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

 

Logo

为开发者提供按需使用的算力基础设施。

更多推荐