在测试HarmonyOS Wi-Fi IoT 套件Hi3861过程,套件上的oled屏幕不亮了,最后排查发现是测试新程序的时候把之前的测试程序入口更改了,无法驱动oled了。
论坛上有连志安老师的视频讲解了oled的驱动方法,我使用了代码进行简单的测试和使用,然后,在网上找到了别人移植ssd1306芯片驱动的程序。
今天,在测试hi3861的oled屏幕后,将进一步使用ssd1306芯片的驱动在鸿蒙开发板上进行测试。
首先,要进行oled的驱动前要将oled对应的Hi3861 上i2c针脚服用功能打开。
1 打开hi3861 对应的oled显示屏 i2c0引脚是 gpio13和gpio14
需要到源码文件app_io_init.c 修改开启文件位置在源码目录下的
vendorhisihi3861hi3861appwifiiot_appinitapp_io_init.c 文件
#ifdef CONFIG_I2C_SUPPORT位置
修改为
#ifdef CONFIG_I2C_SUPPORT
/* I2C IO复用也可以选择3/4; 9/10,根据产品设计选择 */
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);
#endif
2 第二步是开启I2C功能修改usr_config.mk文件
在源文件下
vendorhisihi3861hi3861buildconfigusr_config.mk位置
在usr_config.mk文件中增加CONFIG_I2C_SUPPORT=y允许语句。
然后我们简单的驱动oled屏幕并显示字符是在APP 文件夹中添加驱动代码和相关文件以及字库,附件代码添加在文章后面,在连老师的oled教程中也可以下载到全部文件,修改文件和添加文件后需要重新编译源代码和烧录下载并测试。
一在app目录下新建oled_demo 文件夹
添加oled_demo.c文件,添加BUILD.gn文件,添加oled_demo.h文件,然后添加oledfont.h字库文件。
编译前该app文件夹下的BUILD.gn内容也需要修改为该新代码文件名称,
features = ["oled_demo:oled_demo",]
编译时任然使用之前的编译命令。
二oledfont.h字库中有论坛连老师已经安装好的asc2 英文字模,如果我们要使用汉字,我们也可以使用,论坛的电龙提供的字模软件来提取我们需要的汉字的字模到我们的oledfont.h字库中。
如果需要使用图片背景的,我们可以使用picturereader这个软件把图片转换成字模放在oledfont.h字库中备用。
三主文件oled_demo.c文件
主要的入口函数void my_oled_demo中OLED_ShowString中定义你要输出的字符内容:hello world
voidmy_oled_demo(void)
{
//初始化
I2cInit(WIFI_IOT_I2C_IDX_0, 100000); /* baudrate: 100000 */
led_init();
OLED_ColorTurn(0);//0正常显示,1 反色显示
OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示
OLED_ShowString(8,16,"hello world",16);
OLED_Refresh();
}
#endif
SYS_RUN(my_oled_demo);
你可以任意修改你想显示的内容,中文和图片需要单独添加中文和图片字库后,才能支持显示。
最后关于hi3861 oledssd1306驱动的安装和试用。
一从gitee网站的/hihopeorg/harmonyos-ssd1306页面下载驱动全部代码,安装并编译。
在鸿蒙源文件目录中git下载源码:git clone
https://gitee.com/hihopeorg/harmonyos-ssd1306
二修改鸿蒙源代码目录下build/lite/product/wifiiot.json文件
文件代码中//applications/sample/wifi-iot/app修改为//harmonyos-ssd1306:app
三在Ubuntu系统中安装img2code.py 的依赖包 opencv-python 和gif2imgs.py 的依赖包 pillow
gif2imgs.py 是将gif动画帧抽离出来,如果我们自己制作了图片字模可以不使用这个驱动的方法,
img2code.py可以把图片转换为c数组。我们可以在windows下用软件完成图片字模制作补充到图片字模库中的。pip install安装下面这几个包,numpy==1.19.2opencv-python==4.4.0.44Pillow==7.2.0pkg-resources==0.0.0,
原文中是使用pip install -r requirements.txt和对应的requirements.txt文件进行的安装。直接使用字模的话可以不安装。
四在鸿蒙源代码目录下重新编译python build.py wifiiot然后烧录并复位测试。这个驱动方便了hi3861对oled的使用,不过驱动的使用还是需要根据不同的需求进行进一步的调整的。附件中包含harmony hi3861 ssd1306驱动的代码源文件。原项目地址
https://gitee.com/hihopeorg/harmonyos-ssd1306