使用 Squareline Studio 和 LVGL 開發(fā)的 ESP32 電子氣壓計(jì)
氣壓計(jì)是一種用于測量大氣壓力的科學(xué)儀器。氣壓上升通常預(yù)示著天氣好轉(zhuǎn),氣壓下降則通常意味著即將有風(fēng)和降雨。氣壓穩(wěn)定則表示天氣狀況平穩(wěn)。在這個項(xiàng)目中,我將介紹一種非常簡單的制作氣動式氣壓計(jì)模擬器的方法。實(shí)際上,現(xiàn)代數(shù)字電子技術(shù)被運(yùn)用其中,借助這些技術(shù),經(jīng)典機(jī)械氣壓計(jì)的功能實(shí)現(xiàn)了 100%的模擬。氣動式氣壓計(jì)包含兩個箭頭:一個黑色的測量箭頭和一個黃色的參考箭頭。
預(yù)測天氣的方法如下:我們需要將黑色測量箭頭與黃色箭頭對齊。幾個小時后,如果黑色測量箭頭向左移動到黃色箭頭的左側(cè),那么將會出現(xiàn)不穩(wěn)定天氣;而如果它向右移動,則天氣將會好轉(zhuǎn)并趨于穩(wěn)定。如果這兩個箭頭保持對齊狀態(tài),那么預(yù)計(jì)天氣狀況不會有變化。在原始儀器中,參考箭頭是通過儀器中間的按鈕來移動的,在這種情況下,該功能是由旋轉(zhuǎn)編碼器來實(shí)現(xiàn)的。
這款設(shè)備極其簡單,這得益于其 CROWPANEL 圓形顯示屏,該顯示屏內(nèi)置了 ESP32S3 微控制器和旋轉(zhuǎn)編碼器。因此,只需將 BME280 模塊連接到該顯示屏模塊對應(yīng)的 I2C 端口即可。
這是我首次使用 LVGL 庫和 Squareline Studio 進(jìn)行的項(xiàng)目開發(fā),它能讓你以相對簡單的方式創(chuàng)建出極具視覺效果且功能強(qiáng)大的項(xiàng)目。
這次我就不詳細(xì)闡述在 Squareline Studio 中開發(fā)和創(chuàng)建代碼及用戶界面的方法了,因?yàn)檫@些內(nèi)容在之前的許多教程中都有詳細(xì)介紹。不過,我會簡要描述一下成功重現(xiàn)該項(xiàng)目的步驟。
該項(xiàng)目由 PCBWay 公司贊助。從概念設(shè)計(jì)到實(shí)際生產(chǎn),PCBWay 為全球創(chuàng)新者提供前沿的電子設(shè)計(jì)解決方案,涵蓋硬件設(shè)計(jì)、軟件開發(fā)、機(jī)械設(shè)計(jì)、產(chǎn)品測試及認(rèn)證等方面。PCBWay 工程團(tuán)隊(duì)由在電子、嵌入式系統(tǒng)和產(chǎn)品開發(fā)領(lǐng)域經(jīng)驗(yàn)豐富的工程師組成。他們成功完成了涵蓋醫(yī)療設(shè)備、工業(yè)自動化、消費(fèi)電子、智能家居和物聯(lián)網(wǎng)等多個行業(yè)的數(shù)百個項(xiàng)目。
以下是使用所給庫進(jìn)行設(shè)備安裝的詳細(xì)說明。
首先,您需要使用版本為 1.8.15 及以上的 Arduino IDE。然后,請根據(jù) Elecrow GitHub 頁面上的說明安裝 ESP32 核心版本 2.0.14 或 2.0.15。現(xiàn)在,在“工具-板-ESP32 Arduino”中,我們需要選擇 ESP32S3 開發(fā)模塊。
在本板中,我們需要對一些屬性進(jìn)行修改:閃存大小 16MB、分區(qū)方案 - 大型應(yīng)用程序,以及 PSRAM - OPI PSRAM。接下來,我們需要安裝 LVGL 庫,具體版本為 8.3.11。您還需要安裝 Arduino_GFX_Library 以及 Adafruit_BME280 庫。所有這些庫和必要的文件都在文末給出。接下來是另一個重要的操作,即在“庫”文件夾的根目錄(通常該文件夾位于用戶/文檔/Arduino 目錄下)中,您需要復(fù)制 LVGL 庫的配置文件,名為“l(fā)v_conf.h”?,F(xiàn)在我們完成了支持部分,接下來需要編譯并上傳給定的代碼。
為此,我們解壓名為“Code Final.zip”的文件,但不更改內(nèi)部文件夾的名稱。我們進(jìn)入該文件夾,并啟動“.ino”文件。這樣,代碼就與之前使用 Squareline Studio 創(chuàng)建的必要用戶界面文件一同被打開。現(xiàn)在我們可以編譯并上傳代碼,而不會出現(xiàn)錯誤。
至于代碼的編寫方式,其設(shè)計(jì)使得我們能夠輕松更改幾個參數(shù),從而實(shí)現(xiàn)氣壓計(jì)的正常和精確運(yùn)行:
?我們所在的高度被輸入到了如下這一行中:static const float ALTITUDE_M =
?從傳感器讀取數(shù)值的頻率在以下這行代碼中進(jìn)行了定義:static const uint32_t READ_PERIOD_MS
?氣壓計(jì)的“校準(zhǔn)”操作是在以下代碼行中進(jìn)行的:static const float NEEDLE_OFFSET_DEG,這里我們設(shè)定了一個角度值,以便箭頭能夠準(zhǔn)確顯示顯示在串行監(jiān)視器中的實(shí)際氣壓值。
?而黃色箭頭移動時所具有的精確程度,即變化步長,是在以下這行代碼中設(shè)定的: float diff = (encoderValue - lastEncoderValue) * 1.0f;
現(xiàn)在讓我們來看看該設(shè)備在實(shí)際環(huán)境中的運(yùn)行情況:在開啟設(shè)備后,屏幕上會立即出現(xiàn)一幅復(fù)古型氣壓計(jì)的詳細(xì)圖像,黑色箭頭會短暫停留在當(dāng)前的相對大氣壓力值上。通常情況下,如果壓力高于 1013 百帕,就表明天氣狀況穩(wěn)定;如果低于 1013 百帕,則表明天氣不穩(wěn)定。對我們而言,一段時間內(nèi)(至少 3 次)大氣壓力的變化數(shù)據(jù)非常重要。
為此,我們將參考的黃色箭頭精確地設(shè)置在黑色箭頭的正上方。如果經(jīng)過一定時間后,黑色箭頭相對于黃色箭頭向左移動了,那么天氣就會變得不穩(wěn)定;反之,如果它向右移動,天氣就會趨于穩(wěn)定。如果這兩個箭頭保持重疊狀態(tài),那么天氣就不會發(fā)生變化。通過用手指在傳感器上方按壓(人為增加壓力),我們可以看到箭頭緩慢地向右移動,然后在短時間內(nèi)又回到初始狀態(tài)。由此可見,這個氣壓計(jì)完全模擬了機(jī)械式安諾里德氣壓計(jì)。唯一的區(qū)別在于,對于機(jī)械氣壓計(jì)而言,為了準(zhǔn)確讀取當(dāng)前值,你必須多次輕觸玻璃表面,而在這種情況下總是準(zhǔn)確的,這無疑是一個巨大的優(yōu)勢。更不用說其精度了,現(xiàn)在已經(jīng)達(dá)到了小數(shù)點(diǎn)位數(shù)的精度。
最后,簡單總結(jié)一下:該項(xiàng)目展示了現(xiàn)代電子技術(shù)如何能夠完全取代并改進(jìn)傳統(tǒng)的機(jī)械儀器,以數(shù)字化的精確度呈現(xiàn)出現(xiàn)代化的復(fù)古外觀。有了這款氣壓計(jì),您不僅能獲得一個實(shí)用的天氣預(yù)報(bào)設(shè)備,還能為您的家增添一道視覺上的精彩裝飾。
本文編譯自hackster.io





