基于NiobeU4开发板的简易桌面天气预报设计&实现

描述

一、桌面天气预报器架构

 

1.手撕HTTP request

桌面天气预报器考虑的比较简单,虽然LWIP能支持,但是HTTP协议栈尚未实现,之前考虑直接在OpenHarmony手写一个HTTP GET request,然后NiobeU4开发板解析几个天气的关键词,实现显示即可,至于HTTPS与HTTP的选择,当然是越简单越好了,找了个HTTP的天气网站(http://www.yytianqi.com/),注册个账号,使用API即可,这个API的格式类似这样:

http://api.yytianqi.com/接口名称?city=城市ID&key=用户key

 

初步设计就是在NiobeU4开发板端侧构造HTTP GET request消息并发出,然后解析其response,再在LCD侧显示,基本框架如下:

 

lcd

 

#define SERVER_IP  "123.57.54.168"
#define SERVER_PORT 8080


        sock = socket(AF_INET, SOCK_STREAM, 0);
        if (sock < 0) {
            printf("Socket error
");
            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.1
");
  strcat(cmd,"Host: 123.57.54.168

");
  
  write(sock, cmd, strlen(cmd));

(左右移动查看全部内容)

 

这个HTTP GET发出去后,服务端认不出,找了个工具模拟了下,发现还是相同的问题,貌似服务器端对 的解析不是换行,捣鼓了很久还是不行,于是放弃。

 

lcd

 

2.曲线救国

既然直接手撕HTTP GET request有问题,那还是换条路吧。

 

设想是有个server来做网关,用于搭建NiobeU4开发板与天气网站之间的桥梁,负责获取天气信息,并通过TCP链接转发到NiobeU4开发板端侧,具体如下:

 

lcd

 

二、实现&展示

 

方案确定下来后具体实现就很简单了,网关处起个任务到www.yytianqi.com获取天气信息,然后发给NiobeU4开发板,NiobeU4开发板端侧收到信息后做天气信息字符串匹配,根据天气内容在LCD上显示相关信息。

 

lcd

 

直接拷贝至系统,reset板子。

 

Gateway侧HTTP GET得到的信息如下:

{"code":1,"msg":"Sucess","counts":29,"data":{"cityId":"CH210401","cityName":"u5b81u6ce2","lastUpdate":"2022-10-07 2337","tq":"u9634","numtq":"02","qw":"15","numfl":"0","fl":"u5faeu98ce","fx":"u897fu5357u98ce","numfx":"5","sd":"92"}}

(左右移动查看全部内容)

 

NiobeU4开发板端的显示如下,多云天气:

 

lcd

 

三、附加电池

 

刚好手头有块3.7V的锂电池,问了技术直接接上了,注意正负极即可,这块电池年份有点久了,基本上续航在3-5h。细心的可以看到视频中的电源灯是没有亮的。

 

lcd

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分