Harmony OS 设备开发学习记录(十二)-- 通过I2C点亮oled显示汉字、图片。

Harmony OS 设备开发学习记录(十二)-- 通过I2C点亮oled显示汉字、图片。

基于hispark wifi套件采用harmony os 2.0全量代码

一、看原理图确定硬件电路

oled原理图
在这里插入图片描述

二、在源码中建立demo文件

先在gitee上吧hihopeorg中大神移植好的驱动克隆下来并移动到项目目录中

git clone https://gitee.com/hihopeorg/harmonyos-ssd1306.git
cd harmonyos-ssd1306/
cp -r ssd1306/ /root/harmonyos/code-2.0-canary/applications/sample/wifi-iot/app/
cp -r examples/ /root/harmonyos/code-2.0-canary/applications/sample/wifi-iot/app/
cp -r libm_port/ /root/harmonyos/code-2.0-canary/applications/sample/wifi-iot/app/

目录将出现下列文件夹
在这里插入图片描述

三、修改代码

由于鸿蒙1.0中使用的sdk在openharmony2.0中已经弃用,需要对部分代码进行修改
在ssd1306/ssd1306.c中修改头部

#include "ssd1306.h"
#include <math.h>
#include <stdlib.h>
#include <string.h>  // For memcpy

#include <stdio.h>
#include <unistd.h>
#include "cmsis_os2.h"
// #include "wifiiot_i2c.h" //注释掉这两个头文件
// #include "wifiiot_errno.h"

#include "hi_errno.h"
#include "hi_i2c.h"

在ssd1306/ssd1306.c中修改ssd1306_SendData函数

static uint32_t ssd1306_SendData(uint8_t* data, size_t size)
{
    hi_i2c_idx id = SSD1306_I2C_IDX;
    hi_i2c_data i2cData = {0};
    i2cData.send_buf = data;
    i2cData.send_len = size;

    return hi_i2c_write(id, SSD1306_I2C_ADDR, &i2cData);
}

在examples/ssd1306_demo.c中修改头部

#include <ctype.h>
#include <stdio.h>
#include <unistd.h>

#include "ohos_init.h"
#include "cmsis_os2.h"
#include "hi_io.h"
#include "hi_gpio.h"
#include "hi_pwm.h"
#include "hi_adc.h"
#include "hi_i2c.h"
#include "hi_errno.h"
#include "hi_watchdog.h"

#include "ssd1306.h"
#include "ssd1306_tests.h"

在examples/ssd1306_demo.c中修改Ssd1306TestTask函数

void Ssd1306TestTask(void* arg)
{
    (void) arg;
    hi_gpio_init();
    hi_io_set_func(HI_IO_NAME_GPIO_13, HI_IO_FUNC_GPIO_13_I2C0_SDA);
    hi_io_set_func(HI_IO_NAME_GPIO_14, HI_IO_FUNC_GPIO_14_I2C0_SCL);
    hi_i2c_init(HI_I2C_IDX_0, OLED_I2C_BAUDRATE);

    hi_watchdog_disable();

    usleep(20*1000);
    ssd1306_Init();
    ssd1306_Fill(Black);
    ssd1306_SetCursor(0, 0);
    ssd1306_DrawString("Hello HarmonyOS!", Font_7x10, White);

    uint32_t start = HAL_GetTick();
    ssd1306_UpdateScreen();
    uint32_t end = HAL_GetTick();
    printf("ssd1306_UpdateScreen time cost: %d ms.\r\n", end - start);

    while (1) {
        TestDrawChinese1();
        osDelay(500);

        TestDrawChinese2();
        osDelay(500);

        TestShowChars(Font_6x8, 6, 8);
        osDelay(500);

        TestShowChars(Font_7x10, 7, 10);
        osDelay(500);

        ssd1306_TestAll();
    }
}

并将上述文件中所有的WIFI_IOT_SUCCESS修改为HI_ERR_SUCCESS

分别修改三个文件夹下的BUILD.gn,将include_dirs的内容替换如下

    include_dirs = [
        "//utils/native/lite/include",
        "//kernel/liteos_m/components/cmsis/2.0",
        "//base/iot_hardware/peripheral/interfaces/kits",
        "//device/hisilicon/hispark_pegasus/sdk_liteos/include"
    ]

在上级目录的app/BUILD.gn中写入

import("//build/lite/config/component/lite_component.gni")

lite_component("app") {
    features = [
        "ssd1306:oled_ssd1306",
        "examples:oled_test",
        "libm_port:libm_port"
    ]
}

四、在Linux下使用hb工具进行编译

root@DESKTOP-QAO2AOK:~/harmonyos/code-2.0-canary# hb set
[OHOS INFO] Input code path: .
OHOS Which product do you need?  wifiiot_hispark_pegasus
root@DESKTOP-QAO2AOK:~/harmonyos/code-2.0-canary# hb build

如果曾经设置过hb set就不需要再设置了,直接这样就可以了

root@DESKTOP-QAO2AOK:~/harmonyos/code-2.0-canary# hb build

看到success字样即为编译成功

五、将编译好的固件烧录到开发板

将linux中的源码文件夹中的out拷贝到Windows下替换原有out文件夹就可以了,但是要先删除原有out文件夹
打开vscode使用DevEco Device Tool打开源码文件夹
选择对应的开发板型号
这里选择的是hi3861
然后在项目设置中按照实际端口情况进行如下设置
在这里插入图片描述
保存项目并打开
在这里插入图片描述
点击upload进行烧录,烧录时需要根据提示按下开发板的rst键,稍等片刻,看到success代表烧录成功。
在这里插入图片描述
按下rst键重启开发板,这时候可以看到开发板上的oled模块上面依次开始显示不同的内容即为运行成功。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EMb-Y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值