一、前言
1.1 項(xiàng)目介紹
【1】開發(fā)背景
隨著智能家居與物聯(lián)網(wǎng)技術(shù)的迅速發(fā)展,人們對(duì)于生活品質(zhì)的追求日益提升,家庭寵物養(yǎng)護(hù)也逐漸智能化、精細(xì)化。觀賞魚作為廣受歡迎的寵物之一,其飼養(yǎng)環(huán)境的維護(hù)成為了眾多養(yǎng)魚愛好者的關(guān)注焦點(diǎn)。傳統(tǒng)的觀賞魚缸管理依賴人工監(jiān)測(cè)與調(diào)節(jié),不僅費(fèi)時(shí)費(fèi)力,還難以實(shí)現(xiàn)精準(zhǔn)控制,尤其是在快節(jié)奏的現(xiàn)代生活中,忙碌的主人常常難以及時(shí)發(fā)現(xiàn)并處理水質(zhì)惡化、水溫異常等問(wèn)題,這直接影響到魚類的健康與觀賞性。
本項(xiàng)目通過(guò)集成先進(jìn)的傳感技術(shù)和遠(yuǎn)程控制功能,為觀賞魚提供一個(gè)穩(wěn)定、健康的生態(tài)環(huán)境,同時(shí)讓養(yǎng)魚愛好者能夠便捷地監(jiān)控和管理魚缸狀態(tài)。
該項(xiàng)目的核心在于利用高性能的STM32F103RCT6微控制器作為主控單元,結(jié)合多種高精度傳感器(包括渾濁度、溫度、光敏及氨氣傳感器)實(shí)時(shí)監(jiān)測(cè)水質(zhì)、水溫和光照條件,實(shí)現(xiàn)對(duì)魚缸環(huán)境的全方位監(jiān)控。通過(guò)智能化算法判斷各項(xiàng)指標(biāo)是否處于適宜范圍,并據(jù)此自動(dòng)調(diào)整增氧泵、加熱設(shè)備及照明系統(tǒng)的運(yùn)行,保證魚缸環(huán)境的最優(yōu)化。
項(xiàng)目采用了BC26 NBIOT模塊,借助低功耗廣域網(wǎng)技術(shù),將魚缸的實(shí)時(shí)數(shù)據(jù)上傳至騰訊云IoT物聯(lián)網(wǎng)平臺(tái)。這一設(shè)計(jì)使得用戶可以通過(guò)定制的微信小程序遠(yuǎn)程監(jiān)控魚缸狀態(tài),隨時(shí)隨地查看水質(zhì)、水溫、光照強(qiáng)度等關(guān)鍵參數(shù),并根據(jù)需要遠(yuǎn)程調(diào)控設(shè)備工作模式與參數(shù)設(shè)定,如調(diào)整增氧泵的工作周期、設(shè)定水溫閾值等,真正實(shí)現(xiàn)了觀賞魚缸管理的智能化與遠(yuǎn)程化。
本項(xiàng)目的開發(fā)滿足現(xiàn)代家庭及商業(yè)場(chǎng)所對(duì)高效、智能寵物養(yǎng)護(hù)的需求,通過(guò)技術(shù)創(chuàng)新推動(dòng)寵物養(yǎng)護(hù)方式的變革,提升養(yǎng)魚體驗(yàn)。
【2】項(xiàng)目實(shí)現(xiàn)的功能
(1)水質(zhì)監(jiān)測(cè)與警示:通過(guò)搭載的水質(zhì)渾濁度傳感器,系統(tǒng)能夠?qū)崟r(shí)監(jiān)測(cè)魚缸中的水質(zhì)情況。一旦檢測(cè)到水質(zhì)渾濁度超過(guò)預(yù)設(shè)的最大安全值,系統(tǒng)將自動(dòng)觸發(fā)LED燈顯示紅色,提示用戶需要更換或凈化水質(zhì)。若水質(zhì)良好,則LED燈呈現(xiàn)綠色,給予安心指示。
(2)智能溫控系統(tǒng):集成的防水式DS18B20溫度傳感器持續(xù)監(jiān)控水溫變化。當(dāng)水溫降至預(yù)設(shè)的最低溫度限制以下時(shí),系統(tǒng)自動(dòng)激活加熱棒,維持魚缸內(nèi)水溫恒定,確保魚類生活在適宜的溫度環(huán)境中。
(3)光照自動(dòng)調(diào)節(jié):光敏傳感器BH1750監(jiān)測(cè)環(huán)境光線強(qiáng)度,當(dāng)自然光線不足,低于設(shè)定閾值時(shí),系統(tǒng)自動(dòng)開啟內(nèi)置的LED照明系統(tǒng),為魚缸內(nèi)的生物提供必要的光照,促進(jìn)其健康成長(zhǎng)并增強(qiáng)觀賞效果。
(4)氨氣監(jiān)測(cè)與環(huán)境優(yōu)化:MQ137氨氣傳感器負(fù)責(zé)監(jiān)測(cè)魚缸內(nèi)的氨氣濃度,氨氣是影響魚類健康的主要有害物質(zhì)之一。一旦檢測(cè)到氨氣超標(biāo),系統(tǒng)同樣會(huì)亮起紅色警示燈,提示用戶需要采取措施改善硝化環(huán)境,保持水質(zhì)清潔。
(5)自動(dòng)增氧功能:系統(tǒng)支持用戶通過(guò)微信小程序設(shè)定增氧泵的開啟時(shí)間間隔,確保魚缸內(nèi)氧氣充足,維持良好的水體含氧量,促進(jìn)魚類活躍度和生長(zhǎng)。
(6)遠(yuǎn)程監(jiān)控與控制:所有監(jiān)測(cè)數(shù)據(jù)(水質(zhì)、水溫、光照強(qiáng)度)通過(guò)NBIOT模塊實(shí)時(shí)傳輸至騰訊云IoT平臺(tái),用戶可通過(guò)專屬的微信小程序遠(yuǎn)程查看這些數(shù)據(jù),實(shí)時(shí)了解魚缸環(huán)境狀態(tài),并能遠(yuǎn)程調(diào)整各項(xiàng)設(shè)備的工作參數(shù),如調(diào)整水溫設(shè)定值、增氧泵工作計(jì)劃等,實(shí)現(xiàn)遠(yuǎn)程智能管理。
(7)靈活的控制模式:微信小程序提供多種控制模式,包括自動(dòng)模式、手動(dòng)模式等,用戶可根據(jù)實(shí)際情況自由切換,既可享受全自動(dòng)化管理帶來(lái)的便利,也能在需要時(shí)手動(dòng)介入調(diào)整。
【3】項(xiàng)目模塊組成
(1)主控模塊:
- 核心MCU:采用STM32F103RCT6微控制器,作為整個(gè)系統(tǒng)的控制中心,負(fù)責(zé)處理傳感器數(shù)據(jù)、執(zhí)行邏輯判斷、控制外圍設(shè)備等工作。
- 電源管理:5V 2A外部穩(wěn)壓電源為整個(gè)系統(tǒng)供電,主控板上集成電源管理模塊,確保各部分電路的穩(wěn)定供電。
(2)傳感器模塊:
- 水質(zhì)渾濁度傳感器:模擬量輸出,用于實(shí)時(shí)檢測(cè)水質(zhì)狀況。
- 防水式溫度傳感器(DS18B20):精確測(cè)量水溫,支持單總線通信協(xié)議。
- 光敏傳感器(BH1750):檢測(cè)環(huán)境光照強(qiáng)度,為自動(dòng)調(diào)節(jié)燈光提供依據(jù)。
- 氨氣傳感器(MQ137):監(jiān)測(cè)魚缸內(nèi)氨氣濃度,保障魚類健康。
(2)執(zhí)行器模塊:
- RGB LED燈:根據(jù)水質(zhì)、氨氣檢測(cè)結(jié)果改變顏色,紅綠燈直觀顯示當(dāng)前魚缸狀態(tài)。
- 繼電器控制模塊:用于控制增氧泵、加熱棒等設(shè)備的通斷電,實(shí)現(xiàn)自動(dòng)化操作。
(3)通信模塊:
- NBIOT模塊(BC26):通過(guò)NBIOT網(wǎng)絡(luò)將魚缸的實(shí)時(shí)監(jiān)測(cè)數(shù)據(jù)上傳至騰訊云IoT平臺(tái),實(shí)現(xiàn)遠(yuǎn)程數(shù)據(jù)交互。
(4)用戶交互模塊:
- 微信小程序:用戶界面層,提供遠(yuǎn)程監(jiān)控界面,展示水質(zhì)、水溫、光照等實(shí)時(shí)數(shù)據(jù),支持遠(yuǎn)程控制增氧泵開啟時(shí)間、調(diào)整水溫閾值等設(shè)置,以及控制模式的切換。
(5)云服務(wù)與數(shù)據(jù)分析模塊:
- 騰訊云IoT平臺(tái):接收并存儲(chǔ)來(lái)自魚缸的數(shù)據(jù),提供數(shù)據(jù)分析、報(bào)警通知等功能,支撐微信小程序的數(shù)據(jù)展示與指令下發(fā)。
1.2 設(shè)計(jì)思路
(1)感知層:
- 硬件傳感器:包括水質(zhì)渾濁度傳感器、DS18B20溫度傳感器、MQ137氨氣傳感器、BH1750光敏傳感器等,負(fù)責(zé)實(shí)時(shí)收集魚缸環(huán)境的物理參數(shù)。
- 數(shù)據(jù)采集:各傳感器通過(guò)模擬/數(shù)字信號(hào)輸出,由STM32F103RCT6微控制器讀取并初步處理,轉(zhuǎn)換為可處理的數(shù)據(jù)格式。
(2)控制層:
- 主控制器:STM32F103RCT6作為核心處理器,根據(jù)感知層傳來(lái)的數(shù)據(jù),執(zhí)行預(yù)設(shè)的邏輯判斷和控制算法,決定各執(zhí)行器的下一步動(dòng)作。
- 執(zhí)行器控制:通過(guò)繼電器模塊控制增氧泵、加熱棒和RGB LED燈的開關(guān),實(shí)現(xiàn)對(duì)魚缸環(huán)境的自動(dòng)調(diào)節(jié)。
(3)通信層:
- NBIOT通信:BC26模塊將控制層處理后的數(shù)據(jù)通過(guò)NBIOT網(wǎng)絡(luò)發(fā)送至云端,實(shí)現(xiàn)遠(yuǎn)程數(shù)據(jù)傳輸。
- 數(shù)據(jù)封裝與協(xié)議:數(shù)據(jù)在傳輸前經(jīng)過(guò)加密處理,并按照NBIOT通信協(xié)議封裝,確保數(shù)據(jù)的安全與高效傳輸。
(4)云服務(wù)層:
- 騰訊云IoT平臺(tái):接收并處理從魚缸設(shè)備傳來(lái)的數(shù)據(jù),提供數(shù)據(jù)存儲(chǔ)、分析、預(yù)警。
- API接口:為微信小程序提供數(shù)據(jù)接口,實(shí)現(xiàn)數(shù)據(jù)的雙向交互,即數(shù)據(jù)上傳與指令下達(dá)。
(5)應(yīng)用層:
- 微信小程序:用戶界面,展示魚缸的實(shí)時(shí)狀態(tài)信息(水質(zhì)、水溫、光強(qiáng)等),提供遠(yuǎn)程控制界面,允許用戶設(shè)置參數(shù)(如溫度閾值、增氧泵工作周期)、切換控制模式等。
- 用戶交互與反饋:用戶通過(guò)小程序與系統(tǒng)互動(dòng),系統(tǒng)根據(jù)用戶指令調(diào)整魚缸管理策略,同時(shí)向用戶推送重要通知或報(bào)警信息。
二、(硬件控制端)硬件選型
2.1 STM32開發(fā)板
鏈接:https://detail.tmall.com/item.htm?id=540109077095&skuId=4456080806080&spm=a1z0d.6639537.1997196601.4.69157484Ospeps
主控CPU采用STM32F103RCT6,這顆芯片包括48 KB SRAM、256 KB Flash、2個(gè)基本定時(shí)器、4個(gè)通用定時(shí)器、2個(gè)高級(jí)定時(shí)器、51個(gè)通用IO口、5個(gè)串口、2個(gè)DMA控制器、3個(gè)SPI、2個(gè)I2C、1個(gè)USB、1個(gè)CAN、3個(gè)12位ADC、1個(gè)12位DAC、1個(gè)SDIO接口,芯片屬于大容量類型,配置較高,整體符合硬件選型設(shè)計(jì)。當(dāng)前選擇的這款開發(fā)板自帶了一個(gè)1.4寸的TFT-LCD彩屏,可以顯示當(dāng)前傳感器數(shù)據(jù)以及一些運(yùn)行狀態(tài)信息。
2.2 PCB板
鏈接:https://detail.tmall.com/item.htm?spm=a230r.1.14.34.16b221829wBwAI&id=525489414251&ns=1&abbucket=9&skuId=3929211749440
2.3 USB下載線
鏈接:https://detail.tmall.com/item.htm?areaId=500100&cat_id=2&id=36635861113&is_b=1&rn=b29713f11d07002439272415bce5c7e1&skuId=3762719825529&spm=a220m.1000858.1000725.31.46e677b4qLTl6B&user_id=1695056989
2.4 NBIOT模塊
鏈接:https://item.taobao.com/item.htm?abbucket=3&id=583282366803&ns=1&skuId=4749833023376&spm=a21n57.1.item.3.1ed9523cnUBQwb
2.5 杜邦線(2排)
鏈接:https://detail.tmall.com/item.htm?ali_refid=a3_430582_1006:1104520036:N:MsF9mE9KLTC2IibWJh%20K1A==:0395c662ef512f1b59b31b906608d3&id=14466195609&skuId=3108214440215
2.6 穩(wěn)壓模塊
鏈接:https://item.taobao.com/item.htm?spm=a21n57.1.0.0.2921523cQeodt2&id=16606969730&ns=1&abbucket=7#detail
2.7 電源插頭
鏈接:https://item.taobao.com/item.htm?id=616513772095&price=12.5-28&sourceType=item&sourceType=item&suid=28568653-f37a-44d9-ba7f-79370acc2a9e&ut_sk=1.Y%2BSje8BXEHwDAAzffoCNOQAM_21646297_1700218130362.TaoPassword-WeiXin.ShareGlobalNavigation_1&un=6f62cf65130082c7143b731291a8a715&share_crt_v=1&un_site=0&spm=a2159r.13376460.0.0&sp_abtk=gray_ShareGlobalNavigation_1_code_simpleAndroid2&sp_tk=cTJPQVczdDRwNFI%3D&cpp=1&shareurl=true&short_name=h.5kwQOCl&bxsign=scd4p22mFtBbwnGM_SWdgwgZ27RN8IEynH4PqvQihq_j_z9InPF1g10n1NbTKmLx8KZRz6HVuBpo_O9axHjCBbsVlVvTKl9u7l4CGsrBWq6-xf26Zvx5y-ND4YT_gNAlrvG&tk=q2OAW3t4p4R&app=chrome
2.8 水溫檢測(cè)傳感器
鏈接:https://item.taobao.com/item.htm?spm=a230r.1.14.16.e600187bHLivKO&id=637832887998&ns=1&abbucket=10#detail
測(cè)溫采用DS18B20,DS18B20是常用的數(shù)字溫度傳感器,其輸出的是數(shù)字信號(hào),具有體積小,硬件開銷低,抗干擾能力強(qiáng),精度高的特點(diǎn)。
DS18B20數(shù)字溫度傳感器接線方便,封裝成后可應(yīng)用于多種場(chǎng)合,如管道式,螺紋式,磁鐵吸附式,不銹鋼封裝式,型號(hào)多種多樣,有LTM8877,LTM8874等等。
主要根據(jù)應(yīng)用場(chǎng)合的不同而改變其外觀。封裝后的DS18B20可用于電纜溝測(cè)溫,高爐水循環(huán)測(cè)溫,鍋爐測(cè)溫,機(jī)房測(cè)溫,農(nóng)業(yè)大棚測(cè)溫,潔凈室測(cè)溫,彈藥庫(kù)測(cè)溫等各種非極限溫度場(chǎng)合。耐磨耐碰,體積小,使用方便,封裝形式多樣,適用于各種狹小空間設(shè)備數(shù)字測(cè)溫和控制領(lǐng)域。
2.9 水質(zhì)檢測(cè)傳感器
鏈接:https://detail.tmall.com/item.htm?spm=a230r.1.14.59.2c30381do91idH&id=656324337911&ns=1&abbucket=14
TDS (Total Dissolved Solids)、中文名總?cè)芙夤腆w、又稱溶解性固體、又稱溶解性固體總量、表明1升水腫容有多少毫克溶解性固體、一般來(lái)說(shuō)、TDS值越高、表示水中含有溶解物越多、水就越不潔凈、雖然在特定情況下TDS并不能有效反映水質(zhì)的情況、但作為一種可快速檢測(cè)的參數(shù)、TDS目前還可以作為有效的在水質(zhì)情況反映參數(shù)來(lái)作為參考。常用的TDS檢測(cè)設(shè)備為TDS筆、雖然價(jià)格低廉、簡(jiǎn)單易用、但不能把數(shù)據(jù)傳給控制系統(tǒng)、做長(zhǎng)時(shí)間的在線監(jiān)測(cè)、并做水質(zhì)狀況分析、使用專門的儀器、雖然能傳數(shù)據(jù)、精度也高、但價(jià)格很貴、為此這款TDS傳感器模塊、即插即用、使用簡(jiǎn)單方便、測(cè)量用的激勵(lì)源采用交流信號(hào)、可有效防止探頭極化、延長(zhǎng)探頭壽命的同時(shí)、也增加了輸出信號(hào)的穩(wěn)定性、TDS探頭為防水探頭、可長(zhǎng)期侵入水中測(cè)量、該產(chǎn)品可以應(yīng)用于生活用水、水培等領(lǐng)域的水質(zhì)檢測(cè)、有了這個(gè)傳感器、可輕松DIY–套TDS檢測(cè)儀了、輕松檢測(cè)水的潔凈程度。
2.10 繼電器(3個(gè))
用來(lái)控制魚缸加熱。
鏈接:https://detail.tmall.com/item.htm?id=15909056050&ali_refid=a3_430582_1006:1104520036:N:sGzbt9RI84M4qtD4oBlF3Q==:94221238ccf10c5aeb7c31df1a993981&ali_trackid=1_94221238ccf10c5aeb7c31df1a993981&spm=a230r.1.14.1&skuId=3931798090624
2.11 增氧泵
鏈接:https://item.taobao.com/item.htm?id=613985790640&ali_refid=a3_430582_1006:1226360064:N:2BeiTZ6q9YYxgXM%2BVERvrA%2FFUJg%2FXa1Y:1cfd93a70ad4f25752bf8ced2f95c95f&ali_trackid=1_1cfd93a70ad4f25752bf8ced2f95c95f&spm=a230r.1.14.1#detail
2.12 魚缸加熱棒
鏈接:https://item.taobao.com/item.htm?spm=a230r.1.14.45.2bc91fca135EYb&id=645146758133&ns=1&abbucket=10#detail
2.13 多色燈
鏈接:https://item.taobao.com/item.htm?spm=a230r.1.14.16.3711441eUUO7Vh&id=612186142933&ns=1&abbucket=10#detail
2.14 BH1750光敏傳感器
鏈接:https://detail.tmall.com/item.htm?abbucket=3&id=543135220776&ns=1&spm=a230r.1.14.16.d7597d40XRn0Ec
2.15 MQ135空氣質(zhì)量傳感器
鏈接:https://detail.tmall.com/item.htm?abbucket=5&id=17949567819&ns=1&skuId=4078848750998&spm=a21n57.1.0.0.242b523cwrRqcB
三、騰訊云平臺(tái)與微信小程序設(shè)計(jì)
3.1 登錄云平臺(tái)
地址:https://cloud.tencent.com/
【1】選擇物聯(lián)網(wǎng)平臺(tái)
微信掃描即可快速登錄,然后選擇產(chǎn)品,物聯(lián)網(wǎng),選擇物聯(lián)網(wǎng)開發(fā)平臺(tái)。
【2】進(jìn)入產(chǎn)品控制臺(tái)
鏈接: https://console.cloud.tencent.com/iotexplorer
第一次進(jìn)去需要實(shí)名認(rèn)證,認(rèn)證成功就可以進(jìn)去了。
3.2 新建項(xiàng)目
【1】新建項(xiàng)目
【2】填寫項(xiàng)目名稱
【3】項(xiàng)目創(chuàng)建完成
3.3 產(chǎn)品開發(fā)
【1】進(jìn)入產(chǎn)品頁(yè)
點(diǎn)擊項(xiàng)目名稱,進(jìn)入產(chǎn)品開發(fā)頁(yè)面。
【2】新建產(chǎn)品
【3】填寫產(chǎn)品信息
產(chǎn)品品類選擇自定義產(chǎn)品品類
。
【4】產(chǎn)品創(chuàng)建完成
3.4 設(shè)備開發(fā)
【1】進(jìn)入設(shè)備配置頁(yè)
點(diǎn)擊產(chǎn)品名稱,進(jìn)入設(shè)備配置頁(yè)面。
【2】配置物模型
選擇自定義品類。
上傳騰訊云-微信小程序通信數(shù)據(jù)的屬性值:
ds18b20_max 溫度閥值 讀寫權(quán)限 整型
adc_hp_max 水質(zhì)閥值 讀寫權(quán)限 整型
time_food 增氧間隔 讀寫權(quán)限 整型
auto_mode 控制模式 讀寫權(quán)限 布爾類型
water_hp 水質(zhì) 只讀權(quán)限 整型
temp_data 水溫 只讀權(quán)限 浮點(diǎn)數(shù)類型
BH1750 光強(qiáng) 只讀權(quán)限 整型
MQ135 氨氣 只讀權(quán)限 整型
oxygen_sw 增氧控制 讀寫權(quán)限 布爾類型
heat_sw 加熱控制 讀寫權(quán)限 布爾類型
led_sw 照明燈控制 讀寫權(quán)限 布爾類型
(1)進(jìn)行添加
下面就繼續(xù)添加(按照),前面的流程。
(2)添加完成
然后翻到最下面,點(diǎn)擊下一步。
【3】設(shè)備開發(fā)-主題列表
設(shè)備開發(fā)頁(yè)面有一個(gè)主題列表??梢粤私獾疆?dāng)前的主題信息。
當(dāng)前項(xiàng)目需要用到的就是下面的兩個(gè)主題。
$thing/up/property/2ZYN8YF7CM/${deviceName} 發(fā)布 屬性上報(bào)
$thing/up/property/2ZYN8YF7CM/${deviceName} 訂閱 屬性下發(fā)與屬性上報(bào)響應(yīng)
這個(gè)頁(yè)面不需要做什么,直接點(diǎn)擊下一步即可。
【4】交互開發(fā)-配置小程序
(1)產(chǎn)品展示頁(yè)
設(shè)置信息: 根據(jù)自己設(shè)備情況自己設(shè)置即可。
(2)快捷入口配置
根據(jù)需要配置。
(3)編輯面板
根據(jù)自己的樣式進(jìn)行調(diào)整。
可以根據(jù)自己喜歡的圖標(biāo)進(jìn)行設(shè)置。
(4)產(chǎn)品頁(yè)面
【5】設(shè)備調(diào)試-新建設(shè)備
創(chuàng)建完成。
設(shè)備的二維碼: (打開微信小程序,搜索 騰訊連連
,打開騰訊連連,掃描下面的二維碼就可以綁定設(shè)備了—這個(gè)是有有效時(shí)間范圍的,過(guò)期了需要登錄重新獲取二維碼)
設(shè)備信息:
產(chǎn)品密匙:WCk1aGDvGyg34+KolnKMqw==
產(chǎn)品ID:2ZYN8YF7CM
下面也有MQTT三元組的信息。
【6】配置手機(jī)APP
如果除了小程序之外,還想使用手機(jī)APP,可以配置手機(jī)APP頁(yè)面。
配置步驟和上面的微信程序一樣。
3.5 設(shè)備登錄
【1】MQTT協(xié)議
MQTT協(xié)議介紹:https://mcxiaoke.gitbooks.io/mqtt-cn/content/mqtt/01-Introduction.html
目前物聯(lián)網(wǎng)通信支持 MQTT 標(biāo)準(zhǔn)協(xié)議接入(兼容3.1.1版本協(xié)議),具體的協(xié)議請(qǐng)參見 MQTT 3.1.1 協(xié)議文檔。
和標(biāo)準(zhǔn) MQTT 區(qū)別
1. 支持 MQTT 的 PUB、SUB、PING、PONG、CONNECT、DISCONNECT、UNSUB 等報(bào)文。
2. 支持 cleanSession。
3. 不支持 will、retain msg。
4. 不支持 QOS2。
【2】獲取MQTT登錄參數(shù)
就像我們登錄QQ、登錄微信需要賬號(hào)密碼一樣,設(shè)備登錄物聯(lián)網(wǎng)平臺(tái)也需要類似的東西。
官方文檔地址: https://cloud.tencent.com/document/product/634/32546
生成密匙直接使用python代碼獲取:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import base64
import hashlib
import hmac
import random
import string
import time
import sys
# 生成指定長(zhǎng)度的隨機(jī)字符串
def RandomConnid(length):
return ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(length))
# 生成接入物聯(lián)網(wǎng)通信平臺(tái)需要的各參數(shù)
def IotHmac(productID, devicename, devicePsk):
# 1. 生成 connid 為一個(gè)隨機(jī)字符串,方便后臺(tái)定位問(wèn)題
connid = RandomConnid(5)
# 2. 生成過(guò)期時(shí)間,表示簽名的過(guò)期時(shí)間,從紀(jì)元1970年1月1日 00:00:00 UTC 時(shí)間至今秒數(shù)的 UTF8 字符串
# 將當(dāng)前時(shí)間往后推遲5年
expiry = int(time.time()) + 5 * 365 * 24 * 60 * 60
# 3. 生成 MQTT 的 clientid 部分, 格式為 ${productid}${devicename}
clientid = "{}{}".format(productID, devicename)
# 4. 生成 MQTT 的 username 部分, 格式為 ${clientid};${sdkappid};${connid};${expiry}
username = "{};12010126;{};{}".format(clientid, connid, expiry)
# 5. 對(duì) username 進(jìn)行簽名,生成token
secret_key = devicePsk.encode('utf-8') # convert to bytes
data_to_sign = username.encode('utf-8') # convert to bytes
secret_key = base64.b64decode(secret_key) # this is still bytes
token = hmac.new(secret_key, data_to_sign, digestmod=hashlib.sha256).hexdigest()
# 6. 根據(jù)物聯(lián)網(wǎng)通信平臺(tái)規(guī)則生成 password 字段
password = "{};{}".format(token, "hmacsha256")
return {
"clientid" : clientid,
"username" : username,
"password" : password
}
if __name__ == '__main__':
# 參數(shù)分別填入: 產(chǎn)品ID,設(shè)備名稱,設(shè)備密匙
print(IotHmac("2ZYN8YF7CM","dev1","WCk1aGDvGyg34+KolnKMqw=="))
上面python的代碼需要填入的參數(shù)從下面截圖里獲?。?/strong>
運(yùn)行得到的結(jié)果:
安裝Python,設(shè)置好環(huán)境變量,打開控制臺(tái)終端,在命令行上運(yùn)行代碼:python get_pass.py
得到一下結(jié)果。
{'clientid': '2ZYN8YF7CMdev1', 'username': '2ZYN8YF7CMdev1;12010126;HULWJ;1705853339', 'password': '26725d9cf937e3d054cc51fa91338d81ddebc072ae1fa65c564a068d8bb3e0c7;hmacsha256'}
總結(jié):
clientid: 2ZYN8YF7CMdev1
username: 2ZYN8YF7CMdev1;12010126;HULWJ;1705853339
password: 26725d9cf937e3d054cc51fa91338d81ddebc072ae1fa65c564a068d8bb3e0c7;hmacsha256
【3】MQTT主題訂閱與發(fā)布
如果設(shè)備端想要得到APP頁(yè)面的按鈕狀態(tài)就需要訂閱屬性下發(fā)和屬性上報(bào)的響應(yīng),主題格式就是這樣的:
主題訂閱:
$thing/up/property/2ZYN8YF7CM/dev1
主題發(fā)布:
$thing/down/property/2ZYN8YF7CM/dev1
設(shè)備端向APP頁(yè)面上報(bào)屬性時(shí),需要上傳具體的數(shù)據(jù),數(shù)據(jù)流的格式如下:
官方文檔: https://cloud.tencent.com/document/product/1081/34916
上傳的格式就是自己創(chuàng)建產(chǎn)品時(shí),添加的功能屬性。
按下面的JSON格式進(jìn)行組合:
{"method":"report","clientToken":"123","params":{"ds18b20_max":20,"adc_hp_max":20,"time_food":5,"auto_mode":1,"water_hp":80,"temp_data":12.5,"BH1750":300,"MQ135":20,"oxygen_sw":1,"heat_sw":0,"led_sw":0}}
【4】物聯(lián)網(wǎng)平臺(tái)端口號(hào)與IP
官方文檔: https://cloud.tencent.com/document/product/634/32546
域名格式:<產(chǎn)品ID>.iotcloud.tencentdevices.com
2ZYN8YF7CM.iotcloud.tencentdevices.com
**得到域名對(duì)應(yīng)的IP地址: ** 175.178.30.200
【5】模擬設(shè)備登錄
為了方便測(cè)試,先使用MQTT客戶端軟件模擬硬件設(shè)備登錄服務(wù)器。
IP地址:175.178.30.200
端口號(hào):1883
客戶端ID: 2ZYN8YF7CMdev1
用戶名: 2ZYN8YF7CMdev1;12010126;HULWJ;1705853339
密碼: 26725d9cf937e3d054cc51fa91338d81ddebc072ae1fa65c564a068d8bb3e0c7;hmacsha256
訂閱主題: $thing/down/property/2ZYN8YF7CM/dev1
發(fā)布主題: $thing/up/property/2ZYN8YF7CM/dev1
發(fā)布數(shù)據(jù)格式:
{"method":"report","clientToken":"123","params":{"ds18b20_max":20,"adc_hp_max":20,"time_food":5,"auto_mode":1,"water_hp":80,"temp_data":12.5,"BH1750":300,"MQ135":20,"oxygen_sw":1,"heat_sw":0,"led_sw":0}}
依次填入?yún)?shù)之后,點(diǎn)擊訂閱主題、發(fā)布主題。
發(fā)布主題之后,會(huì)收到服務(wù)器下發(fā)的回應(yīng)消息,表示消息已經(jīng)上傳成功。
在設(shè)備調(diào)試頁(yè)面,可以看到設(shè)備已經(jīng)在線了:
打開設(shè)備頁(yè)面,就能看到設(shè)備上傳的數(shù)據(jù):
還能看歷史數(shù)據(jù): 可以看最近3天的數(shù)據(jù)。
【6】騰訊連連微信小程序
打開騰訊連連微信
小程序綁定設(shè)備,就可以看到設(shè)備的數(shù)據(jù)了。
步驟如下:
打開微信,找到小程序。
右上角搜索,騰訊連接。
然后打開騰訊連連,添加設(shè)備,掃描設(shè)備的二維碼。
打開設(shè)備二維碼頁(yè)面。
添加成功。 點(diǎn)擊左下角關(guān)注公眾號(hào),可以第一時(shí)間收到設(shè)備的動(dòng)態(tài)消息。
到此,騰訊物聯(lián)網(wǎng)云平臺(tái)部署完成。
【7】下發(fā)的數(shù)據(jù)
點(diǎn)擊微信小程序里面的按鈕可以看到設(shè)備端收到對(duì)應(yīng)的控制信息。
len:129,Data:$$thing/down/property/2ZYN8YF7CM/dev1{"method":"control","clientToken":"v2530389322mbXir::5NMCGSjgp","params":{"ds18b20_max":21}}
len:125,Data:$thing/down/property/2ZYN8YF7CM/dev1{"method":"control","clientToken":"v2530388538MKtZG::67Y#YRmFN","params":{"time_food":6}}
len:128,Data:$$thing/down/property/2ZYN8YF7CM/dev1{"method":"control","clientToken":"v2530389322sDtoc::EnQpzyukd","params":{"adc_hp_max":22}}
len:125,Data:$thing/down/property/2ZYN8YF7CM/dev1{"method":"control","clientToken":"v2530388538PaAHn::@KgWjdE1V","params":{"auto_mode":0}}
len:125,Data:$thing/down/property/2ZYN8YF7CM/dev1{"method":"control","clientToken":"v2530388538XYQqA::WsGV4K0uo","params":{"auto_mode":1}}
len:127,Data:$$thing/down/property/2ZYN8YF7CM/dev1{"method":"control","clientToken":"v2529763559fdKIy::addUie4XDm","params":{"oxygen_sw":0}}
len:125,Data:$thing/down/property/2ZYN8YF7CM/dev1{"method":"control","clientToken":"v2529763559OmPZY::vkCb-o5o%","params":{"oxygen_sw":1}}
len:124,Data:$thing/down/property/2ZYN8YF7CM/dev1{"method":"control","clientToken":"v2529763559GCZHF::o3Zg6m9sEq","params":{"heat_sw":1}}
len:123,Data:$thing/down/property/2ZYN8YF7CM/dev1{"method":"control","clientToken":"v2530389322DuDjB::CgY5$Gx8Z","params":{"heat_sw":0}}
len:123,Data:$thing/down/property/2ZYN8YF7CM/dev1{"method":"control","clientToken":"v2529763559opcLp::MdJWtA8ai7","params":{"led_sw":1}}
len:122,Data:$thing/down/property/2ZYN8YF7CM/dev1{"method":"control","clientToken":"v2530389322SZvJM::GYX7QT$T#","params":{"led_sw":0}}
四、STM32設(shè)備端代碼設(shè)計(jì)
4.1 硬件接線
硬件連接方式:
【1】 TFT 1.44 寸彩屏接線
GND 電源地
VCC 接5V或3.3v電源
SCL 接PC8(SCL)
SDA 接PC9(SDA)
RST 接PC10
DC 接PB7
CS 接PB8
BL 接PB11
【2】BC26-NBIOT模塊
PA2(TX)--RXD 模塊接收腳
PA3(RX)--TXD 模塊發(fā)送腳
GND---GND 地
VCC---VCC 電源(5.0V)
【3】DS18B20溫度傳感器
VCC--VCC
GND---GND
DAT---PB3
【4】魚缸加熱棒--繼電器控制
GND----GND
VCC---3.3V
OUT---PB4
【5】增氧泵--繼電器控制
GND----GND
VCC---3.3V
OUT---PC11
【6】水質(zhì)傳感器(ADC通道1)
VCC--->5V
GND--->GND
DAT--->PA1
【7】氨氣采集傳感器(ADC通道4)
VCC--->5V
GND--->GND
DAT--->PA4
【8】板載LED燈接線
LED1---PA8
LED2---PD2 (被串口占用)
【9】板載按鍵接線
K0---PA0
K1---PC5
K2---PA15
【10】LED指示燈
LED1--PA5 紅色燈--表示報(bào)警異常
LED2--PA6 綠色燈--表示系統(tǒng)正常
LED3--PA7 白色燈--照明
【11】環(huán)境光檢測(cè)檢測(cè):BH1750數(shù)字傳感器
SDA-----PB5
SCL-----PB6
GND---GND 地
VCC---VCC 電源(3.3V~5.0V)
4.2 串口配置代碼
#include "hal_uart.h"
#include "stm32f0xx_usart.h"
//接收串口數(shù)據(jù)的回調(diào)函數(shù)
static void (*halUartOnIRQ)(unsigned char byte) = 0;
static void halUartGpioInit(void);
static void halUartParamInit(unsigned long baudrate);
static void halUartIRQInit(void);
/*
* 串口通信初始化
*
* @param baudrate - 串口通信波特率
*/
void halUartInit(unsigned long baudrate)
{
halUartGpioInit();
halUartParamInit(baudrate);
halUartIRQInit();
}
/*
* 注冊(cè)接收串口數(shù)據(jù)的回調(diào)函數(shù)
*
* @param onIRQ - 回調(diào)函數(shù),接收到串口數(shù)據(jù)時(shí)自動(dòng)調(diào)用此函數(shù)
*/
void halUartSetIRQCallback(void (*onIRQ)(unsigned char byte))
{
halUartOnIRQ = onIRQ;
}
/*
* 向串口發(fā)送信息
*
* @param buf - 待發(fā)送的信息的存儲(chǔ)地址
* @param len - 待發(fā)送的信息的數(shù)據(jù)長(zhǎng)度
*/
void halUartWrite(const unsigned char *buf, unsigned int len)
{
for (unsigned int i = 0; i < len; i++) {
USART_SendData(USART1, buf[i]);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
}
}
/*
* 初始化串口通信相關(guān)的GPIO
*/
void halUartGpioInit()
{
//配置結(jié)構(gòu)體
GPIO_InitTypeDef uart1Tx;
GPIO_InitTypeDef uart1Rx;
/* TX */
uart1Tx.GPIO_Pin = GPIO_Pin_9,//PA9作為TX
uart1Tx.GPIO_Speed = GPIO_Speed_10MHz,//通信頻率
uart1Tx.GPIO_Mode = GPIO_Mode_AF,
uart1Tx.GPIO_PuPd = GPIO_PuPd_NOPULL,
/* RX */
uart1Rx.GPIO_Pin = GPIO_Pin_10,//PA10作為RX
uart1Rx.GPIO_Speed = GPIO_Speed_10MHz,//通信頻率
uart1Rx.GPIO_Mode = GPIO_Mode_AF,
uart1Rx.GPIO_PuPd = GPIO_PuPd_NOPULL,
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_1);
GPIO_Init(GPIOA, &uart1Tx);
GPIO_Init(GPIOA, &uart1Rx);
}
/*
* 初始化串口通信配置
* @param baudrate - 串口通信波特率
*/
void halUartParamInit(unsigned long baudrate)
{
USART_InitTypeDef uartConfig;
uartConfig.USART_BaudRate = baudrate;
uartConfig.USART_WordLength = USART_WordLength_8b;
uartConfig.USART_Parity = USART_Parity_No;
uartConfig.USART_StopBits = USART_StopBits_1;
uartConfig.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
uartConfig.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
USART_Init(USART1, &uartConfig);
USART_Cmd(USART1, ENABLE);
}
/*
* 初始化串口通信的中斷請(qǐng)求
*/
void halUartIRQInit()
{
NVIC_InitTypeDef uartNVIC;
uartNVIC.NVIC_IRQChannel = USART1_IRQn;
uartNVIC.NVIC_IRQChannelPriority = 0;
uartNVIC.NVIC_IRQChannelCmd = ENABLE;
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
USART_ITConfig(USART1, USART_IT_TC, ENABLE);
NVIC_Init(&uartNVIC);
}
/*
* 串口通信中斷處理函數(shù)。當(dāng)串口接收到數(shù)據(jù)時(shí),便會(huì)自動(dòng)產(chǎn)生中斷并執(zhí)行此函數(shù)
*/
void USART1_IRQHandler(void)
{
unsigned char byte = 0;
if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) {
byte = USART_ReceiveData(USART1); // Auto to clear RXNE flag when read!
if (halUartOnIRQ != 0) halUartOnIRQ(byte);
}
else USART_ClearFlag(USART1,USART_FLAG_TC);
}
4.3 adc采集配置代碼
#include "hal_adc.h"
#include "stm32f0xx_adc.h"
/*
* ADC初始化
*/
void halAdcInit()
{
GPIO_InitTypeDef gpioCfg;
ADC_InitTypeDef adcCfg;
/* PA0 */
gpioCfg.GPIO_Pin = GPIO_Pin_1;
gpioCfg.GPIO_Mode = GPIO_Mode_AN;
gpioCfg.GPIO_PuPd = GPIO_PuPd_NOPULL;
ADC_StructInit(&adcCfg);
adcCfg.ADC_Resolution = ADC_Resolution_8b;
adcCfg.ADC_ContinuousConvMode = DISABLE;
adcCfg.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
adcCfg.ADC_DataAlign = ADC_DataAlign_Right;
adcCfg.ADC_ScanDirection = ADC_ScanDirection_Backward;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
RCC_ADCCLKConfig(RCC_ADCCLK_PCLK_Div4);
ADC_DeInit(ADC1);
GPIO_Init(GPIOA, &gpioCfg);
ADC_Init(ADC1, &adcCfg);
/* Convert the ADC1 Vref with 55.5 Cycles as sampling time */
ADC_ChannelConfig(ADC1, ADC_Channel_1, ADC_SampleTime_55_5Cycles);
ADC_GetCalibrationFactor(ADC1);
ADC_DMACmd(ADC1, ENABLE);
ADC_Cmd(ADC1, ENABLE);
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADEN));
ADC_StartOfConversion(ADC1);
}
/*
*讀取ADC值
*
*@return ADC值
*/
unsigned int halAdcRead()
{
ADC_StartOfConversion(ADC1);
while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC) == RESET);
return ADC_GetConversionValue(ADC1);
}
4.4 LCD顯示屏配置代碼
#include "hal_oled12864.h"
#include "font_v_8x16.h"
#include "hal_lcd_spi.h"
#include "hal_system.h"
#include "stm32f0xx_gpio.h"
typedef unsigned char uint8;
typedef unsigned short uint16;
static void halOLED12864Reset(void);
static void halOLED12864ChipInit(void);
static void halOLED12864SetPosition(uint8 page, uint8 x);
static void halOLEDShowChar8x16(uint16 x, uint16 page, uint8 ch);
void halOLED12864Init(void)
{
/* Init SPI-GPIO */
halLcdSpiInit();
/* Init Chip */
halOLED12864ChipInit();
/* Setting */
halOLED12864ClearScreen();
halOLED12864SetPosition(0,0);
}
void halOLED12864ClearScreen(void)
{
uint8 page, x;
for (page = 0; page < HAL_OLED12864_PAGE; page++) {
halLcdSpiTxCmd(0xb0 + page);
halLcdSpiTxCmd(0x01);
halLcdSpiTxCmd(0x10);
for (x = 0; x < HAL_OLED12864_X; x++) halLcdSpiTxData(0);
}
}
void halOLED12864ShowX16(uint8 line, uint8 column, const uint8 *str)
{
if (!str || line > 3) return;
uint8 page = line * 2; // 2 page per line
const uint8 *ptext = str; // text
/* Show text */
while(*ptext != 0) {
/* ASCII Code: 0~127 */
if((*ptext) < 128) {
/* End of line */
if((column + 8) > HAL_OLED12864_X) return;
/* Show 8x16 ASCII Char. */
halOLEDShowChar8x16(column, page, *ptext);
column += 8;
ptext++;
}
} /* while(*ptext != 0) */
}
static void halOLED12864Reset(void)
{
#ifdef STM32F030x8
/* RST: PA12 */
GPIO_InitTypeDef lcdGPIO;
lcdGPIO.GPIO_Mode = GPIO_Mode_OUT;
lcdGPIO.GPIO_Speed = GPIO_Speed_2MHz;
lcdGPIO.GPIO_Pin = GPIO_Pin_12;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
GPIO_Init(GPIOA, &lcdGPIO);
/* Reset OLED12864 */
GPIO_ResetBits(GPIOA, GPIO_Pin_12);
halSystemDelayUs(60000);
GPIO_SetBits(GPIOA, GPIO_Pin_12);
#else
/* RST: PA3 */
GPIO_InitTypeDef lcdGPIO;
lcdGPIO.GPIO_Mode = GPIO_Mode_OUT;
lcdGPIO.GPIO_Speed = GPIO_Speed_2MHz;
lcdGPIO.GPIO_Pin = GPIO_Pin_3;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
GPIO_Init(GPIOA, &lcdGPIO);
/* Reset OLED12864 */
GPIO_ResetBits(GPIOA, GPIO_Pin_3);
halSystemDelayUs(60000);
GPIO_SetBits(GPIOA, GPIO_Pin_3);
#endif
}
static void halOLED12864ChipInit(void)
{
halOLED12864Reset();
halLcdSpiTxCmd(0xae); // --turn off oled panel
halLcdSpiTxCmd(0x00); // ---set low column address
halLcdSpiTxCmd(0x10); // ---set high column address
halLcdSpiTxCmd(0x40); // --set start line address Set Mapping
// RAM Display Start Line (0x00~0x3F)
halLcdSpiTxCmd(0x81); // --set contrast control register
halLcdSpiTxCmd(0xcf); // --Set SEG Output Current Brightness
halLcdSpiTxCmd(0xa1); // --Set SEG/Column Mapping
halLcdSpiTxCmd(0xc8); // --Set COM/Row Scan Direction
halLcdSpiTxCmd(0xa6); // --set normal display
halLcdSpiTxCmd(0xa8); // --set multiplex ratio(1 to 64)
halLcdSpiTxCmd(0x3f); // --1/64 duty
halLcdSpiTxCmd(0xd3); // --set display offset Shift Mapping RAM
// Counter(0x00~0x3F)
halLcdSpiTxCmd(0x00); // --not offset
halLcdSpiTxCmd(0xd5); // --set display clock divide
// ratio/oscillator oscillator frequency
halLcdSpiTxCmd(0x80); // --set divide ratio, Set Clock as 100
// Frames/Sec
halLcdSpiTxCmd(0xd9); // --set pre-charge period
halLcdSpiTxCmd(0xf1); // --Set Pre-Charge as 15 Clocks & Discharge
// as 1 Clock
halLcdSpiTxCmd(0xda); // --set com pins hardware configuration
halLcdSpiTxCmd(0x12);
halLcdSpiTxCmd(0xdb); // --set vcomh
halLcdSpiTxCmd(0x40); // --Set VCOM Deselect Level
halLcdSpiTxCmd(0x20); // --Set Page Addressing Mode (0x00/0x01/0x02)
halLcdSpiTxCmd(0x02); //
halLcdSpiTxCmd(0x8d); // --set Charge Pump enable/disable
halLcdSpiTxCmd(0x14); // --set(0x10) disable
halLcdSpiTxCmd(0xa4); // --Disable Entire Display On (0xa4/0xa5)
halLcdSpiTxCmd(0xa6); // --Disable Inverse Display On (0xa6/a7)
halLcdSpiTxCmd(0xaf); // --turn on oled panel
}
static void halOLED12864SetPosition(uint8 page, uint8 x)
{
halLcdSpiTxCmd( 0xb0 + page );
halLcdSpiTxCmd( ((x&0xf0)>>4)|0x10 );
halLcdSpiTxCmd( (x&0x0f)|0x01 );
}
static void halOLEDShowChar8x16(uint16 x, uint16 page, uint8 ch)
{
uint16 charIndex;
/* index of font table, height: 16 */
if(ch > 32) charIndex = (ch - 32) * 16;
else charIndex = 0;
/* Set first page */
halOLED12864SetPosition(page, x);
for (uint8 j = 0; j < 8; j++) halLcdSpiTxData( FONT_TABLE_8x16[charIndex + j] );
/* Set second page */
halOLED12864SetPosition(page + 1, x);
for (uint8 j = 0; j < 8; j++) halLcdSpiTxData( FONT_TABLE_8x16[charIndex + j + 8] );
}
五、 BC26-NBIOT模塊調(diào)試過(guò)程
5.1 模塊調(diào)試接線
5.2 測(cè)試模塊
第一步接上之后,串口調(diào)試助手選擇波特率為115200,勾選軟件上的發(fā)送新行選項(xiàng)。發(fā)送AT
過(guò)去,正常模塊會(huì)返回OK
。
只有收到了OK,才表示模塊工作正常。
5.3 上電初始化操作
【1】查詢模塊是否正常
AT
OK
【2】獲取卡號(hào),查詢卡是否插好
AT+CIMI
460041052911195
OK
【3】激活網(wǎng)絡(luò)
AT+CGATT=1
OK
【4】獲取網(wǎng)絡(luò)激活狀態(tài)
AT+CGATT?
+CGATT: 1
OK
【5】查詢網(wǎng)絡(luò)質(zhì)量
AT+CSQ
+CSQ: 26,0
OK
【6】 檢查網(wǎng)絡(luò)狀態(tài)
AT+CEREG=? //
+CEREG: 0,1 //找網(wǎng)成功
OK
5.4 開啟GPS定位
如果需要使用GPS定位就開,不需要使用就不用管。
使用GPS定位還需要將模塊上的GPS天線接好,否則也是沒有信號(hào)的。
官方文檔:
【1】激活GPS,要等一段時(shí)間
AT+QGNSSC=1
OK
【2】查詢激活狀態(tài),1表示成功激活
AT+QGNSSC?
+QGNSSC: 1
OK
【3】獲取一次GPS定位語(yǔ)句
AT+QGNSSRD="NMEA/RMC"
+QGNSSRD: $GNRMC,120715.00,A,3150.78179,N,11711.93433,E,0.000,,310818,,,A,V*19
OK
5.5 連接MQTT服務(wù)器
下面通過(guò)BC26模塊的AT指令連接MQTT服務(wù)器(OneNet),上傳數(shù)據(jù)測(cè)試。
官方文檔: