李嘉明 馮建 廖明華 徐操喜
摘要:設(shè)計(jì)了一種基于ESP32的電子秤系統(tǒng),通過HX711模塊對(duì)稱重傳感器輸出的重量信號(hào)進(jìn)行高精度的模數(shù)轉(zhuǎn)換,轉(zhuǎn)換后的數(shù)字信號(hào)供主控芯片ESP32處理,ESP32將稱重?cái)?shù)據(jù)輸出到OLED屏上顯示,同時(shí)上傳至OneNet云平臺(tái),實(shí)現(xiàn)每次稱重?cái)?shù)據(jù)的自動(dòng)記錄,在需要統(tǒng)計(jì)物料出庫情況的應(yīng)用領(lǐng)域,具有一定的實(shí)用及推廣價(jià)值。
關(guān)鍵詞:電子秤;ESP32;OLED;OneNet;物料出庫
中圖分類號(hào):TP311? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2021)12-0216-04
1 背景
電子秤以嵌入式芯片作為主控系統(tǒng),具有測(cè)量精度高、測(cè)量速度快、可靠性強(qiáng)、應(yīng)用面廣等一系列優(yōu)點(diǎn)[1-2],逐漸取代了傳統(tǒng)的桿秤,廣泛應(yīng)用于各種商貿(mào)活動(dòng)中[3-5]。然而,目前市面上常用的電子秤不具備自動(dòng)記錄稱重?cái)?shù)據(jù)的功能,無法自動(dòng)保存從倉庫領(lǐng)取物料的多少,只能通過人工手動(dòng)記錄稱重后顯示的數(shù)值。相對(duì)于電子秤自動(dòng)保存測(cè)量稱重?cái)?shù)值,人工記錄的方式比較容易出錯(cuò),并且不符合智能化的要求。
針對(duì)上述問題,結(jié)合傳感器技術(shù)、嵌入式技術(shù)、信息通信技術(shù)、云技術(shù),采用MicroPython編寫主控程序,設(shè)計(jì)一款基于ESP32的電子秤系統(tǒng)。通過對(duì)稱重物重量的測(cè)量、模數(shù)轉(zhuǎn)換、數(shù)據(jù)上傳,完成每次稱重?cái)?shù)據(jù)自動(dòng)接入中國移動(dòng)的OneNet物聯(lián)網(wǎng)云平臺(tái),包括所稱物料的重量以及出庫時(shí)間,相關(guān)的倉庫管理人員可以登錄OneNet云平臺(tái)查看每次上傳的稱重?cái)?shù)據(jù),非常直觀便捷地掌握某物料的領(lǐng)用情況,整個(gè)過程無需人工進(jìn)行數(shù)據(jù)記錄。本系統(tǒng)對(duì)于現(xiàn)有的電子秤產(chǎn)品的改進(jìn)具有一定的參考價(jià)值。
2 系統(tǒng)方案設(shè)計(jì)
基于ESP32的電子秤系統(tǒng)主要包括稱重傳感器、HX711模塊、按鍵模塊、ESP32主控模塊、OLED顯示屏模塊,系統(tǒng)框圖如圖1所示。本系統(tǒng)上電后進(jìn)入網(wǎng)絡(luò)連接模式,根據(jù)預(yù)設(shè)的WiFi賬號(hào)和密碼,接入本地的無線網(wǎng)絡(luò),網(wǎng)絡(luò)連接成功后進(jìn)入稱重模式。在稱重模式下,稱重傳感器檢測(cè)所稱物料的重量,轉(zhuǎn)換成電信號(hào)輸出至HX711模塊,主控芯片ESP32不斷讀取由HX711模塊進(jìn)行模數(shù)轉(zhuǎn)換輸出的數(shù)字信號(hào),該數(shù)字信號(hào)經(jīng)過ESP32解析后顯示在OLED屏上,所顯示的值便是所稱物料的重量。得到所稱物料的重量后,操作人員按下按鍵模塊中的“S2”按鍵持續(xù)2秒,系統(tǒng)進(jìn)入數(shù)據(jù)上傳模式,在該模式下,ESP32通過http協(xié)議上傳當(dāng)前稱重?cái)?shù)據(jù),同時(shí)鎖定當(dāng)前的稱重?cái)?shù)據(jù),不再解析HX711發(fā)送過來的數(shù)字信號(hào),直至接收到OneNet云平臺(tái)確認(rèn)成功接入數(shù)據(jù)的響應(yīng)信息,系統(tǒng)回到稱重模式。若接收到的是上傳出錯(cuò)的響應(yīng)信息,則系統(tǒng)不會(huì)切換回稱重模式,同時(shí)ESP32會(huì)驅(qū)動(dòng)蜂鳴器工作,發(fā)出警報(bào)聲提醒操作人員數(shù)據(jù)上傳失敗,此時(shí)操作人員再次按下按鍵模塊的按鍵“S2”2秒,重新上傳稱重?cái)?shù)據(jù),數(shù)據(jù)上傳成功后,蜂鳴器停止報(bào)警。
3 系統(tǒng)硬件設(shè)計(jì)
3.1 ESP32主控模塊
ESP32可作為獨(dú)立系統(tǒng)運(yùn)行應(yīng)用程序,也可作為主機(jī)MCU的從設(shè)備,通過SPI/SDIO或I2C/UART接口提供WiFi和藍(lán)牙功能,其引腳電路圖如圖2所示。ESP32性能穩(wěn)定,工作溫度范圍達(dá)到-40℃到+125℃,內(nèi)部集成了自校準(zhǔn)電路,能夠動(dòng)態(tài)調(diào)整電壓,并且適應(yīng)外部條件的變化。本系統(tǒng)選用ESP32作為系統(tǒng)的主控芯片和通信芯片,完成本地?cái)?shù)據(jù)的分析處理,同時(shí)通過WiFi上傳稱重?cái)?shù)據(jù)至云平臺(tái)。
3.2 稱重傳感器
稱重傳感器如圖3所示,屬于電阻應(yīng)變式壓力傳感器。力敏型彈性元件上粘貼上應(yīng)變片,當(dāng)彈性元件因受力產(chǎn)生形變時(shí),導(dǎo)致應(yīng)變片發(fā)生相應(yīng)的應(yīng)變,進(jìn)而轉(zhuǎn)化成電阻的變化,最后引起內(nèi)部測(cè)量電路輸出電壓的變化。
3.3 HX711模塊
HX711模塊是專為高精度電子秤而設(shè)計(jì)的,電路圖如圖4所示。主芯片HX711是一款24位高精度的模數(shù)轉(zhuǎn)換器芯片,工作電壓2.6V至5.5V,具有兩路模擬通道輸入,輸出端的時(shí)鐘線PD_SCK和數(shù)據(jù)線DOUT與主控芯片ESP32相連,用于輸出轉(zhuǎn)換成數(shù)字信號(hào)的稱重?cái)?shù)據(jù)。
3.4 OLED顯示模塊
OLED顯示模塊通過I2C接口與主控ESP32芯片連接,接收并顯示ESP32發(fā)送的信息,主要有當(dāng)前的稱重?cái)?shù)據(jù)、連接WiFi的狀態(tài),用戶可以從OLED屏上顯示的數(shù)據(jù)獲知當(dāng)前稱重?cái)?shù)據(jù)以及系統(tǒng)的聯(lián)網(wǎng)狀態(tài)。
3.5 按鍵模塊
按鍵模塊用于實(shí)現(xiàn)人機(jī)交互,其電路圖如圖6所示。當(dāng)需要上傳稱重?cái)?shù)據(jù)時(shí),按下按鍵“S2”超過2秒,ESP32的GPIO0引腳檢測(cè)到持續(xù)2秒的低電平,系統(tǒng)進(jìn)入上傳數(shù)據(jù)模式,此時(shí)會(huì)鎖定當(dāng)前的稱重?cái)?shù)據(jù),直至接收到云平臺(tái)返回接入成功的響應(yīng)信息。當(dāng)需要切換物料種類時(shí),短按按鍵“S2”,即按鍵“S2”按下的持續(xù)時(shí)間小于2秒,OLED屏顯示切換后的物料名稱,稱重?cái)?shù)據(jù)也會(huì)上傳到切換后的物料所對(duì)應(yīng)的云平臺(tái)數(shù)據(jù)流中。當(dāng)遇到運(yùn)行故障或是網(wǎng)絡(luò)連接失敗時(shí),按下按鍵“S1”,系統(tǒng)將會(huì)重啟。
3.6 蜂鳴器模塊
蜂鳴器模塊用于聲音報(bào)警,提醒操作人員當(dāng)前稱重?cái)?shù)據(jù)上傳失敗,其電路圖如圖7所示。圖中的蜂鳴器屬于有源蜂鳴器,使用直流信號(hào)即可令其鳴叫。ESP32的輸出引腳連接限流電阻R5后接入三極管Q1的基級(jí),當(dāng)該輸出引腳為低電平時(shí),三極管截止,蜂鳴器不發(fā)出聲響,反之,三極管導(dǎo)通,蜂鳴器持續(xù)發(fā)出聲響。
4 系統(tǒng)軟件設(shè)計(jì)
本系統(tǒng)采用Mu作為開發(fā)軟件,代碼用MicroPython編寫,程序流程圖如圖8所示。系統(tǒng)上電并初始化后,ESP32開始連接WiFi網(wǎng)絡(luò)。若WiFi連接失敗,則在10秒內(nèi)進(jìn)行重連,10秒后如果還是連接不成功,OLED屏上顯示“WiFi連接失敗,請(qǐng)重啟系統(tǒng)”,并結(jié)束程序運(yùn)行。
WiFi連接成功后,ESP32接收并解析HX711傳遞過來的稱重?cái)?shù)據(jù),并將其顯示在OLED顯示屏上,單位是kg(千克),接著ESP32檢測(cè)按鍵“S2”有無被按下,若沒有檢測(cè)到按鍵“S2”被按下,則采集并解析新的稱重值,若檢測(cè)到按鍵“S2”有被按下,則根據(jù)被按下的時(shí)長(zhǎng),即相應(yīng)輸入引腳檢測(cè)到的低電平持續(xù)時(shí)間是否大于2秒,來判斷是進(jìn)入上傳數(shù)據(jù)的模式還是切換物料的模式,超過2秒進(jìn)入數(shù)據(jù)上傳模式,低于2秒則進(jìn)入物料切換模式。
數(shù)據(jù)上傳模式下,ESP32會(huì)將當(dāng)前稱重?cái)?shù)據(jù)鎖定,并將該數(shù)據(jù)發(fā)送OneNet云平臺(tái),接入?yún)f(xié)議是http,直至接收到云平臺(tái)返回的成功接收的應(yīng)答信息,ESP32才會(huì)解開鎖定的稱重?cái)?shù)據(jù),重新獲取新的稱重值,否則將會(huì)判定本次數(shù)據(jù)上傳失敗,并驅(qū)動(dòng)蜂鳴器報(bào)警,蜂鳴器響起后須重新進(jìn)行上傳操作,成功本次稱重?cái)?shù)據(jù)后蜂鳴器停止報(bào)警。物料切換模式下,OLED顯示當(dāng)前所選的物料名稱,仍然是通過按下按鍵“S2”來觸發(fā)物料的切換。
5 系統(tǒng)測(cè)試
OneNet是由中國移動(dòng)打造的PaaS(平臺(tái)即服務(wù))物聯(lián)網(wǎng)開放平臺(tái),提供數(shù)據(jù)接入、分析和可視化功能,為企業(yè)提供成熟、穩(wěn)定的物聯(lián)網(wǎng)云平臺(tái),幫助開發(fā)者輕松實(shí)現(xiàn)設(shè)備接入與設(shè)備連接,快速完成產(chǎn)品開發(fā)及部署,提供完善的物聯(lián)網(wǎng)解決方案。本系統(tǒng)采用OneNet4.0作為云端接入,接入?yún)f(xié)議為HTTP,云平臺(tái)的配置部署流程如圖9所示。
打開瀏覽器訪問OneNet官網(wǎng)“https://open.iot.10086.cn/”,首先注冊(cè)并登錄賬號(hào),然后進(jìn)入控制臺(tái),選擇“切換至舊版”,點(diǎn)擊“多協(xié)議接入”,在“HTTP”選項(xiàng)欄下添加產(chǎn)品,填寫產(chǎn)品相關(guān)信息。產(chǎn)品創(chuàng)建成功后,點(diǎn)擊進(jìn)入該產(chǎn)品,左側(cè)欄點(diǎn)擊“設(shè)備列表”,點(diǎn)擊“添加設(shè)備”,填寫設(shè)備相關(guān)信息。設(shè)備創(chuàng)建成功后,點(diǎn)擊該設(shè)備對(duì)應(yīng)的“詳情”,在設(shè)備詳情頁面中點(diǎn)擊“添加APIKey”,云平臺(tái)會(huì)根據(jù)用戶輸入的表單信息生成一串加密字符串,如圖10所示,由圖可知該設(shè)備的設(shè)備ID和APIKey這兩個(gè)關(guān)鍵信息,通過設(shè)備ID和APIKey,可以唯一地識(shí)別云平臺(tái)上所創(chuàng)建的設(shè)備。接著點(diǎn)擊左側(cè)欄的“數(shù)據(jù)流模板”,添加兩個(gè)數(shù)據(jù)流,數(shù)據(jù)流名稱分別為“matterA”、“matterB”,單位名稱均為“千克”,單位符號(hào)均為“kg”。最后,點(diǎn)擊左側(cè)欄的“應(yīng)用管理”添加應(yīng)用,在應(yīng)用編輯器里完成控件與設(shè)備數(shù)據(jù)流之間的關(guān)聯(lián),完成后保存并發(fā)布該應(yīng)用。
完成云平臺(tái)的配置后,保存設(shè)備ID和APIKey對(duì)應(yīng)的值,上傳稱重?cái)?shù)據(jù)時(shí)需要使用上述兩個(gè)值,否則不能完成數(shù)據(jù)上傳操作。ESP32實(shí)現(xiàn)HTTP數(shù)據(jù)上傳需要導(dǎo)入urequest依賴包,通過HTTP的post請(qǐng)求上傳數(shù)據(jù)至云平臺(tái)的核心代碼如下:
headersData = { "api-key":"1ekLTm7pTjmInZ=7QLOgvtmfamU=" }
jsonData = {"datastreams": [{"id": "matterA","datapoints": [{"value": weight}]}]}
response = urequests.post('http://api.heclouds.com/devices/678335201/datapoints',
json =jsonData,headers = headersData)
云平臺(tái)的APIKey值賦值給字典類型變量headersData的api-key字段,設(shè)備ID的值則替換掉post方法中第一個(gè)參數(shù)url中的數(shù)字部分,字典類型jsonData中包含了數(shù)據(jù)流名稱和實(shí)際稱重?cái)?shù)據(jù),其中,“id”字段對(duì)應(yīng)的是數(shù)據(jù)流名稱,“value”字段對(duì)應(yīng)的是實(shí)際稱重?cái)?shù)據(jù),實(shí)際測(cè)得的稱重?cái)?shù)據(jù)保存在變量weight中。數(shù)據(jù)上傳成功后,ESP32將會(huì)接收到如下的響應(yīng)信息:
{
"errno": 0,
"error": "succ"
}
系統(tǒng)數(shù)據(jù)上傳測(cè)試效果如圖11所示,更改稱重傳感器上的物體重量,分別對(duì)“matterA”和“matterB”測(cè)試10次。由圖可知,所有測(cè)試均成功上傳至云平臺(tái),并無數(shù)據(jù)在上傳過程中丟失,系統(tǒng)運(yùn)行穩(wěn)定。
6 結(jié)束語
本文設(shè)計(jì)的基于ESP32的電子秤系統(tǒng),能夠檢測(cè)物體的重量,ESP32經(jīng)過換算之后的實(shí)際重量顯示在OLED屏上,并通過ESP32自動(dòng)上傳當(dāng)前稱重?cái)?shù)據(jù)至OneNet云平臺(tái),用戶可登錄OneNet云平臺(tái)查看每次稱重的重量以及時(shí)間。采用本系統(tǒng)進(jìn)行稱重,無需人工手動(dòng)記錄稱重?cái)?shù)據(jù),數(shù)據(jù)自動(dòng)上傳至云平臺(tái)存儲(chǔ)。在需要統(tǒng)計(jì)物料領(lǐng)用情況的工廠、餐廳等應(yīng)用領(lǐng)域,相關(guān)管理人員可通過查詢?cè)破脚_(tái)的數(shù)據(jù),非常便利地來了解到出庫物料的領(lǐng)用情況,具有一定的實(shí)用價(jià)值。
參考文獻(xiàn):
[1] 邱麥迪,任芳,蔣飛.基于STM32的電子稱重系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].中國儀器儀表,2020(7):73-76.
[2] 崔國強(qiáng),詹寧,羅德雨,等.基于STM32和AD7791實(shí)現(xiàn)電子秤設(shè)計(jì)[J].儀器儀表用戶,2020,27(2):5-8.
[3] 程麗霞,吳璞.家用智能電子秤設(shè)計(jì)[J].機(jī)械工業(yè)標(biāo)準(zhǔn)化與質(zhì)量,2020(10):46-48.
[4] 趙云,李振,李海楓,等.基于51單片機(jī)電子秤重量報(bào)警系統(tǒng)[J].軟件,2020,41(4):88-92.
[5] 劉嘉慧.基于STC89C52的智能無線稱重系統(tǒng)設(shè)計(jì)[J].電腦知識(shí)與技術(shù),2020,16(14):103-104.
【通聯(lián)編輯:謝媛媛】