本人【Luckfox幸狐 RV1106 Linux 开发板测评】帖子链接:
一、开箱及测试
二、SDK获取与编译镜像
三、GPIO点灯
四、通过PC机共享网络接入Internet和Ubuntu下Python点灯
五、编译Buildroot系统并测试摄像头
六、PWM控制——命令和C方式
七、PWM控制——Python和设备树方式
八、ADC和UART测试
九、Python控制I2C驱动OLED
本篇继续Luckfox Pro Max板I2C接口驱动0.96寸OLED(控制芯片SSD1306),以C代码进行控制。本人共测试了四个项目,两个成功(只需少量修改Makefile),两个失败(失败原因不明)。
1、成功案例——ssd1306_for_linux
这是Gitee上找到的案例(https://gitee.com/xianleewu/ssd1306_for_linux),作者在Orange Pi上进行了验证,从其README中分析是基于Armbian系统,本来不报太大希望,没想到一次验证就通过了。
案例使用过程也比较简单,首先是在Ubuntu虚拟机上进行项目clone:
git clone https://gitee.com/xianleewu/ssd1306_for_linux.git
然后,就是进入克隆好的项目目录,修改Makefile和“src/example.c”:
图10-1 ssd306_for_linux项目的Makefile和example.c修改
上述两处修改Makefile指定使用的编译工具由Luckfox SDK提供,然后源程序的修改指定使用I2C3接口。接着,就是make进行构建,在build目录下得到可执行程序“OrangePI_ssd1306”。
图10-2 ssd306_for_linux的构建结果
最后,将“OrangePI_ssd1306”拷贝到本机Win10,再adb push到开发板,chmod修改执行权限,然后运行验证即可。
图10-3 ssd306_for_linux运行效果
ssd1306_for_linux项目的测试案例是显示系统的内存、CPU使用率、CPU温度和日历——Luckfox板子没有联网进行授时所以本地时间获取不准。
2、成功案例——u8g2-arm-linux
图10-4 ssd306_for_linux项目的功能函数
上图可以看到ssd1306_for_linux项目提供的功能函数较少,只有“画点、画线、画方、写字”等,于是本人又想到使用经典的u8g2库。
Gitee上搜到一个Linux下的u8g2编译成lib的仓库,不过没有实验成果(失败案例之一),不过经仓库的README提示又找到Github上的项目源码仓库(https://github.com/wuhanstudio/u8g2-arm-linux)。
可是本人一贯访问Github的经历都不是很愉快,网速感人,好在已经找到了通过Gitee fork项目的本领,有需要的朋友也可以访问本人fork版本:https://gitee.com/sonicfirr/u8g2-arm-linux 。
项目依然是clone到虚拟机,修改Makefile和源码,然后下载本机推送到开发板执行的过程。本人测试的是项目自带的C案例,硬I2C版本(路径/u8g2-arm-linux/examples/c-examples/u8g2_hw_i2c)。
图10-5 u8g2-arm-linux项目的修改
图10-6 u8g2-arm-linux项目构建程序位于“bin”目录
图10-7 u8g2-arm-linux项目测试案例效果
3、失败案例——u8g2-arm-linux-lib和微雪RPI项目移植
失败案例之一就是Gitee上先找到u8g2 Lib(https://gitee.com/haywire/u8g2-arm-linux-lib)库,没有花太多功夫调试,只是在编译时报错有关于IO控制的函数没有定义,猜想可能是u8g2-arm-linux原项目中使用了“c-periphery”库作为底层接口驱动,而这个Lib库没有做好c-periphery的打包。当然更有可能就是使用方法不当——这里本人很粗略的将u8g2_hw_i2c.c的代码直接拷贝出来尝试连接这个Lib进行编译。
失败案例之二耗费了在下两天的时间,最终也没有成功,这里简述一下尝试的流程。
因为Luckfox官方提供的OLED案例就是基于微雪电子的1.3寸OLED,驱动芯片SH1107,项目结构如下。个人经过分析,在c/lib/OLED目录中创建了0.96寸OLED的驱动源文件,其中的代码则是尝试移植了微雪提供的0.96寸OLED案例(https://www.waveshare.net/wiki/0.96inch_OLED_(A))。
第一次尝试没有成功,于是转向微雪的0.96寸的案例直接进行移植修改,依然失败——屏幕显示了雪花点。微雪的案例是基于树莓派的,最后本人干脆把树莓派拿出来进行测试,结果只显示了第一个画面“时钟”,后续画面都没有显示出来——分析其案例应该还有四个画面。所以这里判断案例本身有一定问题,也可能是案例中的功能需要获取画面数据的部分在Luckfox上失效了。
微雪的树莓派版案例底层驱动可以基于BCM2835、wiringPi或lgpio三个库来实现,移植到Luckfox则只能改为访问设备文件。目前本人判断I2C3接口访问是成功的,OLED也可以点亮,应该还是GUI功能函数不兼容。考虑到时间耗费较久了,也就放弃继续调试,准备下一步转向SPI驱动LCD的方向。
图10-8 Luckfox官方的OLED案例项目