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秒…

阿里云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;包括其地理位置、人口、主要公司、历史背…

【优化论】约束优化算法

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

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

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

数学建模算法目标规划

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

pycharm如何使用jupyter

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

可变参数 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;这个系统能够满足校园台球厅人员与设备的管理及用户的校园台球厅人员与设备管理功能。系统的主要功能包括首页、个人中心、用户管理、会员账号管理、会员充值管理、球桌信息管理、会员预约管理、普通预约管理、留言…

w3wp.exe 中发生未处理的 Microsoft ,NETFramework 异常。

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

Spring 6.1.10版本源码编译

每篇一句 我们对时间的感知其实非常主观&#xff0c;我们越习惯于我们的生活方式&#xff0c;生活里面的新鲜感就越少&#xff0c;我们对时间 的感知就越快&#xff0c;生命就越短。 1.源码下载 进入Spring官网 https://spring.io/ 按照上图步骤进入如下Spring Framework链…

罗剑锋的C++实战笔记学习(二):容器、算法库、多线程

4、容器 1&#xff09;、容器的通用特性 所有容器都具有的一个基本特性&#xff1a;它保存元素采用的是值&#xff08;value&#xff09;语义&#xff0c;也就是说&#xff0c;容器里存储的是元素的拷贝、副本&#xff0c;而不是引用 容器操作元素的很大一块成本就是值的拷贝…

RAG 工业落地方案框架(Qanything、RAGFlow、FastGPT、智谱RAG)细节比对!CVPR自动驾驶最in挑战赛赛道,全球冠军被算力选手夺走了

RAG 工业落地方案框架&#xff08;Qanything、RAGFlow、FastGPT、智谱RAG&#xff09;细节比对&#xff01;CVPR自动驾驶最in挑战赛赛道&#xff0c;全球冠军被算力选手夺走了。 本文详细比较了四种 RAG 工业落地方案 ——Qanything、RAGFlow、FastGPT 和智谱 RAG&#xff0c;重…

SwiftUI 6.0(iOS 18.0)滚动视图新增的滚动阶段(Scroll Phase)监听功能趣谈

何曾几时&#xff0c;在 SwiftUI 开发中的秃头小码农们迫切需要一种能够读取当前滚动状态的方法。 在过去&#xff0c;他们往往需要借助于 UIKit 的神秘力量。不过这一切在 SwiftUI 6.0 中已成“沧海桑田”。 在本篇博文中&#xff0c;您将学到如下内容&#xff1a; 1. Scroll…

一份适合新手的软件测试练习项目

最近&#xff0c;不少读者托我找一个能实际练手的测试项目。开始&#xff0c;我觉得这是很简单的一件事&#xff0c;但当我付诸行动时&#xff0c;却发现&#xff0c;要找到一个对新手友好的练手项目&#xff0c;着实困难。 我翻了不下一百个web网页&#xff0c;包括之前推荐练…

nginx的知识面试易考点

Nginx概念 Nginx 是一个高性能的 HTTP 和反向代理服务。其特点是占有内存少&#xff0c;并发能力强&#xff0c;事实上nginx的并发能力在同类型的网页服务器中表现较好。 Nginx 专为性能优化而开发&#xff0c;性能是其最重要的考量指标&#xff0c;实现上非常注重效率&#…

linux驱动编程 - kfifo先进先出队列

简介&#xff1a; kfifo是Linux Kernel里面的一个 FIFO&#xff08;先进先出&#xff09;数据结构&#xff0c;它采用环形循环队列的数据结构来实现&#xff0c;提供一个无边界的字节流服务&#xff0c;并且使用并行无锁编程技术&#xff0c;即当它用于只有一个入队线程和一个出…