Orangepi配合IIC驱动OLED屏幕

目录

一、OLED屏幕

二、Orangepi的IIC接口及OLED屏幕硬件接线

2.1 Orangepi的IIC接口:

2.2 Orangepi与OLED屏幕硬件接线:

三、wiringPi库示例代码

3.1 wiringPi库OLED屏幕示例代码:

3.2 OLED显示自己想要的字符:


一、OLED屏幕

二、Orangepi的IIC接口及OLED屏幕硬件接线

2.1 Orangepi的IIC接口:

  • 由 26pin 的原理图可知, Orange Pi Zero 2 可用的 i2c 为 i2c3

  • 启动Linux系统后先确认一下在/dev/目录下的IIC设备节点,全志H616用的是I2C-3设备节点,但是我们使用的是Linux5.16的内核系统,I2C-3默认是关闭的需要手动打开才能使用:

在/boot/orangepiEnv.txt中加入overlays=i2c3这个配置,然后重启Linux系统就能打开i2c-3sudo vim /boot/orangepiEnv.txtoverlays=i2c3

从命令运行结果能观察到系统支持I2C-3、I2C-3和I2C-5的驱动,而H616的外设我们看到只有一个IIC接口,用的是IIC-3,Linux一切皆文件,每个硬件设备“对应”一个文件,由驱动程序提供映射

  • 开始测试I2C,首先安装i2c-tools

sudo apt-get install i2c-tools

  • 列出连接到I2C总线的设备的地址

sudo i2cdetect -y 3

2.2 Orangepi与OLED屏幕硬件接线:

三、wiringPi库示例代码

3.1 wiringPi库OLED屏幕示例代码:

/** Copyright (c) 2015, Vladimir Komendantskiy* MIT License** SSD1306 demo of block and font drawing.*///
// fixed for OrangePiZero by HypHop
//#include <errno.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdint.h>#include "oled.h"
#include "font.h"int oled_demo(struct display_info *disp) {int i;char buf[100];//putstrto(disp, 0, 0, "Spnd spd  2468 rpm");//	oled_putstrto(disp, 0, 9+1, "Spnd cur  0.46 A");oled_putstrto(disp, 0, 9+1, "Welcome       to");disp->font = font1;//	oled_putstrto(disp, 0, 18+2, "Spnd tmp    53 C");oled_putstrto(disp, 0, 18+2, "----OrangePi----");disp->font = font2;//	oled_putstrto(disp, 0, 27+3, "DrvX tmp    64 C");oled_putstrto(disp, 0, 27+3, "This is 0.96OLED");oled_putstrto(disp, 0, 36+4, "");oled_putstrto(disp, 0, 45+5, "");disp->font = font1;//	oled_putstrto(disp, 0, 54, "Total cur  2.36 A");oled_putstrto(disp, 0, 54, "*****************");oled_send_buffer(disp);disp->font = font3;for (i=0; i<100; i++) {sprintf(buf, "Spnd spd  %d rpm", i);oled_putstrto(disp, 0, 0, buf);oled_putstrto(disp, 135-i, 36+4, "===");oled_putstrto(disp, 100, 0+i/2, ".");oled_send_buffer(disp);}//oled_putpixel(disp, 60, 45);//oled_putstr(disp, 1, "hello");return 0;
}void show_error(int err, int add) {//const gchar* errmsg;//errmsg = g_strerror(errno);printf("\nERROR: %i, %i\n\n", err, add);//printf("\nERROR\n");
}void show_usage(char *progname) {printf("\nUsage:\n%s <I2C bus device node >\n", progname);
}int main(int argc, char **argv) {int e;char filename[32];struct display_info disp;if (argc < 2) {show_usage(argv[0]);return -1;}memset(&disp, 0, sizeof(disp));sprintf(filename, "%s", argv[1]);disp.address = OLED_I2C_ADDR;disp.font = font2;e = oled_open(&disp, filename);if (e < 0) {show_error(1, e);} else {e = oled_init(&disp);if (e < 0) {show_error(2, e);} else {printf("---------start--------\n");if (oled_demo(&disp) < 0)show_error(3, 777);printf("----------end---------\n");}}return 0;
}
cp /home/orangepi/wiringOP/examples/oled_demo.c .	//拷贝oled_demo.c文件到waishe路径下
./build.sh oled_demo.c								//编译oled_demo.c
sudo ./a.out /dev/i2c-3								//运行程序

3.2 OLED显示自己想要的字符:

/** Copyright (c) 2015, Vladimir Komendantskiy* MIT License** SSD1306 demo of block and font drawing.*/
#include <errno.h> 		// 包含错误处理相关的头文件
#include <string.h> 	// 包含字符串处理相关的头文件
#include <stdio.h> 		// 包含标准输入输出相关的头文件
#include <stdlib.h> 	// 包含标准库函数相关的头文件
#include <time.h> 		// 包含时间处理相关的头文件
#include <stdint.h> 	// 包含标准整数类型相关的头文件
#include "oled.h" 		// 包含OLED显示相关的头文件
#include "font.h" 		// 包含字体相关的头文件// 在OLED显示屏上显示文本和图形
int oled_show(struct display_info *disp)
{int i;char buf[100];oled_putstrto(disp, 0, 0, "***  SYH LOVE RY  ***");						// 显示欢迎信息disp->font = font2;														// 设置字体为font2oled_putstrto(disp, 10, 20, "Welcome       to");						// 显示欢迎信息disp->font = font2;														// 设置字体为font2oled_putstrto(disp, 10, 30, "----OrangePi----");						// 显示欢迎信息disp->font = font2;														// 设置字体为font2oled_putstrto(disp, 0, 50, "-- Mr.shi handsome --");					// 显示欢迎信息disp->font = font2;														// 设置字体为font2oled_send_buffer(disp);													// 发送显示缓冲区到OLED显示屏return 0;
}// 显示错误信息
void show_error(int err, int add)
{printf("\nERROR: %i, %i\n\n", err, add);
}// 显示程序使用方法
void show_usage(char *progname) 
{printf("\nUsage:\n%s <I2C bus device node >\n", progname);
}// 主函数,程序入口
int main(int argc, char **argv) 
{int e;char filename[32];																// 定义文件名字符串	struct display_info disp;														// 定义显示信息结构体if (argc < 2) {																	// 参数个数不足show_usage(argv[0]);														// 显示程序使用方法return -1;}memset(&disp, 0, sizeof(disp));													// 清空显示信息结构体sprintf(filename, "%s", argv[1]);												// 拷贝参数到文件名字符串disp.address = OLED_I2C_ADDR;													// 设置OLED显示屏的I2C地址disp.font = font2;																// 设置字体为font2e = oled_open(&disp, filename);													// 打开OLED显示屏e = oled_init(&disp);															// 初始化OLED显示屏oled_show(&disp);																// 显示欢迎信息return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/41769.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

unix高级编程系列之文件I/O

背景 作为linux 开发者&#xff0c;我们不可避免会接触到文件编程。比如通过文件记录程序配置参数&#xff0c;通过字符设备与外设进行通信。因此作为合格的linux开发者&#xff0c;一定要熟练掌握文件编程。在文件编程中&#xff0c;我们一般会有两类接口函数&#xff1a;标准…

Mysql慢日志、慢SQL

慢查询日志 查看执行慢的SQL语句&#xff0c;需要先开启慢查询日志。 MySQL 的慢查询日志&#xff0c;记录在 MySQL 中响应时间超过阀值的语句&#xff08;具体指运行时间超过 long_query_time 值的SQL。long_query_time 的默认值为10&#xff0c;意思是运行10秒以上(不含10秒…

实现基于Spring Boot的Web安全防护

实现基于Spring Boot的Web安全防护 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在当今互联网应用的开发中&#xff0c;保护用户数据和系统安全至关重要。S…

阿里云RDS云数据库库表恢复操作

最近数据库中数据被人误删了,记录一下恢复操作方便以后发生时进行恢复. 1.打开控制台&#xff0c;进入云数据库实例. 2.进入实例后 &#xff0c;点击右侧的备份恢复&#xff0c;然后看一下备份时间点&#xff0c;中间这边都是阿里云自动备份的备份集&#xff0c;基本都是7天一备…

详解「一本通 5.1 练习 1」括号配对(区间DP经典题)

一.题目 二.思路 题目的大意是说:给你一个只由[ ] ( )构成的字符串&#xff0c;请问需要增加多少个字符才能使其变为一个合法的括号序列。 因为添加若干字符使其达到匹配的目的等价于将不匹配的字符去除使得字符串达到匹配的目的 所以这题只需计算出已匹配完成的括号数,再…

中英双语介绍伦敦金融城(City of London)

中文版 伦敦金融城&#xff0c;通常称为“金融城”或“城”&#xff08;The City&#xff09;&#xff0c;是英国伦敦市中心的一个著名金融区&#xff0c;具有悠久的历史和全球性的影响力。以下是关于伦敦金融城的详细介绍&#xff0c;包括其地理位置、人口、主要公司、历史背…

机器学习原理之 -- 随机森林分类:由来及原理详解

随机森林分类器是机器学习中一种强大且灵活的集成学习方法。它通过构建多棵决策树并结合其结果来提高分类精度和稳定性。本文将详细介绍随机森林分类器的由来、基本原理、构建过程及其优缺点。 二、随机森林的由来 随机森林&#xff08;Random Forest&#xff09;由Leo Breima…

【优化论】约束优化算法

约束优化算法是一类专门处理目标函数在存在约束条件下求解最优解的方法。为了更好地理解约束优化算法&#xff0c;我们需要了解一些核心概念和基本方法。 约束优化的核心概念 可行域&#xff08;Feasible Region&#xff09;&#xff1a; 比喻&#xff1a;想象你在一个园艺场…

基于机器学习的永磁同步电机矢量控制策略-高分资源-下载可用!

基于机器学习的永磁同步电机矢量控制策略 优势 训练了RL-Agent&#xff0c;能够提高电机在非线性负载下的性能。 部分程序 仿真结果 转矩估计及dq轴电流。 代码有偿&#xff0c;50&#xff0c;需要的可以联系。

数学建模算法目标规划

在人们的生产实践中&#xff0c;经常会遇到如何利用现有资源来安排生产&#xff0c;以取得最大经济 效益的问题。此类问题构成了运筹学的一个重要分支—数学规划&#xff0c;而线性规划(Linear Programming 简记 LP)则是数学规划的一个重要分支。特别是在计算机能处理成千上万个…

底层软件 | STM32启动分析之main函数是怎样跑起来的

应届生面试&#xff0c;基本上嵌入式一般都是基于32的项目&#xff0c;记得我当年面大疆的就是有这个题目。 1、STM32启动规则 STM32根据boot0和boot1的电平决定启动位置&#xff0c;boot00时从主Flash启动&#xff0c;即0x08000000地址启动。 按照spec&#xff0c;M3核的中断…

构建工程化:多种不同的工程体系如何编写MakeFile

源码分析 核心MakeFile 这个 Makefile 是一个复杂的构建脚本&#xff0c;用于管理和构建一个大型项目。它包括多个目标、条件判断和递归调用 make 命令来处理多个子项目和子目录。让我们逐部分进行详细解析。 伪目标和变量定义 .PHONY: all clean install build test init.…

依赖注入的优点、解决的问题以及其底层原理和逻辑

依赖注入&#xff08;Dependency Injection, DI&#xff09;是一种设计模式&#xff0c;用于实现控制反转&#xff08;Inversion of Control, IoC&#xff09;。它通过将对象的依赖关系从类内部转移到外部配置或注入&#xff0c;从而提高代码的可维护性、可测试性和可扩展性。以…

使用Spring Boot和Apache Camel集成第三方服务

使用Spring Boot和Apache Camel集成第三方服务 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨如何利用Spring Boot和Apache Camel来集成第三方服…

pycharm如何使用jupyter

目录 配置jupyter新建jupyter文件别人写的方法&#xff08;在pycharm种安装&#xff0c;在网页中使用&#xff09; pycharm专业版 配置jupyter 在pycharm终端启动一个conda虚拟环境&#xff0c;输入 conda install jupyter会有很多前置包需要安装&#xff1a; 新建jupyter…

一文理清LK光流

举出几种光流方法&#xff0c;说明LK光流的建模方式&#xff1f; 光流方法是用于估计图像序列中像素点运动的技术&#xff0c;广泛应用于计算机视觉和视频处理领域。以下是几种常见的光流方法&#xff1a; Lucas-Kanade (LK) 方法&#xff1a; 一种基于局部窗口的光流估计方法…

代理IP在未来将面临哪些挑战?

今天我们来聊聊代理IP在未来可能会面临的挑战。虽然代理IP技术目前应用广泛&#xff0c;但随着科技的发展和网络环境的变化&#xff0c;代理IP也将面临一些新的挑战。让我们一起来看看这些挑战是什么吧&#xff01; 1. 更严格的网络封锁和检测 现代社会各行各业都在飞速发展&…

可变参数 Collections 不可变集合 Stream流

目录 1.可变参数&#xff1a; 2.Collections: 3.不可变集合&#xff1a; 4.Stream流: 1、什么是流 2、如何生成流 1.单列集合获取Stream流 2.双列集合获取Stream流 3.数组获取Stream流&#xff1a; 4.一堆零散数据&#xff1a; Stream接口中的静态方法 3.Stream流的…

解决分布式环境下session共享问题

在分布式环境下&#xff0c;session会存在两个问题 第一个问题:不同域名下&#xff0c;浏览器存储的jsessionid是没有存储的。比如登录时认证服务auth.gulimall.com存储了session&#xff0c;但是搜索服务search.gulimall.com是没有这个session的&#xff1b; 第二个问题&…

基于SpringBoot的校园台球厅人员与设备管理系统

本系统是要设计一个校园台球厅人员与设备管理系统&#xff0c;这个系统能够满足校园台球厅人员与设备的管理及用户的校园台球厅人员与设备管理功能。系统的主要功能包括首页、个人中心、用户管理、会员账号管理、会员充值管理、球桌信息管理、会员预约管理、普通预约管理、留言…