色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

觸摸屏WIFI獲取時間和天氣預報相關的功能是怎樣實現的

嵌入式技術開發 ? 來源:嵌入式技術開發 ? 作者:Mr張工 ? 2022-10-24 08:59 ? 次閱讀

前幾天發布了開源4.3寸觸摸屏的文章,里面有WIFI獲取時間和天氣預報相關的功能,今天就來介紹一下這個功能是怎樣實現的。

1.底層驅動

首先,硬件上,單片機通過串口AT指令訪問WIFI模塊(ESP8266)。具體AT指令怎樣寫,可以參考之前的文章《單片機裸機環境下編寫AT指令程序》。上電后,先配置WIFI模塊的工作模式等,用到的AT指令如下:

1. 關閉回顯

ATE0

2. 設置為STA模式

AT+CWMODE_DEF=1

3. 設置WIFI名稱和密碼

AT+CWJAP_DEF=”SSID”,”Password”

4. 開啟DHCP

AT+CWDHCP_DEF=1,1

5. 設置為單連接模式

AT+CIPMUX=0

6.設置為透傳模式

AT+CIPMODE=1

2.獲取網絡時間 獲取網絡時間的方式有兩種,對于較新版本的固件,可以直接通過AT指令來獲取。(可以通過AT+GMR指令來查詢固件的版本。) AT+CIPSNTPTIME? 對于較老版本的固件,不支持該AT指令,只能通過自己連接網絡服務器來獲取當前時間。具體需要的AT指令如下:

1.建立TCP鏈接

AT+CIPSTART="TCP","www.beijing-time.org",80

2.打開傳透模式

AT+CIPSEND

3.收到‘>’符號后,隨便發送個數據

4.等待接收數據

接收的數據可以先用網絡調試助手來測試,如下,可以看到,數據中包含了當前的日期和時間信息,我們可以先找到字符串中“Data”的位置,再解析后面的數據。數據格式固定,直接按照字符位置解析就行。

需要注意的是,獲取的這個時間是格林威治時間,與北京時間相差8個小時。

當然,也可以通過連接其它NTP時間服務器來獲取時間,步驟是類似的。

8f5150ec-5331-11ed-a3b6-dac502259ad0.png

3.獲取天氣預報 天氣的獲取就要比時間稍復雜一些,網上有很多可以提供天氣預報的服務器,有些可以免費使用,一般都需要注冊一個賬號,這里以“心知天氣”為例進行介紹。步驟如下:

1.注冊賬號

在該網站注冊一個賬號:https://www.seniverse.com/。注冊之后就可以通過其開放的API來獲取天氣預報。有免費版和付費版,區別在于訪問頻次和獲取的天氣信息內容不同。如下:

8f9b6d44-5331-11ed-a3b6-dac502259ad0.png

2.查看私鑰

在控制臺查看賬號的私鑰,這個在程序中要用。

8fbc5d88-5331-11ed-a3b6-dac502259ad0.png

3.API

有了這個私鑰,我們就可以通過API來獲取天氣預報了,相關的API說明可以在這里查詢:

https://seniverse.yuque.com/books/share/f4f9bf1a-d3d9-4a68-8996-950f8c88400e/sl6gvt#d29hl

先用網絡調試助手測試一下:

8fe42b2e-5331-11ed-a3b6-dac502259ad0.png

可以看到,通過TCP連接服務器后,發送GET請求就可以收到天氣預報數據,接下來就是解析數據了。

4.解析數據

接收的數據是JSON格式的字符串,在單片機中我們可以移植cJSON來進行解析。cJSON是一個開源的C語音解析庫,只有cJSON.c、cJSON.h兩個文件,直接添加到工程中就可以使用相關函數。

程序如下:

void Weather_JSON( )
{  
    char *data;
    cJSON *root;
    cJSON *results;
    cJSON *last_update;
    cJSON *loc_json, *daily_json;
    cJSON *forecast_json;
    char *loc_tmp, *weather_tmp;
    int i = 0;


    data = (char*)(Uart1.RxBuf);//接受到的數據
    root = cJSON_Parse(data);
    if(root)
    {
        //printf("JSON格式正確:
%s

",cJSON_Print(root));    //輸出json字符串
        results = cJSON_GetObjectItem(root, "results");
        results = cJSON_GetArrayItem(results,0);
        if(results)
        {
            loc_json = cJSON_GetObjectItem(results, "location");   //得到location鍵對應的值,是一個對象


            loc_tmp = cJSON_GetObjectItem(loc_json, "id") -> valuestring;
            //printf("城市ID:%s
",loc_tmp);
            loc_tmp = cJSON_GetObjectItem(loc_json, "name") -> valuestring;
            memset(loc_str,0,20);
            memcpy(loc_str,loc_tmp,strlen(loc_tmp));
          
            loc_tmp = cJSON_GetObjectItem(loc_json, "timezone") -> valuestring;
            //printf("城市時區:%s

",loc_tmp);


            daily_json = cJSON_GetObjectItem(results, "daily");
            if(daily_json)
            {
                Weather_Dat[0].Flag = 1;
                for(i = 0; i < 3; i++)
                {
                    forecast_json = cJSON_GetArrayItem(daily_json, i);
                    //weather_tmp = cJSON_GetObjectItem(forecast_json, "date") -> valuestring;//日期


                    weather_tmp = cJSON_GetObjectItem(forecast_json, "code_day") -> valuestring;//白天天氣代碼
                    Weather_Dat[i].Weathcode = atoi(weather_tmp);


                    //weather_tmp = cJSON_GetObjectItem(forecast_json, "code_night") -> valuestring;//晚上天氣代碼


                    weather_tmp = cJSON_GetObjectItem(forecast_json, "high") -> valuestring;//最高溫度
                    memset(Weather_Dat[i].HighT,0,4);
                    memcpy(Weather_Dat[i].HighT,weather_tmp,strlen(weather_tmp));


                  
                    weather_tmp = cJSON_GetObjectItem(forecast_json, "low") -> valuestring;//最低溫度
                    memset(Weather_Dat[i].LowT,0,4);
                    memcpy(Weather_Dat[i].LowT,weather_tmp,strlen(weather_tmp));
                  
                    weather_tmp = cJSON_GetObjectItem(forecast_json, "wind_direction") -> valuestring;//風向
                    memset(Weather_Dat[i].Wind_Dir,0,10);
                    memcpy(Weather_Dat[i].Wind_Dir,weather_tmp,strlen(weather_tmp));
                  
                    weather_tmp = cJSON_GetObjectItem(forecast_json, "wind_scale") -> valuestring;//風力
                    memset(Weather_Dat[i].WindScale,0,4);
                    memcpy(Weather_Dat[i].WindScale,weather_tmp,strlen(weather_tmp));
                  
                    weather_tmp = cJSON_GetObjectItem(forecast_json, "humidity") -> valuestring;//濕度
                    memset(Weather_Dat[i].Humi,0,4);
                    memcpy(Weather_Dat[i].Humi,weather_tmp,strlen(weather_tmp));
                }
            }
            else
            {
                //printf("daily json格式錯誤
");
                Weather_Dat[0].Flag = 0;
}


        }
        else
        {
            Weather_Dat[0].Flag = 0;
            //printf("results格式錯誤:%s
", cJSON_GetErrorPtr());
        }
    }
    else
    {
        Weather_Dat[0].Flag = 0;
        //printf("JSON格式錯誤
");
    }
    cJSON_Delete(root);  
}
解析后,將有用數據轉換為自己想要的格式存儲在變量中。需要注意的是,cJSON可能占用較大的堆棧,因此堆棧需要設大一些。

總結一下,獲取天氣預報的步驟如下:

1.注冊賬號。

2.獲取私鑰。

3.連接服務器。

AT+CIPSTART="TCP”,” api.seniverse.com”,80

4..打開傳透模式。

AT+CIPSEND

5..收到‘>’符號后,發送GET請求

GET https://api.seniverse.com/v3/weather/daily.json?key=your_key&location=ip&language=zh-Hans&unit=c&start=0&days=3

6.等待接收數據,并解析。

以上就是單片機通過AT指令訪問WIFI模塊獲取網絡時間和天氣預報的方法,需要注意的是上述所有指令后面別忘了加回車換行符。






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6035

    文章

    44553

    瀏覽量

    634736
  • 觸摸屏
    +關注

    關注

    42

    文章

    2301

    瀏覽量

    116131
  • wifi模塊
    +關注

    關注

    60

    文章

    379

    瀏覽量

    73475
  • ESP8266
    +關注

    關注

    50

    文章

    962

    瀏覽量

    44967

原文標題:單片機通過WIFI模塊(ESP8266)獲取網絡時間與天氣預報

文章出處:【微信號:嵌入式技術開發,微信公眾號:嵌入式技術開發】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    labview天氣預報

    `用labview寫的天氣預報,信息比較多,懶得分析,你們各取所需吧!`
    發表于 07-28 14:49

    怎樣去設計一種基于rt-thread帶有顯示時間天氣預報功能的桌面小盒子

    摘要這個桌面小盒子是之前的東西,一直放著沒有整理好。最近有空了就把他整理整理。小盒子主要用來顯示時間天氣預報功能比較簡單,其實還有很多可以玩的,懶得弄,所以就把最簡單的整理出來。軟件
    發表于 03-31 14:46

    基于ESP32 WiFi連接天氣預報機的設計方案

    描述WeatherBot - 3D 打印天氣預報劇院 | ESP32 和 OpenWeatherMap如何 3D 打印/激光切割帶有 E-ink 顯示的 ESP32 WiFi 連接天氣預報
    發表于 06-30 06:49

    【Banana PI Leaf S3開發板試用體驗】基于Banana PI Leaf S3的天氣預報系統

    request獲取本地天氣預報,然后再解析返回的JSON,實現幾個關鍵詞的內容在OLED上 的顯示。至于HTTPS與HTTP的選擇,當然是越簡單越好了,找了個HTTP的天氣網站(ht
    發表于 10-17 20:06

    【國民技術N32項目移植】5.項目提交-天氣顯示及預報系統介紹以及演示

    SPI+DAM驅動觸摸LCD(ST7789+XPT2046)4.天氣顯示及預報系統之ESP8266聯網以及獲取天氣
    發表于 02-22 19:53

    Android智能手機天氣預報系統設計及實現

    Android智能手機天氣預報系統設計及實現
    發表于 01-14 11:22 ?22次下載

    由MQTT進行的天氣預報ESPWatch 遠程控制本地儀器

    ESPWatch基于ESP-12 WIFI模塊。它從Internet服務器獲取幾天的日期/時間天氣預報
    的頭像 發表于 06-13 09:44 ?3721次閱讀

    基于STM32 ESP8266的WIFI TFT自動校時天氣預報設計

    本設計使用stm32作為主控,采用esp8266作為網絡接入模組,可實現自動校準時間以及獲取天氣信息等功能! 該項目成本低廉,主要
    的頭像 發表于 12-07 11:09 ?5417次閱讀

    基于天氣預報的自動灌溉系統

    電子發燒友網站提供《基于天氣預報的自動灌溉系統.zip》資料免費下載
    發表于 10-31 14:47 ?2次下載
    基于<b class='flag-5'>天氣預報</b>的自動灌溉系統

    Zambreti天氣預報器開源分享

    電子發燒友網站提供《Zambreti天氣預報器開源分享.zip》資料免費下載
    發表于 11-01 14:30 ?0次下載
    Zambreti<b class='flag-5'>天氣預報</b>器開源分享

    基于SWM32單片機+LVGL的4.3寸觸摸屏設計

    Uart1通過AT 指令訪問WIFI模塊,連接WIFI后,訪問心知天氣獲取當地的天氣預報;訪問時間
    的頭像 發表于 11-22 17:34 ?2012次閱讀

    Arduino天氣預報小矮人

    電子發燒友網站提供《Arduino天氣預報小矮人.zip》資料免費下載
    發表于 02-08 16:09 ?0次下載
    Arduino<b class='flag-5'>天氣預報</b>小矮人

    ESP8266獲取天氣預報信息,并使用CJSON解析天氣預報數據

    當前文章介紹如何使用ESP8266和STM32微控制器,搭配OLED顯示,制作一個能夠實時顯示天氣預報的智能設備。將使用心知天氣API來獲取天氣
    的頭像 發表于 04-27 13:45 ?2288次閱讀

    天氣預報顯示開源項目

    電子發燒友網站提供《天氣預報顯示開源項目.zip》資料免費下載
    發表于 06-14 10:47 ?0次下載
    <b class='flag-5'>天氣預報</b>顯示開源項目

    AWTK 開源串口開發(11) - 天氣預報

    AWTK串口內置了XML/JSON/INI等各種數據文件的模型,并支持用HTTP/HTTPS從網絡獲取數據。不用編寫一行代碼,即可實現天氣預報、股票行情、航班查詢和快遞查詢等
    的頭像 發表于 03-05 08:24 ?396次閱讀
    AWTK 開源串口<b class='flag-5'>屏</b>開發(11) - <b class='flag-5'>天氣預報</b>
    主站蜘蛛池模板: 俄罗斯xxxxxbbbbb| 中文字幕按摩| 亚洲日韩欧美国产专区| 亚洲视频一| 最新国自产拍 高清完整版| 999国产高清在线精品| thermo脱色摇床安卓下载| 俄罗斯爱爱| 国产在线亚洲v天堂a| 久久久97人妻无码精品蜜桃| 暖暖视频免费观看高清完整版| 热热久久超碰精品中文字幕| 色拍拍噜噜噜久久蜜桃| 亚洲 日韩 国产 中文视频| 一本色道久久88加勒比—综合| 自拍黄色片| 高清不卡伦理电影在线观看| 含羞草影院AE在线观看| 麻豆免费观看高清完整视频在线| 清冷受被CAO的合不拢| 小小水蜜桃3视频在线观看| 在线观看成人免费视频| 99久久精品免费精品国产 | 亚洲大片免费| 自拍 偷拍 亚洲 经典| 国产1000部成人免费视频 | 国产高清视频a在线大全| 精品一卡2卡三卡4卡乱码精品视频| 男人私gay挠脚心vk视频| 天天看高清影视在线18| 在线免费观看成年人视频| 处88XXX| 久久精品免费电影| 日本午夜视频在线| 亚洲综合视频| 俄罗斯美女破处| 久久学生精品国产自在拍| 视频区 国产 欧美 日韩| 中文字幕在线观看国产| 国产精品视频免费观看| 免费观看成人毛片|