3090|7

155

帖子

1

TA的资源

一粒金砂(高级)

楼主
 

【Luckfox幸狐 RV1106 Linux 开发板测评】九、Python控制I2C驱动OLED [复制链接]

 

本人【Luckfox幸狐 RV1106 Linux 开发板测评】帖子链接:

一、开箱及测试

二、SDK获取与编译镜像

三、GPIO点灯

四、通过PC机共享网络接入Internet和Ubuntu下Python点灯

五、编译Buildroot系统并测试摄像头

六、PWM控制——命令和C方式

七、PWM控制——Python和设备树方式

八、ADC和UART测试

 

本篇测评以Python程序控制Luckfox Pro Max的I2C接口驱动0.96寸OLED,OLED的控制器为SSD1306。

官方提供的Python程序是控制1.5寸OLED的,驱动芯片是SSD1327。于是索性在Gitee上找了一个开源项目:https://gitee.com/wygrgzs/python_ssd1306/tree/master 。此项目应该是作者移植AdaFruit(README没有说,本人是通过源码注释分析其出处)的Micropython版驱动而来。

1、注意避坑

PWM的测评环节依照Luckfox文档启用了PWM0,由于管脚冲突,所以当时在设备文件中禁用了I2C3接口,而I2C文档中案例都是使用I2C3接口的。不过本人通过命令查看I2C设备文件,得到如下结果:

 

 

图9-1 查看I2C设备文件

 

于是,便想到不如使用I2C4来驱动OLED,结果无论是i2cdetect等命令或者Python程序都没有成功,并且Python程序报错OSError 6,经过查询这是smbus(Python程序使用的库)的设备未找到错误。由此,本人想到I2C4接口应该没有启用。

之后,翻看SDK中的设备文件源码,有如下内容:

 

 

 

图9-2 Pro Max I2C相关设备文件

 

可以看到开发板的设备文件“rv1106g-luckfox-pico-pro-max.dts”的起始位置通过#include又导入了“rv1106.dtsi”文件。这个文件应该是RV1106的主设备树文件,定义了大量的外设接口,不过所有接口都是禁用状态(status = "disabled"),然后在rv1106g-luckfox-pico-pro-max.dts中可以将用到接口再启用。

于是,重新修改rv1106g-luckfox-pico-pro-max.dts文件,禁用PWM0(和I2C管脚冲突),启用I2C3和I2C4。然后就是重新编译内核,并烧写到开发板中。

 

 

图9-3 Pro Max 启用I2C3和I2C4

 

2、Python控制程序

Python测试代码就使用Gitee案例,只修改了案例ssd1306.py的最后入口代码:

if __name__=='__main__':
    i2c = smbus.SMBus(4)            # 启用I2C4,或者传参3即启用I2C3都可以
    oled=SSD1306_I2C(128,64,i2c)    # 0.96寸,分辨率128*64
    oled.fill(0)
    oled.text("Luckfox", 0, 0 , 1)  # 案例测试控制OLED显示两行英文
    oled.text("Hello Pro Max", 0, 8 , 1)
    oled.contrast(10)
    oled.show()

原案例驱动的128*32的OLED,这里需要修改成128*64,案例只提供了一种英文字体,字体库由项目路径下的“font5x8.bin”文件提供。

 

 

图9-4 OLED显示效果

 

最新回复

请问基于ubuntu的固件应该如何驱动oled?   详情 回复 发表于 2024-3-11 15:16
点赞 关注(1)
 
 

回复
举报

155

帖子

1

TA的资源

一粒金砂(高级)

沙发
 

测评跟踪报告:在本篇完成后,在继续分析Luckfox Pro Max设备文件中发现,另一个文件“RV106-luckfox-pico-pro-max-ipc.dtsi”中,有关于I2C4的设备节点,看其代码应该被用作摄像头接口了。通过本人查看,当开启了I2C4后,摄像头果然不能用了,请看过本篇的朋友还是使用I2C3吧。设备文件的代码片段:

&i2c4 {
	status = "okay";
	clock-frequency = <400000>;
	pinctrl-names = "default";
	pinctrl-0 = <&i2c4m2_xfer>;

	sc3336: sc3336@30 {
		compatible = "smartsens,sc3336";
		status = "okay";
		reg = <0x30>;
		clocks = <&cru MCLK_REF_MIPI0>;
		clock-names = "xvclk";
		pwdn-gpios = <&gpio3 RK_PC5 GPIO_ACTIVE_HIGH>;
		pinctrl-names = "default";
		pinctrl-0 = <&mipi_refclk_out0>;
		rockchip,camera-module-index = <0>;
		rockchip,camera-module-facing = "back";
		rockchip,camera-module-name = "CMK-OT2119-PC1";
		rockchip,camera-module-lens-name = "30IRC-F16";
		port {
			sc3336_out: endpoint {
				remote-endpoint = <&csi_dphy_input0>;
				data-lanes = <1 2>;
			};
		};
	};

}

 

点评

楼主的探究精神很强!又去找了下具体的原因  详情 回复 发表于 2024-2-17 16:20
 
 
 

回复

364

帖子

0

TA的资源

版主

板凳
 
sonicfirr 发表于 2024-2-13 19:26 测评跟踪报告:在本篇完成后,在继续分析Luckfox Pro Max设备文件中发现,另一个文件“RV10 ...

楼主的探究精神很强!又去找了下具体的原因

点评

谢谢夸奖,也是随意浏览了一下。  详情 回复 发表于 2024-2-18 19:31
 
 
 

回复

155

帖子

1

TA的资源

一粒金砂(高级)

4
 
LitchiCheng 发表于 2024-2-17 16:20 楼主的探究精神很强!又去找了下具体的原因

谢谢夸奖,也是随意浏览了一下。

 
 
 

回复

731

帖子

4

TA的资源

纯净的硅(高级)

5
 

 

非常感谢楼主分享的技术信息,内容详实,很有参考价值,值得收藏学习

点评

谢谢支持  详情 回复 发表于 2024-3-1 21:52
 
 
 

回复

155

帖子

1

TA的资源

一粒金砂(高级)

6
 
chejm 发表于 2024-2-28 21:25   非常感谢楼主分享的技术信息,内容详实,很有参考价值,值得收藏学习

谢谢支持

 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

7
 

请问基于ubuntu的固件应该如何驱动oled?

点评

我没有做ubuntu的OLED驱动,不过大概流程应该差不多,比如:要先看看ubuntu下有没有I2C的设备文件,然后安装Python,smbus库。因为底层接口都是基于设备文件,所以只有I2C设备存在,Python应该很容易做好移植的。  详情 回复 发表于 2024-3-11 23:07
 
 
 

回复

155

帖子

1

TA的资源

一粒金砂(高级)

8
 
tt2nn 发表于 2024-3-11 15:16 请问基于ubuntu的固件应该如何驱动oled?

我没有做ubuntu的OLED驱动,不过大概流程应该差不多,比如:要先看看ubuntu下有没有I2C的设备文件,然后安装Python,smbus库。因为底层接口都是基于设备文件,所以只有I2C设备存在,Python应该很容易做好移植的。

如果不存在I2C设备文件,应该从设备树文件入手,重新编译内核。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
【EEWORLD模块整理】+tlc2543(A/D)

今年我用的模块资料 已经证实好用

FPGA DCM时钟管理单元的理解

看Xilinx的Datasheet会注意到Xilinx的FPGA没有PLL,其实DCM就是时间管理单元。 --------------------------------------------- ...

电烙铁的使用小技巧

本人原创——乃自己当时查阅的资料和自己的一点点经验而写成,如有错误请多指教! 首先要说明的是,使用电烙 ...

ubuntu下修改内核发生“ncurses libraries“错误(解决方法)

BSEC@bsec-server:~/kernel/Kernel$ make menuconfig HOSTCC scripts/basic/fixdep HOSTCC scripts/basic/docproc HOSTCC script ...

在屏幕上显示大写字母DMH的VGA控制器

本帖最后由 PuesueDream 于 2015-7-22 17:18 编辑 基于ise14.7平台,用Nexys3开发板弄了一个显示程序。程序包含六部分 首 ...

msp430f149波特率设置

本帖最后由 灞波儿奔 于 2020-1-10 23:14 编辑 TI MSP430系列单片机,usart模块的波特率值设定是通过以下三个寄存器决定的 ...

为什么给一个变量赋值0时,直接写=0,而给它赋值0xffffffff时要写成=0xffffffffu

为什么给一个变量赋值0时,直接写*ram=0即可,而给它赋值0xffffffff时要写成*ram=0xffffffffu, 以下是具体的代码 /****** ...

报名提醒:最后几小时,100套价值390元平头哥RISC-V生态开发板免费送~

最后几小时啦,想要的网友速速来~100套价值390元平头哥RISC-V生态开发板——RVB2601来袭,现在提交创意,即有机会免费 ...

在现代计算机上运行虚拟Mac Quadra 900

682909 macintosh.js 是一个模拟 1991 年 Macintosh Quadra 900 和摩托罗拉 CPU 的虚拟机,它完全用 JavaScript 编写(因此请 ...

反激电源辅助供电绕组串联电阻

看到很多反激电源辅助绕组串联电阻的,如下图电阻Rvcc,想问一下这个电阻的作用是什么?

关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表