該項(xiàng)目是一個(gè)易于構(gòu)建的簡單氣象站,可通過WiFi和Blynk連接到您的智能手機(jī)。
背景
實(shí)際上,有很多應(yīng)用程序可以讓您將智能手機(jī)連接到物聯(lián)網(wǎng),在此期間我嘗試了很多,不過帶來的結(jié)果通常都讓我很失望。但Blynk不是這樣!它非常靈活,擁有漂亮的用戶界面,適用于各種物聯(lián)網(wǎng)平臺,并且可以在Android和iPhone上運(yùn)行。愛好者也可以免費(fèi)使用!所以這是一個(gè)相對簡單的物聯(lián)網(wǎng)項(xiàng)目,讓我可以使用Blynk進(jìn)行探索。
這個(gè)項(xiàng)目的硬件相當(dāng)簡單。我們使用ArduinoNano33IoT、一個(gè)將溫度、濕度和氣壓全部集成在一個(gè)單元中的BME280傳感器板,以及一個(gè)1英寸的OLED顯示屏。這三個(gè)部件都在3.3V電壓下運(yùn)行良好。
顯示方面是可選的-目標(biāo)是讓氣象站顯示在您的手機(jī)上。但是,在處理Blynk和您的智能手機(jī)之前,我們首先得讓OLED顯示屏上啟動和運(yùn)行所有內(nèi)容。
下面的示意圖顯示了硬件是如何互連的。傳感器和顯示接口均采用I2C。理論上,一個(gè)I2C可以支持多個(gè)設(shè)備,但是傳感器和顯示器的庫有一些沖突,所以我最終得到了兩個(gè)不同的I2C端口。傳感器在模擬引腳4和5處使用正常的默認(rèn)I2C端口。顯示器使用在數(shù)字引腳4和5處設(shè)置的輔助I2C端口。(是的,它們是相反的-SDA是數(shù)字引腳5))
硬件封裝在一個(gè)前面清晰的小塑料外殼中,以便我們可以查看內(nèi)容,同時(shí)。它需要相對防風(fēng)雨,傳感器通過底部的1/2“孔暴露在外部天氣中,使傳感器的連接使其正好位于該孔內(nèi)。我將所有東西都安裝在外殼內(nèi)膠水,但如果你打算在夏天炎熱的時(shí)候把它放在外面,你可能還想用環(huán)氧樹脂代替。
該項(xiàng)目通過USB電纜供電。它通過開箱即用的單根電纜進(jìn)行編程或供電。該電纜可以在編程時(shí)連接到您的計(jì)算機(jī),或者在用作氣象站時(shí)連接到插入式USB電源。
軟件
在Arduino上運(yùn)行的軟件不僅僅是傳感器、顯示器和Blynk庫示例的混搭。涉及的庫還有傳感器的Adafruit_BME280_Library、顯示器的ss_oled庫和Blynk的Blynk庫。這三個(gè)都可以直接從Arduino的庫管理器下載。
Blynk有很多關(guān)于如何配置硬件以與其交互的示例:https://examples.blynk.cc/但它沒有將Nano33IoT列為其支持的Arduino之一。但Blynk確實(shí)支持WiFiNINA,它被Nano33IoT和其他幾個(gè)Arduino處理器使用。所以添加這兩個(gè)包含解決了這個(gè)問題:#include《WiFiNINA.h》和#include《BlynkSimpleWiFiNINA.h
您將在我的代碼中看到的另一項(xiàng)添加是:#include《avr/dtostrf.h》這是將傳感器輸出的數(shù)字轉(zhuǎn)換為適合在OLED顯示屏上顯示的字符串所必需的。起初,我向Blynk發(fā)送了與我發(fā)送到OLED相同的字符串。這可以很好地顯示數(shù)字,但是當(dāng)我添加圖表時(shí)完全失敗了。為了讓圖表發(fā)揮作用,Blynk顯然需要實(shí)際的數(shù)字。
注意-大氣壓力通常報(bào)告為校正到海平面。在較高海拔處,大氣壓力明顯下降,因此要將傳感器的值校正為海平面上的等效讀數(shù),您必須在每1000英尺海拔的測量值中添加一個(gè)大約1英寸汞柱的值。在我自己的附加代碼中,你會看到我添加了1.3來補(bǔ)償我自己海拔1300英尺的高度。您將需要更改此值以匹配您自己的高度。每1000英尺1英寸汞柱只是一個(gè)粗略的估計(jì)。如果你想要一個(gè)精確的修正,網(wǎng)上有表格可以為你提供精確的海拔修正。
此時(shí),您可以設(shè)置硬件,并使用我的附加軟件在OLED顯示屏上顯示天氣數(shù)據(jù)。只需在Setup中注釋掉Blynk.begin()行,即可讓氣象站自行運(yùn)行。(如果您不注釋掉Blink.begin(),沒有與Blynk的有效連接,則草圖將停止或掛起。)在
Blynk
Blynk很容易安裝在你的iPhone或Android上,并附帶詳細(xì)的文檔:http://docs.blynk.cc/但是那里有太多的信息和太多的選項(xiàng),一開始我發(fā)現(xiàn)文檔有點(diǎn)混亂,所以我會在這里提供我自己的如何開始使用Blynk的版本。
我在iPhone上使用了Blynk,但我認(rèn)為與Android的使用情況非常相似,您可以按照我的說明使用其中任意一個(gè)。
在擁有應(yīng)用程序后,您需要創(chuàng)建一個(gè)帳戶。從那里,在應(yīng)用程序中,您創(chuàng)建一個(gè)新項(xiàng)目。您的項(xiàng)目提供了一個(gè)身份驗(yàn)證代碼,用于將您的硬件與您的項(xiàng)目鏈接。你需要做的第一項(xiàng)工作是通過WiFi將您的硬件連接到您的Blynk項(xiàng)目。您可以使用示例.blynk.cc上名為BlynkBlink的Blynk默認(rèn)草圖/程序來完成此操作并進(jìn)行測試,它允許您打開和關(guān)閉Nano33IoT上的板載LED。
但我的建議是,在嘗試讓氣象站與Blynk合作之前,先嘗試一下并讓它工作。
我們已經(jīng)討論了一些關(guān)于配置我們的軟件以使我們的Nano33IoT與Blynk一起工作的內(nèi)容。如果您打開examples.blynk.cc,它默認(rèn)為ESP8266板。找到#include《ESP8266WiFi.h》和#include《BlynkSimpleEsp8266.h》并將它們替換為#include《WiFiNINA.h》和#include《BlynkSimpleWiFiNINA.h用于我們的Nano33IoT板。
除了為Nano33IoT添加WiFiNINA支持外,正如我們已經(jīng)討論過的,您需要添加WiFi憑據(jù)和Blynk項(xiàng)目的身份驗(yàn)證代碼。
首先,檢查連接。正確配置并運(yùn)行BlynkBlink草圖后,打開Arduino的串行監(jiān)視器,您應(yīng)該能夠看到與Blynk云服務(wù)器的連接。此時(shí),我們可以擱置硬件,在手機(jī)上使用Blynk應(yīng)用程序。
我發(fā)現(xiàn)Blynk應(yīng)用程序的界面有些混亂:
左上角的圖標(biāo)允許您在項(xiàng)目之間進(jìn)行選擇,也可以注銷您的帳戶;
右上角允許您進(jìn)入和退出編輯項(xiàng)目模式。中間那個(gè)做什么取決于你在哪里。
要控制我們的板載LED,我們需要在應(yīng)用程序中進(jìn)入編輯模式。然后您將看到一個(gè)空白屏幕。如果您向左滑動,它將移到一邊以顯示小部件工具箱。通過單擊選擇一個(gè)按鈕,它現(xiàn)在將出現(xiàn)在主屏幕上。在此處單擊它,它將打開以進(jìn)行配置。將其從推送模式移至切換模式。使用引腳選擇來選擇板載LED-Nano33IoT上的數(shù)字引腳13。現(xiàn)在點(diǎn)擊確定,然后點(diǎn)擊右上角的圖標(biāo)退出編輯模式。您的按鈕現(xiàn)在應(yīng)該控制LED。
帶有Blynk的氣象站
我們現(xiàn)在準(zhǔn)備將我們的氣象站鏈接到我們的Blynk項(xiàng)目。打開我附加的軟件,在設(shè)置中取消注釋Blynk.begin()行,添加您的項(xiàng)目身份驗(yàn)證代碼和WiFi憑據(jù),然后上傳到Arduino。
在手機(jī)上打開Blynk。如果您按照本篇進(jìn)行操作,您的按鈕仍然存在,并且應(yīng)該仍然能夠打開和關(guān)閉板載LED。進(jìn)入編輯模式,單擊按鈕進(jìn)行配置,然后使用最底部的Delete將其刪除。現(xiàn)在轉(zhuǎn)到工具箱并選擇一個(gè)標(biāo)簽值。它在顯示下方的列表中。返回顯示頁面,單擊標(biāo)簽值顯示進(jìn)行配置。單擊pin,然后選擇VirtualpinV3。我們將在下一段中解釋虛擬引腳。現(xiàn)在對于標(biāo)簽,它說“例如溫度”類型“溫度/pin.#/deg.F”。.#告訴應(yīng)用程序顯示小數(shù)點(diǎn)后一位。選擇大文本大小,并將刷新間隔保留為推送,文本顏色保留為綠色。
現(xiàn)在單擊確定。您的標(biāo)簽值現(xiàn)在幾乎可以顯示溫度了,但它的顯示界面太窄了,我們需要慢慢選擇它-足夠慢以至于它不會重新進(jìn)入配置模式。標(biāo)簽的輪廓將亮起。現(xiàn)在可以拉伸它以顯示整行。它也可以四處移動,盡管我們不會在這里這樣做。將其拉伸到屏幕上大約3/4的位置。然后退出編輯模式,您應(yīng)該會看到手機(jī)上顯示的溫度。
在我們完成配置Blynk之前,有必要解釋一下我們剛剛在設(shè)置溫度顯示時(shí)看到的一些事情。
Blynk使用了一個(gè)有點(diǎn)獨(dú)特的功能,稱為虛擬引腳。顯示值小部件可以設(shè)置為讀取我們處理器上的模擬引腳,或設(shè)置為讀取數(shù)字引腳是高電平還是低電平。但更多時(shí)候,我們想要顯示變量的內(nèi)容。我們通過為該變量分配一個(gè)虛擬引腳號來做到這一點(diǎn),從那時(shí)起,Blynk應(yīng)用程序?qū)⑼ㄟ^它的虛擬引腳號引用該變量。因此,在我的軟件中,您將看到我將華氏溫度分配給虛擬引腳V3的位置。
另一個(gè)值得一提的Blynk想法是我們在Push模式下留下的RefreshInterval。這意味著Arduino草圖正在持續(xù)輸出數(shù)據(jù),在我們的例子中,每分鐘更新一次溫度、濕度和氣壓。但Blynk也支持Pull方法,其中Blynk應(yīng)用程序設(shè)置間隔并詢問硬件以獲取新數(shù)據(jù)。
所以現(xiàn)在讓我們完成在Blynk上顯示我們的氣象站。您將需要另外兩個(gè)標(biāo)簽值顯示,一個(gè)用于濕度百分比(虛擬引腳V4),另一個(gè)用于“英寸汞柱”或英寸汞柱(虛擬引腳V5)的壓力。對于濕度,我顯示小數(shù)點(diǎn)后一位;對于壓力,我顯示了小數(shù)點(diǎn)后兩位。
如果您現(xiàn)在有顯示溫度、濕度和氣壓的三個(gè)標(biāo)簽值顯示,您可以添加所有三個(gè)的圖表。這是通過添加SuperChart小部件來完成的。首先,將其向下拉伸,使其充滿屏幕的其余部分。然后點(diǎn)擊它進(jìn)行配置。我打開了顯示x軸值,并選擇了實(shí)時(shí)分辨率、1小時(shí)、6小時(shí)、1天、1周、1個(gè)月。和3個(gè)月。我們需要三個(gè)數(shù)據(jù)流——一個(gè)用于我們的3個(gè)變量中的每一個(gè)。要配置每個(gè)數(shù)據(jù)流,請單擊其右側(cè)的圖標(biāo)。我們需要再次為每個(gè)選擇虛擬引腳。對于y軸縮放,選擇高度。然后對于溫度,將高度設(shè)置為67-100。對于濕度,將高度設(shè)置為34-66。對于壓力,將高度設(shè)置為0-33。設(shè)置顏色以匹配標(biāo)記值。打開顯示Y軸。就是這樣。退出編輯模式,你的手機(jī)顯示應(yīng)該和我的一樣。圖表需要一點(diǎn)時(shí)間才能開始。要獲得快速結(jié)果,請查看實(shí)時(shí)或1小時(shí)分辨率。
您可能想了解的Blynk的另一項(xiàng)功能是與其他智能手機(jī)共享您完成的Blynk項(xiàng)目,以便不止一部手機(jī)可以查看氣象站。要啟動共享,請將您的項(xiàng)目置于編輯模式,然后單擊項(xiàng)目設(shè)置的頂部中間圖標(biāo)。打開共享,然后生成一個(gè)鏈接。它會給你一個(gè)二維碼,你可以通過電子郵件發(fā)送或以其他方式分享。新用戶需要Blynk應(yīng)用程序,但不需要Blynk上的帳戶。未注冊用戶的應(yīng)用程序有一個(gè)鏈接,用于加載另一個(gè)人的Blynk項(xiàng)目的二維碼。
這是對Blynk的一個(gè)非常有限的介紹,但應(yīng)該會帶給你一個(gè)很好的使用起點(diǎn)。
-
智能手機(jī)
+關(guān)注
關(guān)注
66文章
18477瀏覽量
180110 -
Arduino
+關(guān)注
關(guān)注
188文章
6468瀏覽量
186953 -
氣象站
+關(guān)注
關(guān)注
1文章
749瀏覽量
15660
發(fā)布評論請先 登錄
相關(guān)推薦
評論