本文來(lái)源電子發(fā)燒友社區(qū),作者:大菠蘿Alpha, 帖子地址:https://bbs.elecfans.com/jishu_2308832_1_1.html
一、桌面天氣預(yù)報(bào)器架構(gòu)
(一)手撕HTTP request
桌面天氣預(yù)報(bào)器考慮的比較簡(jiǎn)單,雖然LWIP能支持,但是HTTP協(xié)議棧尚未實(shí)現(xiàn),之前考慮直接在OpenHarmony手寫(xiě)一個(gè)HTTP GET request,然后NiobeU4開(kāi)發(fā)板解析幾個(gè)天氣的關(guān)鍵詞,實(shí)現(xiàn)顯示即可,至于HTTPS與HTTP的選擇,當(dāng)然是越簡(jiǎn)單越好了,找了個(gè)HTTP的天氣網(wǎng)站(http://www.yytianqi.com/),注冊(cè)個(gè)賬號(hào),使用API即可,這個(gè)API的格式類似這樣:
http://api.yytianqi.com/接口名稱?city=城市ID&key=用戶key
初步設(shè)計(jì)就是在NiobeU4開(kāi)發(fā)板端側(cè)構(gòu)造HTTP GET request消息并發(fā)出,然后解析其response,再在LCD側(cè)顯示,基本框架如下:
#define SERVER_IP "123.57.54.168"
#define SERVER_PORT 8080
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0) {
printf("Socket errorn");
osDelay(OD_DELAY_100);
continue;
}
memset_s(&(client_addr), sizeof(client_addr), 0, sizeof(client_addr));
client_addr.sin_family = AF_INET;
client_addr.sin_port = htons(SERVER_PORT);
client_addr.sin_addr.s_addr = inet_addr(SERVER_IP);
if (connect(sock, (struct sockaddr *)&client_addr, sizeof(struct sockaddr)) == -1) {
closesocket(sock);
osDelay(OD_DELAY_1000);
continue;
}
//send HTTP GET msg
char cmd[256];
bzero(cmd, 256);
strcpy(cmd,"GET /observe?city=CH210401&key=XXXXXXXXXXXXXXXX HTTP/1.1rn");
strcat(cmd,"Host: 123.57.54.168rnrn");
write(sock, cmd, strlen(cmd));
這個(gè)HTTP GET發(fā)出去后,服務(wù)端認(rèn)不出,找了個(gè)工具模擬了下,發(fā)現(xiàn)還是相同的問(wèn)題,貌似服務(wù)器端對(duì)rn的解析不是換行,搗鼓了很久還是不行,于是放棄。
(二)曲線救國(guó)
既然直接手撕HTTP GET request有問(wèn)題,那還是換條路吧。
設(shè)想是有個(gè)server來(lái)做網(wǎng)關(guān),用于搭建NiobeU4開(kāi)發(fā)板與天氣網(wǎng)站之間的橋梁,負(fù)責(zé)獲取天氣信息,并通過(guò)TCP鏈接轉(zhuǎn)發(fā)到NiobeU4開(kāi)發(fā)板端側(cè),具體如下:
二、實(shí)現(xiàn)&展示
方案確定下來(lái)后具體實(shí)現(xiàn)就很簡(jiǎn)單了,網(wǎng)關(guān)處起個(gè)任務(wù)到www.yytianqi.com獲取天氣信息,然后發(fā)給NiobeU4開(kāi)發(fā)板,NiobeU4開(kāi)發(fā)板端側(cè)收到信息后做天氣信息字符串匹配,根據(jù)天氣內(nèi)容在LCD上顯示相關(guān)信息。
直接拷貝至系統(tǒng),reset板子。
Gateway側(cè)HTTP GET得到的信息如下:
{"code":1,"msg":"Sucess","counts":29,"data":{"cityId":"CH210401","cityName":"u5b81u6ce2","lastUpdate":"2022-10-07 23:16:37","tq":"u9634","numtq":"02","qw":"15","numfl":"0","fl":"u5faeu98ce","fx":"u897fu5357u98ce","numfx":"5","sd":"92"}}
NiobeU4開(kāi)發(fā)板端的顯示如下,多云天氣:
三、附加電池
剛好手頭有塊3.7V的鋰電池,問(wèn)了技術(shù)直接接上了,注意正負(fù)極即可,這塊電池年份有點(diǎn)久了,基本上續(xù)航在3-5h。細(xì)心的可以看到視頻中的電源燈是沒(méi)有亮的。
##感謝閱讀##
附上開(kāi)發(fā)板體驗(yàn)視頻,詳見(jiàn)作者原帖子文章。
-
開(kāi)鴻智谷
+關(guān)注
關(guān)注
2文章
125瀏覽量
1148 -
NiobeU4
+關(guān)注
關(guān)注
3文章
31瀏覽量
505
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論