0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

SDL時(shí)間和天氣顯示

嵌入式技術(shù) ? 來(lái)源:嵌入式技術(shù) ? 作者:嵌入式技術(shù) ? 2022-12-08 14:15 ? 次閱讀

?SDL(Simple DirectMediaLayer)是一套開(kāi)放源代碼的跨平臺(tái)多媒體開(kāi)發(fā)庫(kù),使用C語(yǔ)言寫(xiě)成。SDL提供了數(shù)種控制圖像、聲音、輸出入的函數(shù),讓開(kāi)發(fā)者只要用相同或是相似的代碼就可以開(kāi)發(fā)出跨多個(gè)平臺(tái)(Linux、Windows、MacOS X等)的應(yīng)用軟件?,F(xiàn)SDL多用于開(kāi)發(fā)游戲、模擬器、媒體播放器等多媒體應(yīng)用領(lǐng)域。

1.天氣獲取

?? 天氣獲取采用命令行瀏覽器curl,天氣獲取接口使用心知天氣網(wǎng);

??心知天氣是中國(guó)氣象局官方授權(quán)的商業(yè)氣象服務(wù)公司,基于氣象數(shù)值預(yù)報(bào)和人工智能技術(shù),提供高精度氣象數(shù)據(jù)、天氣監(jiān)控機(jī)器人、氣象數(shù)據(jù)可視化產(chǎn)品,本次天氣數(shù)據(jù)獲取從心知天氣網(wǎng)平臺(tái)獲取。

2.天氣獲取與解析示例

/******************解析 天氣數(shù)據(jù)****************
形參:u8* buff原始數(shù)據(jù)
			u8 *Weather_stat天氣數(shù)據(jù)標(biāo)志
			u8 *data解析獲取到的數(shù)據(jù)
返回值:0---成功,其他值---失敗
************************************************/
u8 Weather_analysis(u8* buff,u8 *Weather_stat,u8 *data)
{
	char *p=NULL;
	u16 i=0;
	p=strstr((char *)buff,(char *)Weather_stat);//獲取溫度
	if(p)
	{
		p+=strlen((char *)Weather_stat)+2;
		i=0;
		while(*p!='"' && *p!='?')
		{
			data[i++]=*p++;
		}
		data[i]='?';
		return 0;
	}
	else return 1;
}
/*獲取天氣數(shù)據(jù)*/
int Http_GetWeather(void)
{
	FILE *fp=popen("curl  api.seniverse.com/v3/weather/now.json?key=SwD4-ybQxhedD1z7U'&'location=nanchang'&'language=zh-Hans'&'unit=c","r");
	if(fp==NULL)
	{
		printf("重定向失敗n");
		return -1;
	}
	char wthread_buff[1025];
	int cnt=fread(wthread_buff,1,1024,fp);
	wthread_buff[cnt]='?';
	char buff[100];
	wchar_t wc_buff[200];
	int stat;
	/*
		{"results":[{"location":{"id":"WT47HJP3HEMP","name":"南昌","country":"CN","path":"南昌,南昌,江西,中國(guó)",
		"timezone":"Asia/Shanghai","timezone_offset":"+08:00"},"now":{"text":"陰","code":"9","temperature":"16"},"last_update":"2021-11-20T16:57:46+08:00"}]}
	*/
	/*解析天氣數(shù)據(jù)*/
	Weather_analysis(wthread_buff,(u8 *)""name"",(u8 *)weather_info.city_name);//城市名稱(chēng)
		
	if(!Weather_analysis(wthread_buff,(u8 *)""temperature"",(u8 *)buff))//獲取溫度
	{
		snprintf((char *)weather_info.city_temp,sizeof(weather_info.city_temp),"%s℃",buff);
	}
	Weather_analysis(wthread_buff,""text"",(u8 *)weather_info.city_weather);
	if(!Weather_analysis(wthread_buff,(u8 *)""code"",(u8 *)buff))//天氣代碼
	{
		weather_info.city_code=atoi(buff);//字符串轉(zhuǎn)整數(shù)
	}
	//printf("name:%sttemp:%st天氣:%st天氣代號(hào):%dn",weather_info.city_name,weather_info.city_temp,weather_info.city_weather,weather_info.city_code);
	pclose(fp);
	return 0;
}

3.顯示時(shí)間和天氣示例

        sec=time(NULL);
		if(sec!=sec2)
		{
			sec2=sec;
			count++;
			localtime_r(&sec2,&result);//將秒單位時(shí)間轉(zhuǎn)換為時(shí)間結(jié)構(gòu)體
			strftime(buff,sizeof(buff),"%H:%M",&result);//時(shí)間格式化打印
			//printf("buff=%sn",buff);
			TTF_SetFontSize(ttffont,100);
			surface1=TTF_RenderUTF8_Blended(ttffont,buff,color2);
			rect.h=surface1->h;
			rect.w=surface1->w;
			rect.x=800/2-surface1->w/2;/*要顯示的x起始位置*/
			rect.y=120;/*要顯示的y起始位置*/
 			srcrect.h=surface1->h;
			srcrect.w=surface1->w;
			sdltext1=SDL_CreateTextureFromSurface(render,surface1);
			SDL_RenderCopy(render,sdltext2,&rect,&rect);
			SDL_RenderCopy(render,sdltext1,&srcrect,&rect);
			SDL_FreeSurface(surface1);/*釋放surface*/
			SDL_DestroyTexture(sdltext1);/*釋放表面*/
		
			TTF_SetFontSize(ttffont,50);
			strftime(week_buff,sizeof(week_buff),"%w",&result);
			week_cnt=atoi(week_buff);
			strftime(buff,sizeof(buff),"%Y/%m/%d 星期",&result);//時(shí)間格式化打印
			strncat(buff,week[week_cnt],sizeof(buff));
			strncat(buff," | ",sizeof(buff));
			surface2=TTF_RenderUTF8_Blended(ttffont,buff,color2);
			rect.h=surface2->h;
			rect.w=surface2->w;
			rect.x=800/2-surface2->w/2-40;/*要顯示的x起始位置*/
			rect.y=240;/*要顯示的y起始位置*/
			wather_x=rect.x+surface2->w;
			wather_y=rect.y;
 			srcrect.h=surface2->h;
			srcrect.w=surface2->w;
			sdltext3=SDL_CreateTextureFromSurface(render,surface2);
			SDL_RenderCopy(render,sdltext2,&rect,&rect);
			SDL_RenderCopy(render,sdltext3,&srcrect,&rect);
			SDL_FreeSurface(surface2);/*釋放surface*/
			SDL_DestroyTexture(sdltext3);/*釋放表面*/
			if(count>=60)/*60s獲取一次天氣數(shù)據(jù)*/
			{
				count=0;
				if(!Http_GetWeather())/*獲取天氣*/
				{
					char image[50];
					snprintf(image,sizeof(image),"./weather_photo/%d.png",weather_info.city_code);
					SDL_Surface *weather_surface=IMG_Load(image);
					if(weather_surface)
					{	
						SDL_Rect rect;
						rect.x=wather_x;
						rect.y=wather_y;
						rect.w=50;
						rect.h=50;
						srcrect.h=weather_surface->h;
						srcrect.w=weather_surface->w;
						SDL_Texture *sdltext=SDL_CreateTextureFromSurface(render,weather_surface);/*創(chuàng)建*/
						SDL_RenderCopy(render,sdltext2,&rect,&rect);
						SDL_RenderCopy(render,sdltext,&srcrect,&rect);
						SDL_FreeSurface(weather_surface);/*釋放surface*/
						SDL_DestroyTexture(sdltext);/*釋放表面*/
						/*顯示溫度*/
						SDL_Surface *temp_surface=TTF_RenderUTF8_Blended(ttffont,weather_info.city_temp,color2);
						SDL_Texture *temp_sdltext=SDL_CreateTextureFromSurface(render,temp_surface);
						rect.x=wather_x+50;
						rect.y=wather_y;
						srcrect.h=temp_surface->h;
						srcrect.w=temp_surface->w;
						SDL_RenderCopy(render,sdltext2,&rect,&rect);
						SDL_RenderCopy(render,temp_sdltext,&srcrect,&rect);
						SDL_FreeSurface(temp_surface);/*釋放surface*/
						SDL_DestroyTexture(temp_sdltext);/*釋放表面*/
					}
				}
			}
			SDL_RenderPresent(render);//更新顯示
		}


審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11123

    瀏覽量

    207892
  • SDL
    SDL
    +關(guān)注

    關(guān)注

    0

    文章

    18

    瀏覽量

    7347
  • 開(kāi)發(fā)庫(kù)
    +關(guān)注

    關(guān)注

    0

    文章

    6

    瀏覽量

    4856
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    ESP8266簡(jiǎn)易WIFI天氣時(shí)鐘

    本篇介紹了http獲取網(wǎng)絡(luò)天氣的基本原理,并通過(guò)實(shí)踐,使用ESP8266連網(wǎng)獲取網(wǎng)絡(luò)天氣和網(wǎng)絡(luò)時(shí)間,借助U8g2庫(kù),在OLED上顯示當(dāng)前時(shí)間
    的頭像 發(fā)表于 06-06 09:31 ?7163次閱讀
    ESP8266簡(jiǎn)易WIFI<b class='flag-5'>天氣</b>時(shí)鐘

    SDL編譯安裝圖片顯示

    ?SDL(Simple DirectMediaLayer)是一套開(kāi)放源代碼的跨平臺(tái)多媒體開(kāi)發(fā)庫(kù),使用C語(yǔ)言寫(xiě)成。SDL提供了數(shù)種控制圖像、聲音、輸出入的函數(shù),讓開(kāi)發(fā)者只要用相同或是相似的代碼就可以
    的頭像 發(fā)表于 09-29 15:54 ?1353次閱讀
    <b class='flag-5'>SDL</b>編譯安裝圖片<b class='flag-5'>顯示</b>

    SDL顯示文本

    ?? SDL2.0庫(kù)本身沒(méi)有文本數(shù)據(jù)顯示相關(guān)函數(shù)接口,文本顯示需要編譯安裝SDL_ttf庫(kù)。
    的頭像 發(fā)表于 09-29 16:32 ?1839次閱讀
    <b class='flag-5'>SDL</b><b class='flag-5'>顯示</b>文本

    Linux下基于SDL庫(kù)貪吃蛇游戲

    ?SDL(Simple DirectMediaLayer)是一套開(kāi)放源代碼的跨平臺(tái)多媒體開(kāi)發(fā)庫(kù),使用C語(yǔ)言寫(xiě)成。SDL提供了數(shù)種控制圖像、聲音、輸出入的函數(shù),讓開(kāi)發(fā)者只要用相同或是相似的代碼就可以
    的頭像 發(fā)表于 12-11 14:29 ?3190次閱讀
    Linux下基于<b class='flag-5'>SDL</b>庫(kù)貪吃蛇游戲

    Windows下基于MSVC搭建SDL開(kāi)發(fā)環(huán)境

    Windows下基于MSVC搭建SDL開(kāi)發(fā)環(huán)境
    的頭像 發(fā)表于 06-08 10:29 ?1380次閱讀
    Windows下基于MSVC搭建<b class='flag-5'>SDL</b>開(kāi)發(fā)環(huán)境

    天氣預(yù)警收音機(jī)方案

    /通道/時(shí)間顯示二、 LCD 全顯圖三、 天氣廣播---------------------------------------------------------------
    發(fā)表于 05-20 17:56

    SDL的交叉編譯問(wèn)題

    求助!!移植SDL到mini2440開(kāi)發(fā)板上時(shí),在交叉編譯SDL_image進(jìn)行configure之后,再make時(shí)出現(xiàn)如下錯(cuò)誤:/opt/mini2440/output/lib/libSDL.so
    發(fā)表于 12-06 20:50

    移植SDL到JZ2440顯示BMP圖片

    LOGO的制作, 韋老師第3期講了如何顯示jpeg圖片, 那么怎么顯示bmp圖片?這次我們借助libSDL來(lái)實(shí)現(xiàn),我們先移植SDL到Ubuntu, 體驗(yàn)它的威力后再移植到開(kāi)發(fā)板。一、移植SDL
    發(fā)表于 06-29 11:19

    OLED屏幕顯示時(shí)間天氣設(shè)計(jì)實(shí)現(xiàn)

    通過(guò)HTTP GET天氣網(wǎng)站的API接口,將返回的Json中天氣數(shù)據(jù)解析出來(lái)顯示。需要顯示的圖標(biāo)可以通過(guò)取模軟件轉(zhuǎn)成對(duì)應(yīng)的數(shù)組工程直接編譯之后只有需要配一下網(wǎng),配網(wǎng)接口嫌麻煩,沒(méi)有寫(xiě),
    發(fā)表于 01-18 10:13

    STM32+ESP8266獲取網(wǎng)絡(luò)時(shí)間天氣的方法

    先給出兩個(gè)可以獲取天氣時(shí)間的網(wǎng)站https://www.seniverse.com/docs 可以獲取天氣http://api.k780.com:88/?app=life.time&
    發(fā)表于 02-18 07:56

    GUI向?qū)Ь幾g錯(cuò)誤,找不到“SDL2/SDL.h”文件是怎么回事?

    如何找出編譯錯(cuò)誤:找不到“SDL2/SDL.h”文件 使用 MAC OS 12.6 和最新的guy guider 版本。
    發(fā)表于 05-04 08:44

    基于SDL的自動(dòng)售票系統(tǒng)的研發(fā)

    基于SDL 的自動(dòng)售票系統(tǒng)的研發(fā)顧麗麗 梅杓春(南京郵電大學(xué)自動(dòng)化學(xué)院,江蘇南京 210003)摘要:本文簡(jiǎn)要介紹了SDL語(yǔ)言及其支持工具。通過(guò)設(shè)計(jì)自動(dòng)售票系統(tǒng)實(shí)例對(duì)如何利用SDL
    發(fā)表于 12-18 11:34 ?21次下載

    SDL1000X系列可編程直流電子負(fù)載的產(chǎn)品介紹

    SDL1000X/SDL1000X-E 可編程直流電子負(fù)載配備了3.5 英寸 TFT-LCD 顯示屏,擁有友好的人機(jī)交互界面和優(yōu)異的性能指標(biāo),SDL1020X/
    發(fā)表于 02-18 08:00 ?4次下載
    <b class='flag-5'>SDL</b>1000X系列可編程直流電子負(fù)載的產(chǎn)品介紹

    SDL下載與配置

    點(diǎn)擊[SDL2 核心庫(kù)下載](https://libsdl.org/download-2.0.php)下載SDL2庫(kù),如下圖根據(jù)編譯器選擇不同版本(Visual Studo系列選擇第一個(gè))。
    的頭像 發(fā)表于 02-27 14:51 ?2683次閱讀
    <b class='flag-5'>SDL</b>下載與配置

    天氣預(yù)報(bào)顯示開(kāi)源項(xiàng)目

    電子發(fā)燒友網(wǎng)站提供《天氣預(yù)報(bào)顯示開(kāi)源項(xiàng)目.zip》資料免費(fèi)下載
    發(fā)表于 06-14 10:47 ?0次下載
    <b class='flag-5'>天氣</b>預(yù)報(bào)<b class='flag-5'>顯示</b>開(kāi)源項(xiàng)目