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.pswp.cn/diannao/41769.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/41769.shtml
英文地址,請注明出處:http://en.pswp.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;這個系統能夠滿足校園臺球廳人員與設備的管理及用戶的校園臺球廳人員與設備管理功能。系統的主要功能包括首頁、個人中心、用戶管理、會員賬號管理、會員充值管理、球桌信息管理、會員預約管理、普通預約管理、留言…