多功能OLED屏幕开发样例

随着鸿蒙生态的发展,鸿蒙开发已成为时代新风口,学习鸿蒙开发势在必行。鸿蒙开发可参考学习文档:https://qr21.cn/FV7h05

样例简介

此样例演示如何在Pegasus Wi-Fi IoT智能家居套件上使用SSD 1306库驱动OLED屏。

工程版本

  • 系统版本/API版本:OpenHarmony 3.0 release
  • IDE版本:DevEco Device Tool Release 3.0.0.401

快速上手

准备硬件环境

  • 预装windows系统的PC机
  • Hi3861V100开发板套件

准备工程

本用例采DevEco Device Tool工具进行开发,当配置完开发环境后,我们可以在IDE上进行工程的配置下载。

  • 打开DevEco Device Tool,连接远程linux服务器:DevEco Device Tool 环境搭建

  • 点击左下角DevEco插件图标,然后点击左边框出现的主页,弹出主页界面,主页中选择新建项目,如下图:

  • 配置下载工程

如上图所示,填写对应样例工程的名称,选择对应的样例组件和样例工程存放路径后,点击创建即可进行样例工程的下载。下载界面如下:

当左下角显示正在下载OpenHarmony镜像时,耐心等待下载完成即可。

准备工具链

  • 在Projects中,点击Settings按钮,进入配置工程界面。

  • 在toolchain页签中,DevEco Device Tool会自动检测依赖的编译工具链是否完备,如果提示部分工具缺失,可点击SetUp按钮,自动安装所需工具链。

  • 如果出现安装pip组件失败,可参考修改Python源的方法 进行修改,完成尝试重新安装。

工具链自动安装完成后如下图所示。

样例代码下载完成后,DevEco Device Tool会重新要求连接远程服务器,输入密码连接后会进入对应的代码编辑界面,此时点击左下角DevEco插件图标,选择PROJECT TASKS可以查看到对应的样例工程,点击build选项进行编译,并可在终端查看对应的编译结果。

固件生成在对应工程目录的out/hispark_pegasus/wifiiot_hispark_pegasus/目录下。

烧录/安装

编译完成后可以通过DevEco Device Tool进行烧录,在烧录前需要做一些烧录的配置:

配置准备

在配置烧录前需要先查看DevEco Device Tool是否可以正常识别串口。

  • 点击左边栏"REMOTE DEVELOPMENT",找到 并点击" Local PC " 选项。

  • 查看 Local PC右边图标

    如若图标为

    ,则代表DevEco Device Tool已连接本地,可以正常识别串口。

,则代表DevEco Device Tool未连接本地,不能识别串口,此时需要点击该绿色图标进行连接,连接成功后图标会变为

  • 点击主页,在主页选择对应工程,点击配置工程进入到配置页面。
查询串口

在DevEco Device Tool中,点击QUICK ACCESS > DevEco Home > Device,查看并记录对应的串口号。

如果对应的串口异常,请根据 Hi3861V100开发板串口驱动安装 安装USB转串口的驱动程序。

配置串口

在QUICK ACCESS > DevEco Home > Projects中,点击Settings打开工程配置界面。

在"hi3861"页签,设置烧录选项,包括upload_port、upload_protocol和upload_partitions。

  • upload_port:选择已查询的串口号。
  • upload_protocol:选择烧录协议,选择"hiburn-serial"。
  • upload_partitions:选择待烧录的文件,默认选择hi3861_app。
烧录
  • 所有的配置都修改完成后,在工程配置页签的顶部,点击Save 进行保存。点击Open 打开工程文件,然后在"PROJECT TASKS"中,点击hi3861下的Upload按钮,启动烧录。
  • 启动烧录后,显示如下提示信息时,请在15秒内,按下开发板上的RST按钮重启开发板。
  • 重新上电后,界面提示如下信息时,表示烧录成功。

更多烧录细节可以参考 Hi3861V100开发板烧录

  • 效果演示
  1. 播放gif:
markdown 复制代码
*   使用本项目中的转换脚本将gif每一帧画面提取出来,转成bitmap数组,程序里循环播放
  1. 播放视频:
markdown 复制代码
*   C/S架构,开发板作为客户端,PC作为服务端,使用TCP传输每帧画面(因为视频帧数较多,开发板闪存放不下)
*   播放项目源码: [https://gitee.com/hihopeorg/harmonyos_oled_player](https://gitee.com/hihopeorg/harmonyos_oled_player)

I2C API

API名称 说明
IoTI2cInit(unsigned int id, unsigned int baudrate); 用指定的波特速率初始化I2C设备
IoTI2cDeinit(unsigned int id); 取消初始化I2C设备
IoTI2cWrite(unsigned int id, unsigned short deviceAddr, const unsigned char *data, unsigned int dataLen); 将数据写入I2C设备
IoTI2cRead(unsigned int id, unsigned short deviceAddr, unsigned char *data, unsigned int dataLen); 从I2C设备中读取数据
IoTI2cSetBaudrate(unsigned int id, unsigned int baudrate); 设置I2C设备的波特率

ssd1306 API

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

  • 内置了128*64 bit的内存缓冲区,支持全屏刷新;

  • 优化了屏幕刷新速率,实测最大帧率10fps;

  • libm_port是从musl libc中抽取的sincos的实现;

    • 用于规避链接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硬件接口;

  • 接口简洁易于使用、易于移植;

  • 内置了测试程序,可直接进行测试;

    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)

随着鸿蒙生态的发展,鸿蒙开发已成为时代新风口,学习鸿蒙开发势在必行。鸿蒙开发可参考学习文档:https://qr21.cn/FV7h05

相关推荐
深海呐1 小时前
Android AlertDialog圆角背景不生效的问题
android
Jiaberrr1 小时前
前端实战:使用JS和Canvas实现运算图形验证码(uniapp、微信小程序同样可用)
前端·javascript·vue.js·微信小程序·uni-app
ljl_jiaLiang1 小时前
android10 系统定制:增加应用使用数据埋点,应用使用时长统计
android·系统定制
花花鱼1 小时前
android 删除系统原有的debug.keystore,系统运行的时候,重新生成新的debug.keystore,来完成App的运行。
android
everyStudy2 小时前
JS中判断字符串中是否包含指定字符
开发语言·前端·javascript
城南云小白2 小时前
web基础+http协议+httpd详细配置
前端·网络协议·http
前端小趴菜、2 小时前
Web Worker 简单使用
前端
web_learning_3212 小时前
信息收集常用指令
前端·搜索引擎
tabzzz2 小时前
Webpack 概念速通:从入门到掌握构建工具的精髓
前端·webpack
200不是二百2 小时前
Vuex详解
前端·javascript·vue.js