当前位置: 首页 > news >正文

Hi3861 OpenHarmony嵌入式应用入门--0.96寸液晶屏 iic驱动ssd1306

使用iic驱动ssd1306,代码来源hihope\hispark_pegasus\demo\12_ssd1306

本样例提供了一个HarmonyOS IoT硬件接口的SSD1306 OLED屏驱动库,其功能如下:

  • 内置了128*64 bit的内存缓冲区,支持全屏刷新;
  • 优化了屏幕刷新速率,实测最大帧率10fps;
  • libm_port

是从musl libc中抽取的 sin和 cos的实现;

  • 用于规避链接Hi3861 SDK中的libm_flash.a报错的问题;
  • gif2imgs.py

可用于将gif动图中的帧分离出来;

  • 依赖 pillow 包,可以使用 pip install pillow 命令安装;
  • img2code.py

可用于将图片转为C数组,每个字节表示8个像素;

  • 依赖 opecv-python 包,可以使用 pip install opencv-python 命令安装;
  • 使用Harmony OS的IoT硬件接口;
  • 接口简洁易于使用、易于移植;
  • 内置了测试程序,可直接进行测试;

硬件原理图

IO口定义

I2C API

API名称

说明

I2cInit (WifiIotI2cIdx id, unsigned int baudrate)

用指定的波特速率初始化I2C设备

I2cDeinit (WifiIotI2cIdx id)

取消初始化I2C设备

I2cWrite (WifiIotI2cIdx id, unsigned short deviceAddr, const WifiIotI2cData *i2cData)

将数据写入I2C设备

I2cRead (WifiIotI2cIdx id, unsigned short deviceAddr, const WifiIotI2cData *i2cData)

从I2C设备中读取数据

I2cWriteread (WifiIotI2cIdx id, unsigned short deviceAddr, const WifiIotI2cData *i2cData)

向I2C设备发送数据并接收数据响应

I2cRegisterResetBusFunc (WifiIotI2cIdx id, WifiIotI2cFunc pfn)

注册I2C设备回调

I2cSetBaudrate (WifiIotI2cIdx id, unsigned int baudrate)

设置I2C设备的波特率

ssd1306 API

API名称

说明

void ssd1306_Init(void)

初始化

void ssd1306_Fill(SSD1306_COLOR color)

以指定的颜色填充屏幕

void ssd1306_SetCursor(uint8_t x, uint8_t y)

定位光标

void ssd1306_UpdateScreen(void)

更新屏幕内容

char ssd1306_DrawChar(char ch, FontDef Font, SSD1306_COLOR color)

在屏幕缓冲区绘制1个字符

char ssd1306_DrawString(char* str, FontDef Font, SSD1306_COLOR color)

将完整字符串写入屏幕缓冲区

void ssd1306_DrawPixel(uint8_t x, uint8_t y, SSD1306_COLOR color)

在屏幕缓冲区中绘制一个像素

void ssd1306_DrawLine(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, SSD1306_COLOR color)

用Bresenhem算法画直线

void ssd1306_DrawPolyline(const SSD1306_VERTEX *par_vertex, uint16_t par_size, SSD1306_COLOR color)

绘制多段线

void ssd1306_DrawRectangle(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, SSD1306_COLOR color)

绘制矩形

void ssd1306_DrawArc(uint8_t x, uint8_t y, uint8_t radius, uint16_t start_angle, uint16_t sweep, SSD1306_COLOR color)

绘图角度

void ssd1306_DrawCircle(uint8_t par_x, uint8_t par_y, uint8_t par_r, SSD1306_COLOR color)

用Bresenhem算法画圆

void ssd1306_DrawBitmap(const uint8_t* bitmap, uint32_t size)

绘图位图

void ssd1306_DrawRegion(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t* data, uint32_t size, uint32_t stride)

绘制区域

修改D:\DevEcoProjects\test\src\vendor\rtplay\rt_hi3861\demo\BUILD.gn文件

# Copyright (c) 2023 Beijing HuaQing YuanJian Education Technology Co., Ltd
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# 
#    http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License. import("//build/lite/config/component/lite_component.gni")lite_component("demo") {features = [#"base_00_helloworld:base_helloworld_example",#"base_01_led:base_led_example",#"base_02_loopkey:base_loopkey_example",#"base_03_irqkey:base_irqkey_example",#"base_04_adc:base_adc_example",#"base_05_pwm:base_pwm_example","base_06_ssd1306:base_ssd1306_example",]
}

将D:\DevEcoProjects\test\src\vendor\hihope\hispark_pegasus\demo\12_ssd1306文件复制到D:\DevEcoProjects\test\src\vendor\rtplay\rt_hi3861\demo\base_06_ssd1306中

修改D:\DevEcoProjects\test\src\vendor\rtplay\rt_hi3861\demo\base_06_ssd1306\BUILD.gn

#Copyright (C) 2021 HiHope Open Source Organization .
#Licensed under the Apache License, Version 2.0 (the "License");
#you may not use this file except in compliance with the License.
#You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
#Unless required by applicable law or agreed to in writing, software
#distributed under the License is distributed on an "AS IS" BASIS,
#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#See the License for the specific language governing permissions and
#
#limitations under the License.import("//build/lite/config/component/lite_component.gni")lite_component("base_ssd1306_example") {features = ["ssd1306:oled_ssd1306","examples:oled_test","//third_party/libm_port:libm_port"]
}

目录结构

│  config.json
│
├─common
│  └─bsp
│      ├─include
│      └─src
├─demo
│  │  BUILD.gn
│  │
│  ├─base_00_helloworld
│  │      base_helloworld_example.c
│  │      BUILD.gn
│  │
│  ├─base_01_led
│  │      base_led_example.c
│  │      BUILD.gn
│  │
│  ├─base_02_loopkey
│  │      base_loopkey_example.c
│  │      BUILD.gn
│  │
│  ├─base_03_irqkey
│  │      base_irqkey_example.c
│  │      BUILD.gn
│  │
│  ├─base_04_adc
│  │      base_adc_example.c
│  │      BUILD.gn
│  │
│  ├─base_05_pwm
│  │      base_pwm_example.c
│  │      BUILD.gn
│  │
│  └─base_06_ssd1306
│      │  BUILD.gn
│      │  gif2imgs.py
│      │  img2code.py
│      │  LICENSE
│      │  README.md
│      │  requirements.txt
│      │
│      ├─examples
│      │      BUILD.gn
│      │      ssd1306_demo.c
│      │      ssd1306_tests.c
│      │      ssd1306_tests.h
│      │
│      └─ssd1306
│              BUILD.gn
│              ssd1306.c
│              ssd1306.h
│              ssd1306_conf.h
│
└─doc│  HarmonyOS开发板实验指导书 v2.1.pdf│  华清远见 FS_Hi3861开发指导.md│  华清远见 FS_Hi3861新手入门手册.md│├─board│      FS-Hi3861-V4.2.pdf│      FS-Hi3861QDB-V3.2.pdf│      hi-12f_kit_v1.1.0规格书-20211025.pdf│      hi-12f_v1.1.2-规格书-20211202.pdf│      nodemcu-hi-07s_12f-kit_v1.1-20210913.pdf│      RTplay2.01_A1_2024-06-20.pdf│└─figures

进行编译,编译好如下

烧写进开发板,运行效果如下

相关文章:

Hi3861 OpenHarmony嵌入式应用入门--0.96寸液晶屏 iic驱动ssd1306

使用iic驱动ssd1306,代码来源hihope\hispark_pegasus\demo\12_ssd1306 本样例提供了一个HarmonyOS IoT硬件接口的SSD1306 OLED屏驱动库,其功能如下: 内置了128*64 bit的内存缓冲区,支持全屏刷新;优化了屏幕刷新速率,…...

代码随想录训练营第二十二天 77组合

第一题: 原题链接:77. 组合 - 力扣(LeetCode) 思路: 经典的回溯模板题: 终止条件,当中间变量用来存储单个结果的大小等于k,则将中间变量存放到结果数组中。 一个for循环横向遍历…...

Unity踩坑记录

1. 如果同时在父物体和子物体上挂载BoxCollider&#xff0c;那么当使用&#xff1a; private void OnTriggerEnter2D(Collider2D collision){if (collision.CompareTag("CardGroup")){_intersectCardGroups.Add(collision.GetComponent<CardGroup>());}} 来判…...

内容安全复习 1 - 信息内容安全概述

文章目录 信息内容安全简介网络空间信息内容安全大模型 人工智能简介 信息内容安全简介 网络空间 网络空间是融合物理域、信息域、认知域和社会域&#xff0c;控制实体行为的信息活动空间。 上图展示了网络空间安全的结构。可以看到将网络空间划分为了网络域和内容域两个部分。…...

【深度学习】python之人工智能应用篇--跨模态生成技术

跨模态生成技术概述 跨模态生成技术是一种将不同模态的数据&#xff08;如文本、图像、音频、视频等&#xff09;进行融合和转换的技术。其目标是通过将一个模态的数据作为输入&#xff0c;生成与之对应的另一个模态的输出。这种技术对于突破单一模态的局限性&#xff0c;提高…...

springboot中获取某个注解下面的某个方法的方法名,参数值等等详细实例

在Spring Boot应用中&#xff0c;获取某个类或方法上的注解及其相关信息&#xff0c;包括方法名称、参数值等&#xff0c;通常涉及到反射和Spring的AOP&#xff08;面向切面编程&#xff09;特性。下面是一个示例&#xff0c;展示如何利用Spring AOP的Around注解来拦截带有特定…...

代码随想录——跳跃游戏Ⅱ(Leetcode 45)

题目链接 贪心 class Solution {public int jump(int[] nums) {if(nums.length 1){return 0;}int count 0;// 当前覆盖最远距离下标int curDistance 0;// 下一步覆盖距离最远下标int nextDistance 0;for(int i 0; i < nums.length; i){nextDistance Math.max(nums[…...

从0-1搭建一个web项目(package.json)详解

本章分析package.json文件详解 本文主要对packge.json配置子文件详解 ObJack-Admin一款基于 Vue3.3、TypeScript、Vite3、Pinia、Element-Plus 开源的后台管理框架。在一定程度上节省您的开发效率。另外本项目还封装了一些常用组件、hooks、指令、动态路由、按钮级别权限控制等…...

图解ReentrantLock的基石AQS-独占锁的获取与释放

大家好&#xff0c;我是呼噜噜&#xff0c;我们之前聊过Java中以互斥同步的方式保证线程安全&#xff1a;Sychronized&#xff0c;这次我们来再聊聊另一种互斥同步的方式Lock&#xff0c;本文会介绍ReentrantLock及其它的基石AQS的源码解析&#xff0c;一个非常重要的同步框架 …...

Perl语言入门学习读物

1. PERL 是什么? Perl 最初的设计者为Larry Wall&#xff0c;Perl借取了C、sed、awk、shell scripting以及很多其他程序语言的特性。Perl一般被称为“实用报表提取语言”(PracticalExtraction andReportLanguage)&#xff0c;有时也被称做“病态折中垃圾列表器”(Pathologica…...

电脑浏览器问题

网络连接正常&#xff0c;但是浏览器就是打不开网页&#xff0c;显示未连接什么的。 搞了半天&#xff0c;不是代理服务器问题。 也不是端口问题。 也不是软件版本问题。 竟然是浏览器插件的问题&#xff0c;插件禁用&#xff0c;奇迹般的好了。 参考&#xff1a; 电脑有网…...

[Docker] Ubuntu安装Home Assistant

本文主要记载一些Ubuntu安装Home Assistant的细节,方便后面重装。 1. 安装Docker 安装依赖 $ sudo apt-get install \apt-transport-https \ca-certificates \curl \gnupg-agent \software-properties-common添加 Docker 官方 GPG 密钥 $ curl -fsSL https://mirrors.ustc…...

浅谈请求中数据转换

目录 1. 前端 JS 数据类型2. JSON 数据类型&#xff08;数据传输格式&#xff09;3. 后端 Java 数据类型4. 后端序列化框架 Fastjson && Jackson 转换4.1. JSON 转换 Java4.2. Java 转换 JSON 1. 前端 JS 数据类型 数据类型示例Stringvar str 张三Number (数字)var a…...

Flutter学习:从搭建环境到运行

一、开发环境的搭建 本文所示内容都是在Windows系统下进行的。 1、下载 Flutter SDK Flutter 官网&#xff08;https://docs.flutter.cn/release/archive?tabwindows&#xff09; 或者通过 git clone -b master https://github.com/flutter/flutter.git 下载 2、配置环境…...

sheng的学习笔记-AI-聚类(Clustering)

ai目录 sheng的学习笔记-AI目录-CSDN博客 基础知识 什么是聚类 在“无监督学习”(unsupervised learning)中&#xff0c;训练样本的标记信息是未知的&#xff0c;目标是通过对无标记训练样本的学习来揭示数据的内在性质及规律&#xff0c;为进一步的数据分析提供基础。此类学…...

从0构建一个录制UI测试工具

很多UI自动化测试工具都具备录制UI自动化测试的能力&#xff0c;例如playwright&#xff0c;可以通过playwright vscode插件完成录制&#xff0c;如下图所示&#xff0c;当选择录制脚本时&#xff0c;会打开一个浏览器&#xff0c;在浏览器中输入被测应用url&#xff0c;用户在…...

代码随想录算法训练营第五十一天|LeetCode72 编辑距离、LeetCode647 回文子串、LeetCode516 最长回文子序列、动态规划的小总结

题1&#xff1a; 指路&#xff1a;72. 编辑距离 - 力扣&#xff08;LeetCode&#xff09; 思路与代码&#xff1a; 关于dp数组的定义&#xff0c;我们定义一个二维数组dp[i][j]&#xff0c;其含义为以i-1为结尾的字符串word1和以j-1为结尾的字符串word2&#xff0c;最近编辑…...

sessionStorage 能在多个标签页之间共享数据吗?

&#x1f9d1;‍&#x1f4bb; 写在开头 点赞 收藏 学会&#x1f923;&#x1f923;&#x1f923; 最近&#xff0c;我的一个朋友在面试中被一个关于 sessionStorage 的问题难住了。我们来聊聊这个话题。 sessionStorage 能在多个标签页之间共享数据吗&#xff1f; 在回答…...

鸿蒙期末项目(完结)

两天仅睡3个小时的努力奋斗之下&#xff0c;终于写完了这个无比拉跨的项目&#xff0c;最后一篇博客总体展示一下本项目运行效果兼测试&#xff0c;随后就是答辩被同学乱沙&#xff08;悲 刚打开软件&#xff0c;会看到如下欢迎界面&#xff0c;介绍本app的功能和优点 随后我们…...

【Linux】对共享库加载问题的深入理解——基本原理概述

原理概述 【linux】详解——库-CSDN博客 共享库被加载后&#xff0c;系统会为该共享库创建一个结构&#xff0c;这个结构体中的字段描述了库的各种属性。在内存中可能会加载很多库&#xff0c;每一个库都用一个结构体描述。把这些结构体用一些数据结构管理起来&#xff0c;系…...

easyui的topjui前端框架使用指南

博主今天也是第一次点开easyui的商业搜权页面&#xff0c;之前虽然一直在使用easyui前端框架&#xff08;easyui是我最喜欢的前端ui框架&#xff09;&#xff0c;但是都是使用的免费版。 然后就发现了easyui的开发公司居然基于easyui开发出了一个新的前端框架&#xff0c;于是我…...

Java中的程序异常处理介绍

一、异常处理机制 Java提供了更加优秀的解决办法&#xff1a;异常处理机制。 异常处理机制能让程序在异常发生时&#xff0c;按照代码的预先设定的异常处理逻辑&#xff0c;针对性地处理异常&#xff0c;让程序尽最大可能恢复正常并继续执行&#xff0c;且保持代码的清晰。 Ja…...

Gradle学习-3 Gradle插件

1、Gredle插件是什么 Gradle插件是用于扩展和增强Gradle构建系统的功能模块通过插件&#xff0c;Gradle可以执行各种构建任务&#xff0c;如编译代码、打包应用、运行测试等 Gradle插件主要分为&#xff1a;二进制插件、脚本插件 二进制插件二进制插件是预编译的、可以复用的…...

百度文心智能体,创建属于自己的智能体应用

百度文心智能体平台为你开启。百度文心智能体平台&#xff0c;创建属于自己的智能体应用。百度文心智能体平台是百度旗下的智能AI平台&#xff0c;集成了先进的自然语言处理技术和人工智能技术&#xff0c;可以用来创建属于自己的智能体应用&#xff0c;访问官网链接&#xff1…...

【软件测试】白盒测试与接口测试详解

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、什么是白盒测试 白盒测试是一种测试策略&#xff0c;这种策略允许我们检查程序的内部结构&a…...

【SpringBoot Web框架实战教程】03 SpingBoot 获取 http 请求参数

不积跬步&#xff0c;无以至千里&#xff1b;不积小流&#xff0c;无以成江海。大家好&#xff0c;我是闲鹤&#xff0c;微信&#xff1a;xxh_1459&#xff0c;十多年开发、架构经验&#xff0c;先后在华为、迅雷服役过&#xff0c;也在高校从事教学3年&#xff1b;目前已创业了…...

Mac14.1.2 M1芯片免费读写ntfs硬盘-亲测有效,免费!!!

1. 安装homebrew 打开终端&#xff0c;使用以下命令 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 根据提示逐步完成即可&#xff0c;镜像选择我这里都是保持1的选项。 2. 重启终端 安装完成homebrew后&#xff0c;需…...

手写SpringMVC之ApplicationContextListener

什么是Spring MVC&#xff1f; Spring Web MVC是基于Servlet API构建的原始Web框架&#xff0c;从一开始就包含在Spring Framework中。正式名称“Spring Web MVC”来自其源模块的名称&#xff08; spring-webmvc &#xff09;&#xff0c;但它通常被称为“Spring MVC”。 手写…...

Paimon 在汽车之家的业务实践

汽车之家基于Paimon的实践 摘要&#xff1a;本文分享自汽车之家的王刚、范文、李乾⽼师。介绍了汽车之家基于 Paimon 的一些实践&#xff0c;和一些背景。内容主要为以下四部分&#xff1a; 一、背景 二、业务实践 三、paimon 优化实践 四、未来规划 一、背景 在使用Paimon之前…...

2024-06-27 问AI: 介绍一下 LLM building process

文心一言 LLM&#xff08;Large Language Model&#xff0c;大语言模型&#xff09;的构建过程是一个复杂且资源密集的任务&#xff0c;涉及多个关键步骤。以下是LLM构建过程的主要阶段&#xff0c;以及每个阶段的一些关键考虑因素&#xff1a; 数据收集与预处理&#xff1a;…...

青岛做网站建设的公司排名/今日军事头条新闻

一、环境&#xff1a;mysql 二、在MySQL中并没有split方法&#xff0c;所以我们不能直接使用split&#xff08;&#xff09;&#xff0c;但是却群在一个苏北string_index() substring_index(vTemp,,, 1) 其中&#xff1a;vTemp是需要分割的字符串 中间的逗号是分割的依据&am…...

php如何自学做网站/新手怎么入行sem

01先来谈谈企业搭建大数据分析平台的背景1、搭建大数据平台离不开BI。在大数据之前&#xff0c;BI就已经存在很久了&#xff0c;简单把大数据等同于BI&#xff0c;明显是不恰当的。但两者又是紧密关联的&#xff0c;相辅相成的。BI是达成业务管理的应用工具&#xff0c;没有BI&…...

网站悬浮窗代码/楚雄seo

现在很多小伙伴们都会用WordPress来发送html邮件&#xff0c;但是对于一些新手朋友们来说&#xff0c;会不知道在WordPress中如何发送HTML邮件&#xff0c;接下来我们就和西部数码小编一起去看看WordPress中发送HTML邮件的方法。方法一&#xff0c;用filter发送HTML邮件发邮件用…...

做企业形象网站/网站建设方案书 模板

这个方案唯一值得注意的一点就是设备的选型&#xff0c;在图中我们能看到需要20个远程接入点&#xff0c;那么所选设备最少也要支持20个点的扩展&#xff0c;即在CISCO设备上必须要有20个以上的广域网接口。这里我们选用3845&#xff0c;经过模块化的扩展&#xff0c;可以最多支…...

自己创建网站/佛山seo

2019独角兽企业重金招聘Python工程师标准>>> 首先&#xff0c;Javascript里都是对象&#xff0c;需要有一种机制将对象关联起来&#xff0c;这里就有了继承 java中&#xff0c;我们可以用new来生成一个对象的实例&#xff0c;可是js中是没有类的&#xff0c;于是js的…...

关于申请拨付政府网站群建设项目/影视后期培训机构全国排名

可以将 Ignite 用作现有数据库&#xff08;例如 RDBMS 或 NoSQL 数据库&#xff0c;例如 Apache Cassandra 或 MongoDB&#xff09;之上的缓存层。这个用例通过使用内存处理来加速底层数据库。 Ignite 提供与 Apache Cassandra 的开箱即用集成。对于其他没有现成集成的 NoSQL 数…...