SSD1306 oled显示屏的驱动SPI接口

有IIC接口 和SPI接口 还有8080,6080接口等

arduino SPI接口

直接使用u8g2库实现

//U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);

asrpro(SPI接口按下方修改,IIC接口官方有驱动)

1.下载U8g2库文件 GitHub - olikraus/u8g2: U8glib library for monochrome displays, version 2在D:\天问Block\asrpro\asr_pro_sdk\下新建  U8G2目录  将csrc目录下的所有文件复制到 U8G2目录下

2.将U8G2源文件与头文件添加到 d:\天问Block\asrpro\asr_pro_sdk\projects\offline_asr_sample\project_file\source_file.prj

使用source-file:U8G2/xx.c 添加U8G2下的所有c文件

include-path:U8G2 //添加头文件

3.示例代码:

//接线引脚  MOSI PA5    SCK PA6     DC PA3    CS PA2#define CS_PIN 2
#define CS_GPIO_PIN gpio_pin_2
#define DC_PIN 3
#define DC_GPIO_PIN gpio_pin_3
#define RST_PIN 1
#define RST_GPIO_PIN gpio_pin_1
// #define SCK_PIN 5
// #define MOSI_PIN 6
#define SCK_PIN 6
#define MOSI_PIN 5//#define SCK_GPIO_PIN gpio_pin_5
//#define MOSI_GPIO_PIN gpio_pin_6/* 宏定义 --------------------------------------------------------------------*/#define MOSI  MOSI_PIN
#define SCK SCK_PIN
#define DC DC_PIN
#define CS CS_PIN#include "asr.h"
extern "C"{ void * __dso_handle = 0 ;}
#include "setup.h"
#include "myLib/luxiaoban.h"
#include "HardwareSerial.h"
#include "../U8G2/u8g2.h"void hardware_init();
void emo_class();
void weather_class();//u8g2_t u8g2;/my initvoid ssd1306_spi_init(){pinMode(CS,output);pinMode(DC,output);//pinMode(RST_PIN,output);pinMode(SCK,output);pinMode(MOSI,output);}uint8_t u8x8_avr_gpio_and_delay(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr){// Re-use library for delaysswitch(msg){//mscase U8X8_MSG_DELAY_MILLI:delay(1);break;//10 uscase U8X8_MSG_DELAY_10MICRO:delay10us();break;//1 nscase U8X8_MSG_DELAY_NANO:delay1us();break;case U8X8_MSG_DELAY_100NANO:delay1us();break;case U8X8_MSG_GPIO_AND_DELAY_INIT:  // called once during init phase of u8g2/u8x8ssd1306_spi_init();break;              // can be used to setup pinscase U8X8_MSG_GPIO_SPI_CLOCK:        // Clock pin: Output level in arg_intif(arg_int)digitalWrite(SCK,1);elsedigitalWrite(SCK,0);break;case U8X8_MSG_GPIO_SPI_DATA:        // MOSI pin: Output level in arg_intif(arg_int)digitalWrite(MOSI,1);elsedigitalWrite(MOSI,0);break;case U8X8_MSG_GPIO_CS:        // CS (chip select) pin: Output level in arg_intif(arg_int)digitalWrite(CS,1);elsedigitalWrite(CS,0);break;case U8X8_MSG_GPIO_DC:        // DC (data/cmd, A0, register select) pin: Output level in arg_intif(arg_int)digitalWrite(DC,1);elsedigitalWrite(DC,0);break;case U8X8_MSG_GPIO_RESET:     // Reset pin: Output level in arg_intdefault:break;}return 1;
}void u8g2Init(u8g2_t *u8g2)
{u8g2_Setup_ssd1306_128x64_noname_f(u8g2, U8G2_R0, u8x8_byte_4wire_sw_spi, u8x8_avr_gpio_and_delay);u8g2_InitDisplay(u8g2);u8g2_SetPowerSave(u8g2, 0);u8g2_ClearBuffer(u8g2);
}class u8g2_class
{public:u8g2_t u8g2;void u8g2_init(){u8g2_Setup_ssd1306_128x64_noname_f(&u8g2, U8G2_R0, u8x8_byte_4wire_sw_spi, u8x8_avr_gpio_and_delay);u8g2_InitDisplay(&u8g2);u8g2_SetPowerSave(&u8g2, 0);u8g2_ClearBuffer(&u8g2);}void sendBuffer(void) { u8g2_SendBuffer(&u8g2); }void clearBuffer(void) { u8g2_ClearBuffer(&u8g2); }   u8g2_uint_t drawGlyph(u8g2_uint_t x, u8g2_uint_t y, uint16_t encoding) { return u8g2_DrawGlyph(&u8g2, x, y, encoding); }   u8g2_uint_t drawGlyphX2(u8g2_uint_t x, u8g2_uint_t y, uint16_t encoding) { return u8g2_DrawGlyphX2(&u8g2, x, y, encoding); }   void setColorIndex(uint8_t color_index) { u8g2_SetDrawColor(&u8g2, color_index); }void setFont(const uint8_t  *font) {u8g2_SetFont(&u8g2, font); }void setFontMode(uint8_t  is_transparent) {u8g2_SetFontMode(&u8g2, is_transparent); }void setBitmapMode(uint8_t is_transparent){ u8g2_SetBitmapMode(&u8g2, is_transparent); }void drawBitmap(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t cnt, u8g2_uint_t h, const uint8_t *bitmap){ u8g2_DrawBitmap(&u8g2, x, y, cnt, h, bitmap); }void drawXBM(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, const uint8_t *bitmap){ u8g2_DrawXBM(&u8g2, x, y, w, h, bitmap); }void drawXBMP(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, const uint8_t *bitmap){ u8g2_DrawXBMP(&u8g2, x, y, w, h, bitmap); }};

stm32arduino

stm32f103xx系列 arduino 下直接使用u8g2示列,不需设置引脚与时钟

添加:U8X8_SSD1306_128X64_NONAME_4W_SW_SPI u8x8(/* clock=*/ PA5, /* data=*/ PA7, /* cs=*/ PA4, /* dc=*/ PA6, /* reset=*/ PA3);

ESP32

未试验,应是同的

树莓派

使用luma.oled 库或是adafruit_ssd1306(python) adafruit_circuitpython_ssd1306

u8g2在树莓派中支持并不好,不推荐使用(暂时无办法)

https://github.com/rm-hull/luma.oled oled驱动程序

https://github.com/rm-hull/luma.examples 示列

详细介绍在文件目录下的README.rst中

执行以下命令进行安装

 1.$ sudo usermod -a -G i2c,spi,gpio pi  //【好像没什么用】
 2.$ sudo apt install python3-dev python3-pip python3-numpy libfreetype6-dev libjpeg-dev build-essential  //【安装依赖包,树莓派中好像已经有了】
 3.$ sudo apt install libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev libportmidi-dev  //【安装依赖包,树莓派中好像已经有了】
 
 4.Log out and in again and clone this repository:: //【退出,重新进入】
 
 5.$ git clone https://github.com/rm-hull/luma.examples.git  //【在树莓中下载代码包】
 6.$ cd luma.examples 
 
 7.$ sudo -H pip install -e .  //【上述步骤完成后,执行些程序(跳过上面步骤直接执行此好像也可以,会出现下载错误,多次执行(注意 -e . 后面的点)】
运行方式: 进入luma.examples目录下 执行选择下列进行执行

使用SPI接口

python3 animated_gif.py --interface spi 或 -i spi

使用I2C 接口

python3 animated_gif.py --interface i2c 或 -i i2c

使用pygame 在桌面上显示

python3 tv_snow.py -d pygame

示列:

python3 3d_box.py -d pygame

luckfox

官方有驱动程序,使用oled示列修改

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

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

相关文章

数据结构OJ题

目录 1.字符串左旋 2.字符串旋转结果 3.旋转数组 4.移除元素 本篇主要是讲解一些OJ题目。 1.字符串左旋 字符串左旋 实现一个函数,可以左旋字符串中的k个字符 例如: ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 方法1【暴力求解】 翻转1…

MSQL系列(八) Mysql实战-SQL存储引擎

Mysql实战-SQL存储引擎 前面我们讲解了索引的存储结构,BTree的索引结构,我们一般都知道Mysql的存储引擎有两种,MyISAM和InnoDB,今天我们来详细讲解下Mysql的存储引擎 文章目录 Mysql实战-SQL存储引擎1.存储引擎2.MyISAM的特点3. InnoDB的特…

Godot 官方2D C#重构(4):TileMap进阶使用

文章目录 前言完成内容项目节点结构TileMap设置图片资源备选图片添加物理碰撞添加y轴遮罩判断Y Sort Enable是干什么的? 脚本代码 前言 Godot 官方 教程 Godot 2d 官方案例C#重构 专栏 Godot 2d 重构 github地址 完成内容 项目节点结构 TileMap设置 图片资源 备选图…

Leetcode—21.合并两个有序链表【简单】

2023每日刷题(十三) Leetcode—21.合并两个有序链表 直接法实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* mergeTwoLists(struct ListNode* list1, struct…

Error: no matching distribution found for tensorflow-cpu==2.6.*

目录 install_tensorflow()安装过程中遇到的问题 查找解决方案过程中: 解决办法: install_tensorflow()安装过程中遇到的问题 在服务器上安装tensorflow时,遇到了一个报错信息: 在网上找到一个类似的错误(TensorFlow…

Django 全局配置 settings 详解

文章目录 1 概述1.1 Django 目录结构 2 常用配置:settings.py2.1 注册 APP:INSTALLED_APPS2.2 模板路径:TEMPLATES2.3 静态文件:STATICFILES_DIRS2.4 数据库:DATABASES2.5 允许访问的主机:ALLOWED_HOSTS 1 …

大数据-Storm流式框架(五)---DRPC

DRPC 概念 分布式RPC(DRPC)背后的想法是使用Storm在运行中并行计算真正强大的函数。 Storm拓扑接收函数参数流作为输入,并为每个函数调用发送结果的输出流。 DRPC并不是Storm的一个特征,因为它基于Storm的spouts,bo…

Ansible脚本进阶---playbook

目录 一、playbooks的组成 二、案例 2.1 在webservers主机组中执行一系列任务,包括禁用SELinux、停止防火墙服务、安装httpd软件包、复制配置文件和启动httpd服务。 2.2 在名为dbservers的主机组中创建一个用户组(mysql)和一个用户&#xf…

二进制部署kubernetes集群的推荐方式

软件版本: 软件版本containerdv1.6.5etcdv3.5.0kubernetesv1.24.0 一、系统环境 1.1 环境准备 角色IP服务k8s-master01192.168.10.10etcd、containerd、kube-apiserver、kube-scheduler、kube-controller-manager、kubele、kube-proxyk8s-node01后续etcd、conta…

论坛介绍 | COSCon'23 开源文化(GL)

众多开源爱好者翘首期盼的开源盛会:第八届中国开源年会(COSCon23)将于 10月28-29日在四川成都市高新区菁蓉汇举办。本次大会的主题是:“开源:川流不息、山海相映”!各位新老朋友们,欢迎到成都&a…

【Qt】文件系统

文章目录 文件系统文件操作案例:显示路径到标题框,显示内容到文本框对文件进行写操作获取文件相关信息 文件系统 Qt 通过QIODevice提供了对 I/O 设备的抽象,这些设备具有读写字节块的能力,下面是 I/O 设备的类图: QIO…

缓解大模型幻觉问题的解决方案

本文记录大模型幻觉问题的相关内容。 参考:Mitigating LLM Hallucinations: a multifaceted approach 地址:https://amatriain.net/blog/hallucinations (图:解决大模型幻觉的不同方式) 什么是幻觉? 幻觉…

掌握CSS Flexbox,打造完美响应式布局,适配各种设备!

🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! ​ 目录 ⭐ 专栏简介 📘 文章引言 基…

Hover:借贷新势力崛起,在经验与创新中找寻平衡

复苏中的Cosmos 如果让我选择一个最我感到可惜的区块链项目,我会选择Cosmos。 Cosmos最早提出并推动万链互联的概念,希望打通不同链之间的孤岛,彼时和另一个天王项目Polkadot号称跨链双雄。其跨链技术允许不同的区块链网络互相通信&#xf…

M1安装OpenPLC Editor

下载OpenPLC Editor for macOS.zip文件后,使用tar -zvxf命令解压,然后将"OpenPLC Editor"拖入到"应用程序"文件夹 右键点击"OpenPLC Editor",打开这个""文件,替换为以下内容 #!/bin/bash…

分布式锁其实很简单,6行代码教你实现redis分布式锁

一、前言 分布式锁是一种用于协调分布式系统中多个节点之间对共享资源进行访问控制的机制。它可以确保在分布式环境下,同一时间只有一个节点能够获取到锁,并且其他节点需要等待释放锁后才能获取。 以下是使用分布式锁的几个常见场景和原因:…

「常识」浮点数和定点数

浮点数和定点数 本篇文章旨在简短的介绍浮点数、定点数的定义,以及一些常见的数制、补码。 一、常识 如果缺少以下常识的话,将很难理解浮点数和定点数的概念。 1、数 自然数整数/分数小数:有限小数、无限循环小数、无限不循环小数实数&a…

2.2 消元法的概念

一、消元法介绍 消元法(elimination)是一个求解线性方程组的系统性方法。下面是使用消元法求解一个 2 2 2\times2 22 线性方程组的例子。消元之前,两个方程都有 x x x 和 y y y,消元后,第一个未知数 x x x 将从第…

APC学习记录

文章目录 APC概念APC插入、执行过程逆向分析插入过程执行过程总结 代码演示参考资料 APC概念 APC全称叫做异步过程调用,英文名是 Asynchronous Procedure Call,在进行系统调用、线程切换、中断、异常时会进行触发执行的一段代码,其中主要分为…

机器学习 | 决策树算法

一、决策树算法概述 1、树模型 决策树:从根节点开始一步步走到叶子节点(决策)。所有的数据最终都会落到叶子节点,既可以做分类也可以做回归。 在分类问题中,表示基于特征对实例进行分类的过程,可以认为是if-then的集合&#xff0…