`
猫耳呀
  • 浏览: 165866 次
社区版块
存档分类
最新评论

AliOS Things图形界面开发指南

阅读更多
 
简介
 
物联网设备开发过程中,嵌入式GUI(用户图形界面)的开发是一个重要的组成部分。许多智能设备如智能家电、智能手表、智能仪表上都会涉及到GUI开发。AliOS Things集成开源图形库littlevGL,可以在linux上进行图形界面开发。开发完成后将代码添加到相应的工程并完成显示和输入设备驱动的对接,程序即可在相应的硬件上运行,方便用户进行嵌入式GUI开发。
  
littlevGL是一个开源的嵌入式图形库,采用C语言开发,使用MIT协议,并在持续更新中。该图形库支持常用的控件,如按钮、列表、滑块、选择框、仪表盘、键盘、波形等。并支持触摸、鼠标、键盘等多种输入方式。其官方网站为:https://littlevgl.com
 
linux模拟开发步骤
 
1、环境安装
 
a、按照AliOS Things Linux Environment Setup安装基本环境。
b、按照如下命令安装SDL2图形库。
  sudo apt-get install libsdl2-2.0:i386
  sudo apt-get install libxkbcommon-dev:i386
  sudo apt-get install libmircommon-dev:i386
  sudo apt-get install libmirclient-dev:i386
  sudo apt-get install libegl1-mesa-dev:i386
  sudo apt-get install libglib2.0-dev:i386
  sudo apt-get install libpulse-dev:i386
  sudo apt-get install libsdl2-dev:i386
 
2、拷贝代码
 
3、模拟运行
编译运行命令:aos make littlevgl_simulate@linuxhost
编译通过之后会自动运行生成的可执行文件,界面如下
 
 
用户可以自行添加应用代码,开发完成后将代码添加到相应的工程并完成显示和输入设备驱动的对接,程序即可在相应的硬件上运行。
 
example/littlevgl_simulate/lv_examples目录下包含demo程序以及各个控件使用的示例程序,可参考进行界面开发。
 
AliOS Things开发版开发步骤:
 
在starterkit的开发版上已经移植littlevgl,用户直接运行命令即可编译GUI工程。
编译命令:aos make littlevgl_starterkit@starterkit
编译完成后下载到starterkit即可。
 
其他CPU开发步骤:
 
1、显示驱动实现
 
a、使用内部缓冲区(lv_conf.h的LV_VDB_SIZE > 0)
必须实现如下函数,其功能为对一片矩形区域填充颜色,注意该函数的最后必须调用lv_flush_ready()函数。
 
/*Write the internal buffer (VDB) to the display. 'lv_flush_ready()' has to be called when finished*/ void my_disp_flush(int32_t x1, int32_t y1, int32_t x2, int32_t y2, const lv_color_t * color_p) { /*TODO Copy 'color_p' to the specified area*/ /*Call 'lv_fluh_ready()' when ready*/ lv_flush_ready(); }
 
b、使用硬件加速(USE_LV_GPU = 1 且使用内部缓冲区)
必须实现如下函数:
/*Blend two memories using opacity (GPU only)*/ void my_mem_blend(lv_color_t * dest, const lv_color_t * src, uint32_t length, lv_opa_t opa) { /*TODO Copy 'src' to 'dest' but blend it with 'opa' alpha */ } /*Fill a memory with a color (GPU only)*/ void my_mem_fill(lv_color_t * dest, uint32_t length, lv_color_t color) { /*TODO Fill 'length' pixels in 'dest' with 'color'*/ }
 
c、不使用缓冲区
必须实现如下函数:
/*Fill an area with a color on the display*/ void my_disp_map(int32_t x1, int32_t y1, int32_t x2, int32_t y2, const lv_color_t * color_p) { /*TODO Copy 'color_p' to the specified area*/ } *Write pixel map (e.g. image) to the display*/ void my_disp_fill(int32_t x1, int32_t y1, int32_t x2, int32_t y2, lv_color_t color) { /*TODO Fill the specified area with 'color'*/ }
 
2、输入驱动实现
a、触摸或者鼠标等点输入设备
必须使用如下函数,获取点坐标
 
bool my_input_read(lv_indev_data_t *data) { data->point.x = touchpad_x; data->point.y = touchpad_y; data->state = LV_INDEV_EVENT_PR or LV_INDEV_EVENT_REL; return false; /*No buffering so no more data read*/ }
 
b、键盘设备
必须使用如下函数:
bool keyboard_read(lv_indev_data_t *data) { data->key = last_key(); if(key_pressed()) { data->state = LV_INDEV_EVENT_PR; } else { data->state = LV_INDEV_EVENT_REL; } return false; /*No buffering so no more data read*/ }
 
3、初始化
 
a、将framework/GUI/littlevGL目录下的文件添加到工程。
b、根据需要配置lv_conf.h中相应的宏定义。
c、调用lv_init()初始化littlevGL。
d、初始化显示和输入(键盘、鼠标、触摸等)设备。
e、调用lv_disp_drv_init初始化显示驱动,调用lv_disp_drv_register注册显示驱动。调用lv_indev_drv_init初始化输入驱动,调用lv_indev_drv_register注册输入驱动,示例代码见附录。
f、在时钟中断中调用lv_tick_inc(1),为littlevGL提供心跳。
g、创建一个低优先级任务,在其中重复调用lv_task_handler函数,进行图像的刷新和输入事件的响应。
 
4、APP编写
 
用户可以自行添加相应的应用代码。
 
其他
 
AliOS Things也支持STemwin,在starterkit的开发版上已经移植STemwin,用户直接运行命令即可编译GUI工程。
编译命令:aos make starterkitgui@starterkit
 
附录
 
驱动初始化和注册示例代码如下:
lv_disp_drv_t dis_drv; lv_indev_drv_t indev_drv; void lvgl_drv_register(void) { lv_disp_drv_init(&dis_drv); dis_drv.disp_flush = my_disp_flush; dis_drv.disp_fill = my_disp_fill; dis_drv.disp_map = my_disp_map; lv_disp_drv_register(&dis_drv); lv_indev_drv_init(&indev_drv); indev_drv.type = LV_INDEV_TYPE_POINTER; indev_drv.read = my_input_read; lv_indev_drv_register(&indev_drv); } void my_disp_flush(int32_t x1, int32_t y1, int32_t x2, int32_t y2, const lv_color_t * color_p) { int32_t x = 0; int32_t y = 0; for (y = y1; y <= y2; y++) /*Pick the next row*/ { for (x = x1; x <= x2; x++) /*Pick the a pixel in the row*/ { BSP_LCD_DrawPixel(x,y, color_p); color_p++; } } lv_flush_ready(); } void my_disp_fill(int32_t x1, int32_t y1, int32_t x2, int32_t y2, lv_color_t color) { int32_t i =0; int32_t j =0; for (i = x1; i <= x2; i++) { for (j = y1; j <= y2; j++) { BSP_LCD_DrawPixel(i,j, color.full); } } } void my_disp_map(int32_t x1, int32_t y1, int32_t x2, int32_t y2, const lv_color_t * color_p) { int32_t i =0; int32_t j =0; for (i = x1; i <= x2; i++) { for (j = y1; j <= y2; j++) { BSP_LCD_DrawPixel(i,j, color_p->full); color_p++; } } } bool my_input_read(lv_indev_data_t *data) { __IO TS_StateTypeDef ts; BSP_TS_GetState((TS_StateTypeDef *)&ts); ts.touchX[0] = TouchScreen_Get_Calibrated_X(ts.touchX[0]); ts.touchY[0] = TouchScreen_Get_Calibrated_Y(ts.touchY[0]); if((ts.touchX[0] >= 240) ||(ts.touchY[0] >= 240) ) { ts.touchX[0] = 0; ts.touchY[0] = 0; } if((TS_State_cur.Pressed != ts.touchDetected )|| (TS_State_cur.x != ts.touchX[0]) || (TS_State_cur.y != ts.touchY[0])) { TS_State_cur.Pressed = ts.touchDetected; if(ts.touchDetected) { TS_State_cur.x = ts.touchX[0]; TS_State_cur.y = ts.touchY[0]; data->point.x = TS_State_cur.x; data->point.y = 240 - TS_State_cur.y; if(TS_State_cur.Pressed == ts.touchDetected) { data->state = 1; } else { data->state = 0; } } else { TS_State_cur.x = 0; TS_State_cur.y = 0; } } return false; /*No buffering so no more data read*/ }
 
阅读更多干货好文,请关注扫描以下二维码:
 
分享到:
评论

相关推荐

    AliOS Things 快速开发指南1

    总的来说,AliOS Things 为 IoT 开发者提供了一个强大且全面的平台,涵盖了从设备连接、网络管理、固件升级到安全性保障等多个方面,同时也提供了便捷的开发工具和流程,以加速 IoT 应用的开发和部署。开发者在开始...

    AliOS Things Developer Kit开发板v1.2原理图

    这是AliOS Things Developer Kit开发板v1.2原理图 注意:这个原理图使v1.2版本的,官方一共出了两个版本,v1.2和v1.3,1.3的版本没有流出原理图,因为这个板卡官方早就停止维护了。1.3版本的板卡,j801接口,v1.2原理...

    AliOS Things Starter Kit技术文档资料.zip

    基本操作说明-》AliOS Things Starter Kit用户操作指导_V1.0-20180606 简介-》AliOS Things Starter Kit Brief.pdf 生产软件bin文件-》Starter Kit-20180606.bin 应用指导说明-》AliOS Things Starter Kit ...

    AliOS-Things实现图片显示及文字跳动显示

    阿里云物联网操作系统AliOS Things是面向IoT领域的一款轻量级操作系统,旨在为各种...在实际开发过程中,开发者需要熟悉AliOS Things的API、图形库的用法以及针对特定硬件的优化技巧,才能充分发挥这一操作系统的潜力。

    AliOS Things集成开发环境介绍.pptx

    AliOS Things集成开发环境介绍.pptx

    AliOS-Things2.1.0-helloworld.zip

    本项目“AliOS-Things2.1.0-helloworld.zip”是基于该操作系统的一个示例工程,用于帮助初学者理解如何在MDK(Keil uVision)开发环境中集成并运行AliOS Things。下面我们将深入探讨这个项目中的关键知识点。 首先...

    AliOS Things物联网操作系统,采用弹性内核,支持Python和JavaScript轻应用

    AliOS Things物联网操作系统,采用弹性内核,支持Python和JavaScript轻应用,主打“易上手”。AliOS Things 支持多种CPU架构,包括:ARM,C-Sky,MIPS,RISCV等。AliOS Things 适配了分层架构和组件架构。所有的模块...

    3_1_AliOS Things源码结构及编译系统.pdf

    HaaS(硬件即服务)是基于AliOS Things开发的一套物联网应用开发课程,旨在帮助开发者快速搭建物联网应用。 首先,AliOS Things的源码结构可以被概括为几个主要目录,包括根目录、应用目录、组件目录、内核及基础...

    3_2_AliOS Things命令行.pdf

    在物联网应用开发领域,HaaS(Hardware as a Service)是一个重要的概念,它允许开发者通过API(应用程序接口)而不是硬件来编程,从而快速开发物联网...这对于开发和维护基于AliOS Things的物联网产品具有重要意义。

    Alios Things Developer Kit 开发板usb串口示例代码

    代码基于stm32cubemx核心stm32L496。 Alios Things Developer Kit 开发板测试通过。

    4_1_AliOS Things网络篇之netmgr.pdf

    标题《4_1_AliOS Things网络篇之netmgr.pdf》和描述《HaaS物联网应用开发课程》揭示了文档的主要内容是关于AliOS Things操作系统中的Netmgr网络管理模块的详细介绍。Netmgr是AliOS Things操作系统里,提供Wi-Fi网络...

    3_4_AliOS Things基础AOS API及HAL API介绍.pdf

    AliOS Things 是阿里云官方推出的物联网嵌入式操作系统,旨在为开发者提供丰富的应用编程接口(API),实现设备端软件快速开发。本文档将从AliOS Things的基础出发,介绍其高级操作系统(AOS)API及硬件抽象层(HAL...

    AliosThings 快速开发指南.zip

    本快速开发指南将引导你踏入物联网开发的世界,通过丰富的实践教程,帮助你掌握AliOS Things的核心功能和开发流程。 1. **物联网基础知识**:物联网(IoT)是连接物理世界与数字世界的桥梁,通过传感器和网络通信...

    藏经阁-Bnng Consensus to Data Replica (1).pdf

    阿里巴巴的IoT操作系统AliOS Things集成开发环境 AliOS Things是一款由阿里云IoT事业部开发的物联网操作系统,旨在降低开发门槛,提高开发效率。该系统集成了开发环境、测试工具、云端连接等多个方面的功能,提供...

    AliOS Things API KERNEL Guide · alibaba_AliOS-Things Wiki · GitHub.pdf

    1 aos_reboot 2 aos_get_hz 3 aos_version_get 4 aos_task_new 5 aos_task_new_ext 6 aos_task_exit 7 aos_task_name 8 aos_task_key_create 9 aos_task_key_delete 10 aos_task_setspecific ......

    AliOS-Things:AliOS Things最新版本:https:github.comalibabaAliOS-Thingstreerel_3.1.0请访问https:aliosthings.iot.aliyun.com以获取最小的代码

    AliOS Things支持多种架构,包括ARM,C-Sky,MIPS,RISCV,rl78,rx600,xtensa等。200多种经过AliOS Things认证的芯片和模块,以及100多种认证的传感器。 AliOS Things适应分层架构和组件架构,包括: BSP:董事...

Global site tag (gtag.js) - Google Analytics