3486|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
 
 
 

回复

365

帖子

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 楼主的探究精神很强!又去找了下具体的原因

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

 
 
 

回复

755

帖子

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 技术支持

相关文章 更多>>
推荐帖子
[转帖]请不要做浮躁的嵌入式系统工程师

转抄网上的一个帖子:1.不要看到别人的回复,第一句话就说:给个代码吧!你应该想想为什么。当你自己想出来再参考别人的提示,你 ...

LPC1343 USB海量存储驱动方法,实现内部32k flash 读写操作(例程解析)

usbmsd_rom例程解析: 1、将指针映射到片上驱动程序表中: ROM ** rom = (ROM **) 0x1fff1ff8; 2、设置设备类型和信息: ...

给初学者一个建议:不要简单贴源代码

初学者最重要的是学习解决问题的方法,思路在此是最重要的,求得简单的答案对自己的成长其实很不利,初学者应求渔而非鱼。初学者 ...

[MSP430] 汉字字模数据结构提问

typedef struct typFNT_GB12 { char Index; //内码索引 是什么意思? uint8_t Msk; //点阵码数据大小 这个我大概知道意思 ...

沁恒CH579M-R1开发板免费测评活动即将推出,快来说说你对这块板子的看法吧~

沁恒CH579M-R1开发板 本评估板应用于 CH579 芯片的测试开发,配套上位机 ISP 工具,支持 USB 和串口 2 种 ISP 下载方式和 S ...

什么是单片机

单片机也就是单片微型计算机的简称,由于单片机主要作用于控制领域,所以国际上也通常将单片机称之为微型控制器,单片机与微型计 ...

城市被冰封了。。。

这两天,全国各地都在降温,特别是北方很多城市都有灾害性天气。 哈尔滨下了一场大雪之后,竟然罕见的下了一天雨,由于气温低 ...

32“万里”树莓派小车——Ubuntu系统配置成Raspberry Pi系统环境

习惯了树莓派Raspberry Pi操作系统,切换到Ubuntu MATE上会感觉诸多不适应,下面将Ubuntu系统配置成为Raspberry Pi系统环境。 ...

【技术干货】原来ARM+Linux音频方案如此简单!

嵌入式产品开发中经常遇到音频的输入输出问题,如何为其添加“喇叭”、“麦克风”设备呢?本文将简单介绍A ...

防爆电器产品中,本安电路设计是怎么确定输出电压和电流是不是符合标准要求?

防爆电器产品中,本安电路设计是怎么确定输出电压和电流是不是符合标准要求?

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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