ESP8266實現獲取天氣情況

利用太極創客提供的ESP8266 心知天氣庫獲取天氣情況并顯示

心知天氣庫地址:

ESP8266-心知天氣: 本庫主要功能為使用ESP8266物聯網開發板通過心知天氣 API 獲取天氣等信息。

clone到本地:?

git clone https://gitee.com/taijichuangke/ESP8266-Seniverse.git

安裝該庫,只需要將整個目錄 復制到C:\Users\用戶名\AppData\Local\Arduino15\libraries

/**********************************************************************
項目名稱/Project          : 零基礎入門學用物聯網
程序名稱/Program name     : weather_now(rev.002)
團隊/Team                : 太極創客團隊 / Taichi-Maker (www.taichi-maker.com)
作者/Author              : CYNO朔
日期/Date(YYYYMMDD)     : 初版建立時間20200602(最新修訂時間20200607)
程序目的/Purpose          : 
使用ESP8266_Seniverse庫通過心知天氣服務器獲取實時天氣信息。
-----------------------------------------------------------------------
本程序所屬倉庫網址
GitHub: https://github.com/taichi-maker/ESP8266-Seniverse
Gitee: https://gitee.com/taijichuangke/ESP8266-Seniverse
-----------------------------------------------------------------------
其它說明 / Other Description
心知天氣API文檔說明: https://www.seniverse.com/docs本程序為太極創客團隊制作的免費視頻教程《零基礎入門學用物聯網 》中一部分。該教程系統的
向您講述ESP8266的物聯網應用相關的軟件和硬件知識。以下是該教程目錄頁:
http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/                                
***********************************************************************/
#include <Arduino.h>
#include <ArduinoJson.h>
#include <ESP8266WiFi.h>
#include <ESP8266_Seniverse.h>#include <U8g2lib.h>const char* ssid     = "ssid";       // 連接WiFi名(此處使用taichi-maker為示例)// 請將您需要連接的WiFi名填入引號中
const char* password = "password";          // 連接WiFi密碼(此處使用12345678為示例)                                         // 請將您需要連接的WiFi密碼填入引號中// 請將您需要連接的WiFi密碼填入引號中// 心知天氣HTTP請求所需信息
// 請對以下信息進行修改,填入您的心知天氣私鑰以及需要獲取天氣信息的城市和溫度單位
// 如需進一步了解心知天氣API所提供的城市列表等信息,請前往心知天氣官方產品文檔網址:
// https://www.seniverse.com/docs
String reqUserKey = "私鑰";   // 私鑰
String reqLocation = "beijing";            // 城市
String reqUnit = "c";                      // 攝氏/華氏WeatherNow weatherNow;  // 建立WeatherNow對象用于獲取心知天氣信息
IPAddress ip;
char ipStr[16]; // 假設 IPv4 地址最大長度為 15 字符加上一個結束符 '\0'  U8G2_ST7565_ERC12864_ALT_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ D4, /* data=*/ D3, /* cs=*/ D0, /* dc=*/ D1, /* reset=*/ D2); void setup(){Serial.begin(9600);          Serial.println("");u8g2.begin();u8g2.enableUTF8Print();connectWiFi();    // 連接wifi// 配置心知天氣請求信息weatherNow.config(reqUserKey, reqLocation, reqUnit);
}void loop(){char buffer[32];if(weatherNow.update()){  // 更新天氣信息Serial.println(F("======Weahter Info======"));Serial.print("Server Response: ");Serial.println(weatherNow.getServerCode()); // 獲取服務器響應碼Serial.print(F("Weather Now: "));Serial.print(weatherNow.getWeatherText());  // 獲取當前天氣(字符串格式)Serial.print(F(" "));Serial.println(weatherNow.getWeatherCode());// 獲取當前天氣(整數格式)Serial.print(F("Temperature: "));Serial.println(weatherNow.getDegree());     // 獲取當前溫度數值Serial.print(F("Last Update: "));Serial.println(weatherNow.getLastUpdate()); // 獲取服務器更新天氣信息時間Serial.println(F("========================"));  u8g2.clearBuffer();					// clear the internal memoryu8g2.setFont(u8g2_font_ncenB12_tr);	// choose a suitable fontu8g2.drawStr(0,16,"Weahter Info");	// write something to the internal memoryu8g2.setFont(u8g2_font_ncenB08_tr);	// choose a suitable font//u8g2.drawStr(0,40,"Temperature:");	u8g2.drawStr(0, 60, ipStr);u8g2.drawStr(0,40,weatherNow.getWeatherText().c_str());sprintf(buffer, "%d", weatherNow.getDegree());u8g2.setFont(u8g2_font_ncenB24_tr);	// choose a suitable fontu8g2.drawStr(90,60,buffer);	       u8g2.sendBuffer();} else {    // 更新失敗Serial.println("Update Fail...");   Serial.print("Server Response: ");          // 輸出服務器響應狀態碼供用戶查找問題Serial.println(weatherNow.getServerCode()); // 心知天氣服務器錯誤代碼說明可通過以下網址獲取u8g2.clearBuffer();					// clear the internal memoryu8g2.setFont(u8g2_font_ncenB12_tr);	// choose a suitable fontu8g2.drawStr(0,16,"Update Fail...");	// write something to the internal memoryu8g2.sendBuffer();}                                             // https://docs.seniverse.com/api/start/error.htmldelay(30000);
}// 連接WiFi
void connectWiFi(){WiFi.begin(ssid, password);                  // 啟動網絡連接Serial.print("Connecting to ");              // 串口監視器輸出網絡連接信息Serial.print(ssid); Serial.println(" ...");  // 告知用戶NodeMCU正在嘗試WiFi連接u8g2.clearBuffer();					// clear the internal memoryu8g2.setFont(u8g2_font_ncenB12_tr);	// choose a suitable fontu8g2.drawStr(0,16,"Connecting to ...");	// write something to the internal memoryu8g2.sendBuffer();int i = 0;                                   // 這一段程序語句用于檢查WiFi是否連接成功while (WiFi.status() != WL_CONNECTED) {      // WiFi.status()函數的返回值是由NodeMCU的WiFi連接狀態所決定的。 delay(1000);                               // 如果WiFi連接成功則返回值為WL_CONNECTED                       Serial.print(i++); Serial.print(' ');      // 此處通過While循環讓NodeMCU每隔一秒鐘檢查一次WiFi.status()函數返回值}                                            // 同時NodeMCU將通過串口監視器輸出連接時長讀秒。// 這個讀秒是通過變量i每隔一秒自加1來實現的。                                              Serial.println("");                          // WiFi連接成功后Serial.println("Connection established!");   // NodeMCU將通過串口監視器輸出"連接成功"信息。Serial.print("IP address:    ");             // 同時還將輸出NodeMCU的IP地址。這一功能是通過調用ip=WiFi.localIP();snprintf(ipStr, sizeof(ipStr), "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);Serial.println(ip);              // WiFi.localIP()函數來實現的。該函數的返回值即NodeMCU的IP地址。  
}
/*-----------------------------------------------------------------------
修訂歷史/Revision History  
日期/Date    作者/Author      參考號/Ref    修訂說明/Revision Description
20200603      CYNO朔           001        add http response code check
20200603      CYNO朔           002        change file name to ESP8266_Seniverse
-----------------------------------------------------------------------*/                                 

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/13991.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/13991.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/13991.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

跟著Kimi學習結構化提示詞:19套內置提示詞都在這里了!

大家好&#xff0c;我是木易&#xff0c;一個持續關注AI領域的互聯網技術產品經理&#xff0c;國內Top2本科&#xff0c;美國Top10 CS研究生&#xff0c;MBA。我堅信AI是普通人變強的“外掛”&#xff0c;所以創建了“AI信息Gap”這個公眾號&#xff0c;專注于分享AI全維度知識…

C++ Primer Plus第十六章復習題

1、考慮下面的 類聲明 class RQ1 { private:char * st; public:RQ1(){st new char [1]; strcpy(st,"");}RQ1(const RQ1 & rq){st new char [strlen(rq.st)1]; strcpy(st,rq.st);}~RQ1(){delete [] st};RQ & OPERATOR (cosnt RQ &rq); }; 將它轉換為使…

Java技術深度解析:高級面試問題與精粹答案(一)

Java 面試問題及答案 問題1&#xff1a;請解釋什么是Java虛擬機&#xff08;JVM&#xff09;以及它的作用是什么&#xff1f; 答案1&#xff1a; Java虛擬機&#xff08;JVM&#xff09;是一個可以執行Java字節碼的虛擬計算機。它是一個抽象的計算機&#xff0c;能夠通過軟件…

【筆記】樹(Tree)

一、樹的基本概念 1、樹的簡介 之前我們都是在談論一對一的線性數據結構&#xff0c;可現實中也有很多一對多的情況需要處理&#xff0c;所以我們就需要一種能實現一對多的數據結構--“樹”。 2、樹的定義 樹&#xff08;Tree&#xff09;是一種非線性的數據結構&#xff0…

作物水文模型AquaCrop---用于評估作物對水的需求、灌溉計劃和管理策略

AquaCrop是由世界糧食及農業組織&#xff08;FAO&#xff09;開發的一個先進模型&#xff0c;旨在研究和優化農作物的水分生產效率。這個模型在全球范圍內被廣泛應用于農業水管理&#xff0c;特別是在制定農作物灌溉計劃和應對水資源限制方面顯示出其強大的實用性。AquaCrop 不…

如何在海豚調度器自動監測報表是否跑出數據

在數據倉庫報表開發時,有的報表依賴的表多,雖然在海豚調度任務上是跑成功,但實際上沒有跑出數據來。開發人員負責的任務和表越來越多,每天去手動檢查費時費力,不去理睬默認是成功的,等到業務或產品發現問題時,又給人一種不專業不負責的感覺。 比較好的方式是用代碼進行自…

Python知識點復習

文章目錄 Input & OutputVariables & Data typesPython字符串重復&#xff08;字符串乘法&#xff09;字符串和數字連接在一起print時&#xff0c;要強制類型轉換int為str用input()得到的用戶輸入&#xff0c;是str類型&#xff0c;如果要以int形式計算的話&#xff0c…

SkyWalking 介紹及部署

1、SkyWalking簡介2、SkyWalking的搭建 2.1 部署Elasticsearch2.2 部署SkyWalking-Server2.3 部署SkyWalking-UI3、應用接入 3.1 jar包部署方式3.2 dockerfile方式3.3 DockerFile示例4、SkyWalking UI 界面說明 4.1 儀表盤 4.1.1 APM &#xff08;1&#xff09;全局維度&#x…

UBUNTU22.04無法安裝nvidia-driver-550 依賴于 nvidia-dkms-550 (<= 550.54.15-1)

類似的報錯信息&#xff0c;就是卡在了nvidia-dkms-550無法安裝 Loading new nvidia-550.40.07 DKMS files… Building for 6.5.0-15-generic Building for architecture x86_64 Building initial module for 6.5.0-15-generic ERROR: Cannot create report: [Errno 17] File e…

前端canvas項目實戰——在線圖文編輯器(十):小地圖MiniMap(上)

目錄 前言一、 效果展示二、 實現步驟0. 行動前的思考1. 為小地圖更新「背景圖」2. 為小地圖更新「滑動窗口」2.1 獲取新的滑動窗口「寬高」2.2 獲取新的滑動窗口「位置」3. 為小地圖更新「遮罩」后記前言 上一篇博文中,我們引入了「邏輯畫布」的概念,讓整個工具的頁面看起來…

JPA 3萬字面試寶典

目錄 什么是JPA? JPA和Hibernate有什么區別? 什么是ORM(對象關系映射)? 什么是Entity?

【機器學習】在電子商務(淘*拼*京*—>抖)的應用分析

機器學習與大模型&#xff1a;電子商務的新引擎 一、電子商務的變革與挑戰二、機器學習與大模型的崛起三、機器學習與大模型在電子商務中的應用實踐個性化推薦精準營銷智能客服庫存管理與商品定價 四、總結與展望 隨著互聯網的飛速發展&#xff0c;電子商務已經成為我們生活中不…

NDIS小端口驅動(四)

NDIS中斷相關 1. 注冊和取消注冊中斷&#xff1a; 微型端口驅動程序調用 NdisMRegisterInterruptEx 來注冊中斷。 驅動程序分配并初始化 NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS 結構&#xff0c;以指定中斷特征和函數入口點&#xff0c;驅動程序將結構傳遞給 NdisMRegister…

【三劍客和正則表達式】

文章目錄 學習目標一、什么是三劍客1.三劍客grep2.三劍客sed3.三劍客awk4.正則過濾例子15.正則過濾例子2 總結 學習目標 1.學會使用 grep 2.學會使用 sed 3.學會使用 awk 4.學會使用正則表達式一、什么是三劍客 正則三劍客&#xff1a;grep sed awk 1.三劍客grep # 擅長過濾…

【MySQL精通之路】查詢優化器的使用(8)

MySQL通過影響查詢計劃評估方式的系統變量、可切換優化、優化器和索引提示以及優化器成本模型提供優化器控制。 服務器在column_statistics數據字典表中維護有關列值的直方圖統計信息&#xff08;請參閱第10.9.6節“Optimizer統計信息”&#xff09;。與其他數據字典表一樣&am…

#Ethereum 現貨ETF 問題匯總 轉

專題&#xff1a; #Ethereum 現貨ETF 問題匯總&#xff0c;包括了多數小伙伴們的疑問&#xff0c;有任何忽略請留言給我&#xff0c;我會補充。 1. #ETH 現貨ETF何時公布&#xff1f; 一般來說會在北京時間的5月24日凌晨2點至4點之間&#xff0c;不排除稍微延后到凌晨6點的可能…

基于大語言模型的應用

在AI領域&#xff0c;大語言模型已成為備受矚目的焦點&#xff0c;尤其在自然語言處理&#xff08;NLP&#xff09;領域&#xff0c;其應用愈發廣泛。BLM作為一種多任務語言建模方法&#xff0c;旨在構建一個具備多功能的強大模型。在給定文本和查詢條件下&#xff0c;該模型能…

【深度學習】YOLOv8訓練,交通燈目標檢測

文章目錄 一、數據處理二、環境三、訓練 一、數據處理 import traceback import xml.etree.ElementTree as ET import os import shutil import random import cv2 import numpy as np from tqdm import tqdmdef convert_annotation_to_list(xml_filepath, size_width, size_he…

海山數據庫(He3DB)代理ProxySQL使用詳解:(二)功能實測

讀寫分離實測 ProxySQL官方demo演示了三種讀寫分離的方式&#xff1a;使用不同的端口進行讀寫分離、使用正則表達式進行通用的讀寫分離、使用正則和digest進行更智能的讀寫分離。最后一種是針對特定業務進行的優化調整&#xff0c;也可將其歸結為第二種方式&#xff0c;下邊分…

MySQL備份與日志練習

1、創建對mysql數據庫test1的定時備份任務&#xff0c;頻率是每周一的2點 create database test1;crond -e0 2 * * 1 mysqldump -u root -pAdmin123 --databases test1 > /opt/test1.sql2、test1中有t1、t2、t3三張表&#xff0c;要求只備份t2這張表 mysqldump -u root -pA…