2375|4

552

帖子

3

TA的资源

纯净的硅(初级)

楼主
 

【平头哥RVB2601创意应用开发】5、OLED显示天气信息 [复制链接]

 

一、概述

在上一篇中已经实现了天气数据的获取,然后通过串口打印出来。

【平头哥RVB2601创意应用开发】4、cJSON获取天气信息

这一篇主要实现数据在OLED上的显示。

 

二、GUI库的选择与移植

对于板载的128*64的单色OLED,平头哥官方是有提供移植好的LVGL的例程的,直接拿来用就可以,非常方便。

但我把LVGL库加入到我的工程后,编译后会发现提示错误,原因写的是SRAM不足,尴尬了😅。

我这好像还啥也没干就提示不足了,那后面的功能开发问题可能就大了。

怎么办呢?

翻了一遍论坛里各位大佬的帖子,发现有大佬没有用LVGL库,而是用的u8g2的GUI库,看起来比LVGL小很多,只支持单色,那就试一试咯。

于是,按照论坛大佬的移植步骤开始移植,还好功夫不负有心人,没有花多长时间就把u8g2跑起来了。

事实也证明,u8g2确实比LVGL小很多,具体的移植方法我就不在这班门弄斧了,可以参考如下优质帖子进行移植:

【平头哥RVB2601创意应用开发】实践2-移植U8g2图形库

在这也感谢这位大佬🙇‍

 

三、在OLED三显示信息

为了做到显示和数据获取互相独立,专门为OLED显示创建了一个task,该task只负责数据的显示,有数据来就显示,没有数据来就挂起。

天气数据的获取和解析也是单独创建一个task,该task只负责数据的获取和解析,解析完成后发送给OLED task进行显示。

两个task之间通过消息队列进行数据的传输。

 

具体实现如下

①显示task:

void display_task_create(void)
{
    aos_task_new("gui", gui_lvgl_task, NULL, 1 * 1024);
}

static void gui_lvgl_task(void *arg)
{
	u8g2_t u8g2;
	char queue_msg[100];
	uint32_t quene_size = 100;
	char temp[11];
	
	u8g2Init(&u8g2);
	draw(&u8g2);
	u8g2_ClearBuffer(&u8g2);//clear all
	display_str(&u8g2, 0, 8,"city:-", 1, 0, u8g2_font_pcsenior_8f);
	display_str(&u8g2, 0, 16,"weather:-", 1, 0, u8g2_font_pcsenior_8f);
	display_str(&u8g2, 0, 24,"temp:-", 1, 0, u8g2_font_pcsenior_8f);
	display_str(&u8g2, 0, 32,"humi:-", 1, 0, u8g2_font_pcsenior_8f);
	display_str(&u8g2, 0, 40,"wind:-", 1, 0, u8g2_font_pcsenior_8f);
	display_str(&u8g2, 0, 48,"lastUpdate:", 1, 0, u8g2_font_pcsenior_8f);

    while (1) {

		//check data receive
		if(0 != aos_queue_is_valid(&queue_weather))
		{
			if(0 == aos_queue_recv(&queue_weather, 0, queue_msg, &quene_size))
			{
				if(queue_msg[0] == '0')//city
				{
					
					display_str(&u8g2, 40, 8,&queue_msg[1], 0, 0, u8g2_font_pcsenior_8f);					
				}
				else if(queue_msg[0] == '1')//weather
				{
					
					display_str(&u8g2, 64, 16,&queue_msg[1], 0, 0, u8g2_font_pcsenior_8f);					
				}				
				else if(queue_msg[0] == 2)//qw
				{
					display_str(&u8g2, 40, 24,&queue_msg[1], 0, 0, u8g2_font_pcsenior_8f);
					display_str(&u8g2, 40 + (strlen(queue_msg) - 1) * 8, 24,"C", 0, 0, u8g2_font_pcsenior_8f);					
				}
				else if(queue_msg[0] == 4)//sd
				{
					display_str(&u8g2, 40, 32,&queue_msg[1], 0, 0, u8g2_font_pcsenior_8f);
					display_str(&u8g2, 40 + (strlen(queue_msg) - 1) * 8, 32,"%", 0, 0, u8g2_font_pcsenior_8f);					
				}
				else if(queue_msg[0] == '3')//fl
				{
					display_str(&u8g2, 40, 40,&queue_msg[1], 0, 0, u8g2_font_pcsenior_8f);				
				}				
				else if(queue_msg[0] == 6)//lastUpdate
				{
					memcpy(temp,(const char *)&queue_msg[1],10);
					temp[10] = '\0';
					display_str(&u8g2, (128 - strlen(temp) * 8) >> 1, 56,temp, 0, 0, u8g2_font_pcsenior_8f);	
					memcpy(temp,(const char *)&queue_msg[12],8);
					temp[8] = '\0';
					display_str(&u8g2, (128 - strlen(temp) * 8) >> 1, 64,temp, 0, 0, u8g2_font_pcsenior_8f);	
						
				}					
			}			
		}
		aos_msleep(50);
    }
}

②天气信息获取和处理task:

注:当前消息获取是通过cli命令手动触发的,所以该task目前暂时没有实质性的内容,只有led的闪烁代码

static weather_task_entry(void *arg)
{
	uled_init();
	weather_data_init();
	//crete queue for weather
	if(0 != aos_queue_new(&queue_weather, queue_weather_buf, QUEUE_WETHER_SIZE, QUEUE_WETHER_SIZE))
	{
		printf("queue_weather error\r\n");
	}
	
	//aos_msleep(3000);
	//city_code_to_city("0CH020100");
	while(1)
	{
		aos_msleep(1000);
		led_flash();
		//cmd_at_client_handler();
	}
}

void create_weather_task(void)
{
    aos_task_new_ext(&weather_task, "weather", weather_task_entry, NULL,
                     2*1024, AOS_DEFAULT_APP_PRI);	
}

主要思路就是以上描述的内容,话不多说,直接看一下实际效果吧:

 


 

 

最新回复

nmg
厉害了,看着是不是快作品提交了 作品提交看这个说明:https://bbs.eeworld.com.cn/thread-1201527-1-1.html   详情 回复 发表于 2022-4-28 17:27
点赞 关注
 
 

回复
举报

6960

帖子

11

TA的资源

版主

沙发
 
加油,下一步是不是考虑用图标的方式显示。

点评

是有这个想法的,但是得研究研究怎么弄  详情 回复 发表于 2022-5-2 09:30
 
 
 

回复

5260

帖子

239

TA的资源

管理员

板凳
 

厉害了,看着是不是快作品提交了

作品提交看这个说明:https://bbs.eeworld.com.cn/thread-1201527-1-1.html

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身

点评

哈哈,还有一些功能要完成,还要继续努力  详情 回复 发表于 2022-5-2 09:31
 
 
 

回复

552

帖子

3

TA的资源

纯净的硅(初级)

4
 
lugl4313820 发表于 2022-4-23 20:37 加油,下一步是不是考虑用图标的方式显示。

是有这个想法的,但是得研究研究怎么弄

 
 
 

回复

552

帖子

3

TA的资源

纯净的硅(初级)

5
 
nmg 发表于 2022-4-28 17:27 厉害了,看着是不是快作品提交了 作品提交看这个说明:https://bbs.eeworld.com.cn/thread-1201527-1-1.h ...

哈哈,还有一些功能要完成,还要继续努力

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表