• 方案介紹
    • 一、前言
    • 二、(硬件控制端)硬件選型
    • 三、騰訊云平臺(tái)與微信小程序設(shè)計(jì)
    • 四、STM32設(shè)備端代碼設(shè)計(jì)
    • 五、 BC26-NBIOT模塊調(diào)試過(guò)程
  • 附件下載
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

基于STM32+NBIOT(BC26)設(shè)計(jì)的物聯(lián)網(wǎng)觀賞魚缸

06/04 10:03
248
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

更多詳細(xì)資料請(qǐng)聯(lián)系.docx

共1個(gè)文件

一、前言

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)。

image-20240521101348261

【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)信息。

image-20231218224355718

2.2 PCB板

鏈接:https://detail.tmall.com/item.htm?spm=a230r.1.14.34.16b221829wBwAI&id=525489414251&ns=1&abbucket=9&skuId=3929211749440

image-20221031234443667

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

image-20221208211912983

2.4 NBIOT模塊

鏈接:https://item.taobao.com/item.htm?abbucket=3&id=583282366803&ns=1&skuId=4749833023376&spm=a21n57.1.item.3.1ed9523cnUBQwb

image-20240428165331614

img

2.5 杜邦線(2排)

鏈接:https://detail.tmall.com/item.htm?ali_refid=a3_430582_1006:1104520036:N:MsF9mE9KLTC2IibWJh%20K1A==:0395c662ef512f1b59b31b906608d3&id=14466195609&skuId=3108214440215

image-20230107110348541

2.6 穩(wěn)壓模塊

鏈接:https://item.taobao.com/item.htm?spm=a21n57.1.0.0.2921523cQeodt2&id=16606969730&ns=1&abbucket=7#detail

image-20230919222637274

img

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

image-20231212111308716

2.8 水溫檢測(cè)傳感器

鏈接:https://item.taobao.com/item.htm?spm=a230r.1.14.16.e600187bHLivKO&id=637832887998&ns=1&abbucket=10#detail

image-20221107102546627

測(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è)水的潔凈程度。
image-20221123212810015

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

image-20221107101209118

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

image-20221107101816441

2.12 魚缸加熱棒

鏈接:https://item.taobao.com/item.htm?spm=a230r.1.14.45.2bc91fca135EYb&id=645146758133&ns=1&abbucket=10#detail

image-20221107101047370

2.13 多色燈

鏈接:https://item.taobao.com/item.htm?spm=a230r.1.14.16.3711441eUUO7Vh&id=612186142933&ns=1&abbucket=10#detail

image-20221107102358154

2.14 BH1750光敏傳感器

鏈接:https://detail.tmall.com/item.htm?abbucket=3&id=543135220776&ns=1&spm=a230r.1.14.16.d7597d40XRn0Ec

image-20230207211644477

2.15 MQ135空氣質(zhì)量傳感器

鏈接:https://detail.tmall.com/item.htm?abbucket=5&id=17949567819&ns=1&skuId=4078848750998&spm=a21n57.1.0.0.242b523cwrRqcB

image-20231218225009708

三、騰訊云平臺(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)。

image-20230214150512203

【2】進(jìn)入產(chǎn)品控制臺(tái)

鏈接: https://console.cloud.tencent.com/iotexplorer

image-20230214150829922

第一次進(jìn)去需要實(shí)名認(rèn)證,認(rèn)證成功就可以進(jìn)去了。

image-20231024164826227

image-20231024164844627

3.2 新建項(xiàng)目

【1】新建項(xiàng)目

image-20230214152509611

【2】填寫項(xiàng)目名稱

image-20231222232535192

【3】項(xiàng)目創(chuàng)建完成

image-20231222232555829

3.3 產(chǎn)品開發(fā)

【1】進(jìn)入產(chǎn)品頁(yè)

點(diǎn)擊項(xiàng)目名稱,進(jìn)入產(chǎn)品開發(fā)頁(yè)面。

image-20231222232657885

【2】新建產(chǎn)品

image-20231219103226612

【3】填寫產(chǎn)品信息

產(chǎn)品品類選擇自定義產(chǎn)品品類。

image-20231222232808704

【4】產(chǎn)品創(chuàng)建完成

image-20231222232831924

3.4 設(shè)備開發(fā)

【1】進(jìn)入設(shè)備配置頁(yè)

點(diǎn)擊產(chǎn)品名稱,進(jìn)入設(shè)備配置頁(yè)面。

image-20231222232848051

【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)行添加

image-20231222233237457

image-20231222233327126

image-20231222233547005

下面就繼續(xù)添加(按照),前面的流程。

(2)添加完成

image-20231222234737021

image-20231222234749514

image-20231222234803389

然后翻到最下面,點(diǎn)擊下一步。

image-20231222234818759

【3】設(shè)備開發(fā)-主題列表

設(shè)備開發(fā)頁(yè)面有一個(gè)主題列表??梢粤私獾疆?dāng)前的主題信息。

image-20231222234852132

當(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)擊下一步即可。

image-20231222234921631

【4】交互開發(fā)-配置小程序

(1)產(chǎn)品展示頁(yè)

image-20231222234943117

設(shè)置信息: 根據(jù)自己設(shè)備情況自己設(shè)置即可。

image-20231222235127709

(2)快捷入口配置

image-20231024184553567

根據(jù)需要配置。

image-20231222235237751

(3)編輯面板

image-20231024184712592

根據(jù)自己的樣式進(jìn)行調(diào)整。

image-20231222235659081

可以根據(jù)自己喜歡的圖標(biāo)進(jìn)行設(shè)置。

image-20231223000234395

(4)產(chǎn)品頁(yè)面

image-20230510140431631

image-20231223000330804

【5】設(shè)備調(diào)試-新建設(shè)備

image-20231223000404624

image-20231223000419492

創(chuàng)建完成。

image-20231223000437655

設(shè)備的二維碼: (打開微信小程序,搜索 騰訊連連,打開騰訊連連,掃描下面的二維碼就可以綁定設(shè)備了—這個(gè)是有有效時(shí)間范圍的,過(guò)期了需要登錄重新獲取二維碼)

image-20231223000502783

image-20231223000516247

設(shè)備信息:

image-20231223000606740

產(chǎn)品密匙:WCk1aGDvGyg34+KolnKMqw==
產(chǎn)品ID:2ZYN8YF7CM

下面也有MQTT三元組的信息。

image-20231223000642253

【6】配置手機(jī)APP

如果除了小程序之外,還想使用手機(jī)APP,可以配置手機(jī)APP頁(yè)面。

image-20231223000720504

配置步驟和上面的微信程序一樣。

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>

image-20231223000807921

運(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ā)布

image-20231223001012407

如果設(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}}

image-20231219105412968

【4】物聯(lián)網(wǎng)平臺(tái)端口號(hào)與IP

官方文檔: https://cloud.tencent.com/document/product/634/32546

image-20230214173705710

域名格式:<產(chǎn)品ID>.iotcloud.tencentdevices.com

2ZYN8YF7CM.iotcloud.tencentdevices.com

image-20231223001112741

**得到域名對(duì)應(yīng)的IP地址: ** 175.178.30.200

image-20231219105610397

【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ā)布主題。

image-20231223001609460

發(fā)布主題之后,會(huì)收到服務(wù)器下發(fā)的回應(yīng)消息,表示消息已經(jīng)上傳成功。

image-20231223001618092

在設(shè)備調(diào)試頁(yè)面,可以看到設(shè)備已經(jīng)在線了:

image-20231223001644744

打開設(shè)備頁(yè)面,就能看到設(shè)備上傳的數(shù)據(jù):

image-20231223001753474

還能看歷史數(shù)據(jù): 可以看最近3天的數(shù)據(jù)。

image-20231223001812081

【6】騰訊連連微信小程序

打開騰訊連連微信小程序綁定設(shè)備,就可以看到設(shè)備的數(shù)據(jù)了。

步驟如下:

打開微信,找到小程序。

image-20230221142431199

右上角搜索,騰訊連接。

image-20230221142511430

然后打開騰訊連連,添加設(shè)備,掃描設(shè)備的二維碼。

image-20230221142534169

打開設(shè)備二維碼頁(yè)面。

image-20231223001917288

添加成功。 點(diǎn)擊左下角關(guān)注公眾號(hào),可以第一時(shí)間收到設(shè)備的動(dòng)態(tài)消息。

image-20231223002634625

到此,騰訊物聯(lián)網(wǎng)云平臺(tái)部署完成。

【7】下發(fā)的數(shù)據(jù)

點(diǎn)擊微信小程序里面的按鈕可以看到設(shè)備端收到對(duì)應(yīng)的控制信息。

image-20231223002517277

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)試接線

image-20240511223245187

image-20240511223256788

image-20240511223308721

5.2 測(cè)試模塊

第一步接上之后,串口調(diào)試助手選擇波特率為115200,勾選軟件上的發(fā)送新行選項(xiàng)。發(fā)送AT過(guò)去,正常模塊會(huì)返回OK。

只有收到了OK,才表示模塊工作正常。

image-20240511204301353

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)的。

官方文檔:

image-20220220191400115

【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è)試。

官方文檔:

image-20220220191430010

  • 更多詳細(xì)資料請(qǐng)聯(lián)系.docx
    下載
意法半導(dǎo)體

意法半導(dǎo)體

意法半導(dǎo)體(ST)集團(tuán)于1987年6月成立,是由意大利的SGS微電子公司和法國(guó)Thomson半導(dǎo)體公司合并而成。1998年5月,SGS-THOMSON Microelectronics將公司名稱改為意法半導(dǎo)體有限公司。意法半導(dǎo)體是世界最大的半導(dǎo)體公司之一,公司銷售收入在半導(dǎo)體工業(yè)五大高速增長(zhǎng)市場(chǎng)之間分布均衡(五大市場(chǎng)占2007年銷售收入的百分比):通信(35%),消費(fèi)(17%),計(jì)算機(jī)(16%),汽車(16%),工業(yè)(16%)。 據(jù)最新的工業(yè)統(tǒng)計(jì)數(shù)據(jù),意法半導(dǎo)體是全球第五大半導(dǎo)體廠商,在很多市場(chǎng)居世界領(lǐng)先水平。例如,意法半導(dǎo)體是世界第一大專用模擬芯片和電源轉(zhuǎn)換芯片制造商,世界第一大工業(yè)半導(dǎo)體和機(jī)頂盒芯片供應(yīng)商,而且在分立器件、手機(jī)相機(jī)模塊和車用集成電路領(lǐng)域居世界前列.

意法半導(dǎo)體(ST)集團(tuán)于1987年6月成立,是由意大利的SGS微電子公司和法國(guó)Thomson半導(dǎo)體公司合并而成。1998年5月,SGS-THOMSON Microelectronics將公司名稱改為意法半導(dǎo)體有限公司。意法半導(dǎo)體是世界最大的半導(dǎo)體公司之一,公司銷售收入在半導(dǎo)體工業(yè)五大高速增長(zhǎng)市場(chǎng)之間分布均衡(五大市場(chǎng)占2007年銷售收入的百分比):通信(35%),消費(fèi)(17%),計(jì)算機(jī)(16%),汽車(16%),工業(yè)(16%)。 據(jù)最新的工業(yè)統(tǒng)計(jì)數(shù)據(jù),意法半導(dǎo)體是全球第五大半導(dǎo)體廠商,在很多市場(chǎng)居世界領(lǐng)先水平。例如,意法半導(dǎo)體是世界第一大專用模擬芯片和電源轉(zhuǎn)換芯片制造商,世界第一大工業(yè)半導(dǎo)體和機(jī)頂盒芯片供應(yīng)商,而且在分立器件、手機(jī)相機(jī)模塊和車用集成電路領(lǐng)域居世界前列.收起

查看更多

相關(guān)推薦

方案定制

去合作
方案開發(fā)定制化,2000+方案商即時(shí)響應(yīng)!