多功能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

相关推荐
也无晴也无风雨29 分钟前
深入剖析输入URL按下回车,浏览器做了什么
前端·后端·计算机网络
SRC_BLUE_1731 分钟前
SQLI LABS | Less-39 GET-Stacked Query Injection-Intiger Based
android·网络安全·adb·less
Martin -Tang1 小时前
Vue 3 中,ref 和 reactive的区别
前端·javascript·vue.js
FakeOccupational3 小时前
nodejs 020: React语法规则 props和state
前端·javascript·react.js
放逐者-保持本心,方可放逐3 小时前
react 组件应用
开发语言·前端·javascript·react.js·前端框架
曹天骄4 小时前
next中服务端组件共享接口数据
前端·javascript·react.js
无尽的大道4 小时前
Android打包流程图
android
阮少年、4 小时前
java后台生成模拟聊天截图并返回给前端
java·开发语言·前端
镭封5 小时前
android studio 配置过程
android·ide·android studio
夜雨星辰4875 小时前
Android Studio 学习——整体框架和概念
android·学习·android studio