随着鸿蒙生态的发展,鸿蒙开发已成为时代新风口,学习鸿蒙开发势在必行。鸿蒙开发可参考学习文档: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开发板烧录
。
- 效果演示
- 播放gif:
markdown
* 使用本项目中的转换脚本将gif每一帧画面提取出来,转成bitmap数组,程序里循环播放
- 播放视频:
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中抽取的sin
和cos
的实现;- 用于规避链接Hi3861 SDK中的libm_flash.a报错的问题;
-
gif2imgs.py
可用于将gif动图中的帧分离出来;- 依赖 pillow 包,可以使用
pip install pillow
命令安装;
- 依赖 pillow 包,可以使用
-
img2code.py
可用于将图片转为C数组,每个字节表示8个像素;- 依赖 opecv-python 包,可以使用
pip install opencv-python
命令安装;
- 依赖 opecv-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