最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

單片機(jī)課設(shè):MSP430+DS18B20+ESP8266+阿里云構(gòu)建實(shí)時(shí)溫度監(jiān)控平臺(tái)

2023-07-05 00:52 作者:繁霜粲于素階  | 我要投稿

要實(shí)現(xiàn)的東西

課設(shè)要做溫度監(jiān)視并且通過(guò)串口發(fā)送到PC和阿里云。

材料:

  • DS18B20溫度傳感器

  • MSP430f169

  • esp8266

  • 杜邦線(xiàn)

學(xué)習(xí)一下DS18B20

ds18b20是一個(gè)單總線(xiàn)的傳感器,只通過(guò)一個(gè)引腳DQ便可進(jìn)行數(shù)據(jù)傳輸。

  • 測(cè)溫范圍為-55℃到+125℃,在-10℃到+85℃范圍內(nèi)誤差為±0.4°。

  • 返回16位二進(jìn)制溫度數(shù)值

引腳圖:


image-20230630163247929

內(nèi)部由 64 位ROM,高速暫存器,存儲(chǔ)器 組成。

  • 64位ROM

    64 位ROM存儲(chǔ)獨(dú)有的序列號(hào)。

    ROM中的64位序列號(hào)是出廠(chǎng)前被光刻好的,它可以看作是該DS18B20的地址序列碼,每個(gè)DS18B20的64位序列號(hào)均不相同。這樣就可以實(shí)現(xiàn)一根總線(xiàn)上掛接多個(gè)DS18B20的目的。(但是我們不掛載多個(gè))

  • 高速暫存器

    • 溫度傳感器

    • 一個(gè)字節(jié)的溫度上限和溫度下限報(bào)警觸發(fā)器(TH和TL)

    • 配置寄存器允許用戶(hù)設(shè)定9位,10位,11位和12位的溫度分辨率,分別對(duì)應(yīng)著溫度的分辨率為:0.5°C,0.25°C,0.125°C,0.0625°C,默認(rèn)為12位分辨率,

  • 存儲(chǔ)器:由一個(gè)高速的RAM和一個(gè)可擦除的EEPROM組成,EEPROM存儲(chǔ)高溫和低溫觸發(fā)器(TH和TL)以及配置寄存器的值,(就是存儲(chǔ)低溫和高溫報(bào)警值以及溫度分辨率)


image-20230630170054847

高速暫存器由9個(gè)字節(jié)組成

  • 字節(jié)0~1 是溫度存儲(chǔ)器,用來(lái)存儲(chǔ)轉(zhuǎn)換好的溫度。第0個(gè)字節(jié)存儲(chǔ)溫度低8位,第一個(gè)字節(jié)存儲(chǔ)溫度高8位

  • 字節(jié)2~3 是用戶(hù)用來(lái)設(shè)置最高報(bào)警和最低報(bào)警值(TH和TL)。

  • 字節(jié)4 是配置寄存器,用來(lái)配置轉(zhuǎn)換精度,可以設(shè)置為9~12 位。

  • 字節(jié)5~7 保留位。芯片內(nèi)部使用

  • 字節(jié)8 CRC校驗(yàn)位。是64位ROM中的前56位編碼的校驗(yàn)碼。由CRC發(fā)生器產(chǎn)生。

溫度存儲(chǔ)機(jī)制

DS18B20的核心功能是直接溫度-數(shù)字測(cè)量。其溫度轉(zhuǎn)換可由用戶(hù)自定義為9、10、11、12位精度分別為0.5℃、0.25℃、0.125℃、0.0625℃分辨率。DS18B20采用16位補(bǔ)碼的形式來(lái)存儲(chǔ)溫度數(shù)據(jù),溫度是攝氏度。當(dāng)溫度轉(zhuǎn)換命令發(fā)布后,經(jīng)轉(zhuǎn)換所得的溫度值以二字節(jié)補(bǔ)碼形式存放在高速暫存存儲(chǔ)器的第0和第1個(gè)字節(jié)。

高字節(jié)的五個(gè)S為符號(hào)位,溫度為正值時(shí)S=1,溫度為負(fù)值時(shí)S=0

剩下的11位為溫度數(shù)據(jù)位,對(duì)于12位分辨率,所有位全部有效,對(duì)于11位分辨率,位0(bit0)無(wú)定義,對(duì)于10位分辨率,位0和位1無(wú)定義,對(duì)于9位分辨率,位0,位1,和位2無(wú)定義。

image-20230630170742227
image-20230630170857707

配置寄存器


image-20230630171111477

在配置寄存器中,我們可以通過(guò)R0和R1設(shè)置DS18B20的轉(zhuǎn)換分辨率,DS18B20在上電后默認(rèn)R0=1和R1=1(12分辨率),寄存器中的第7位和第0位到4位保留給設(shè)備內(nèi)部使用。

工作步驟

DS18B20的工作步驟可以分為三步:

1.初始化DS18B20 2.執(zhí)行ROM指令 3.執(zhí)行DS18B20功能指令

其中第二步執(zhí)行ROM指令,也就是訪(fǎng)問(wèn)每個(gè)DS18B20,搜索64位序列號(hào),讀取匹配的序列號(hào)值,然后匹配對(duì)應(yīng)的DS18B20,如果我們僅僅使用單個(gè)DS18B20,可以直接跳過(guò)ROM指令。而跳過(guò)ROM指令的字節(jié)是0xCC。

1.初始化DS18B20


image-20230630171557953

DQ管腳的常態(tài)是高電平。

根據(jù)時(shí)序圖我們得出初始化的步驟:

  • 1.單片機(jī)拉低總線(xiàn)至少480us,產(chǎn)生復(fù)位脈沖,然后釋放總線(xiàn)(拉高電平)轉(zhuǎn)為接收模式。

  • 2.這時(shí)DS8B20檢測(cè)到請(qǐng)求之后,會(huì)拉低信號(hào),大約持續(xù)60~240us表示應(yīng)答。

  • 3.DS8B20拉低電平的60~240us之間,單片機(jī)讀取總線(xiàn)的電平,如果是低電平,那么表示初始化成功

  • 4.DS18B20拉低電平60~240us之后,會(huì)釋放總線(xiàn)。

根據(jù)此我們可以寫(xiě)出MSP430的初始化代碼(我把DQ接到了單片機(jī)的P10端口):

2.執(zhí)行ROM指令

我們首先需要掌握,如何向DS18B20寫(xiě)數(shù)據(jù)。


image-20230630173848300

總線(xiàn)控制器通過(guò)控制單總線(xiàn)高低電平持續(xù)時(shí)間從而把邏輯1或0寫(xiě)DS18B20中。每次只傳輸1位數(shù)據(jù)

根據(jù)時(shí)序圖我們得出以下結(jié)論

寫(xiě)0:

  • 1.拉低總線(xiàn)持續(xù)60-120us

  • 2.釋放總線(xiàn)(拉高電平)

寫(xiě)1:

  • 拉低總線(xiàn)2-15us

  • 釋放總線(xiàn)

代碼實(shí)現(xiàn):

掌握了寫(xiě)操作,我們還需要知道寫(xiě)什么:

常用的是:

跳過(guò)ROM0xCC

溫度轉(zhuǎn)換 0x44

開(kāi)啟溫度讀取轉(zhuǎn)換,讀取好的溫度會(huì)存儲(chǔ)在高速暫存器的第0個(gè)和第一個(gè)字節(jié)中

讀取溫度 0xBE

讀取高速暫存器存儲(chǔ)的數(shù)據(jù)(共9個(gè)Byte)

對(duì)于本步驟我們選擇直接跳過(guò)ROM指令

3.執(zhí)行DS18B20功能指令

在此之前我們先了解以下怎么讀DS18B20來(lái)自的數(shù)據(jù)

讀操作和寫(xiě)操作一樣,也是按位讀取,從低位向高位


image-20230630175657075

根據(jù)時(shí)序圖,我們總結(jié)如下步驟

  • 拉低總線(xiàn)至少1us,然后釋放總線(xiàn)

  • 開(kāi)始讀取,在一個(gè)讀時(shí)隙內(nèi),若為1則釋放總線(xiàn)為高電平,若為0則拉低電平。

因此代碼這樣寫(xiě):

實(shí)現(xiàn)了以上函數(shù)我們就可以從DS18B20取出溫度的數(shù)據(jù)了:

一個(gè)疑點(diǎn):為什么得到的數(shù)值要乘0.625呢?

關(guān)于這個(gè)我思考了很久,一直在想0.625和12位分辨率的關(guān)系,結(jié)果發(fā)現(xiàn)官方文檔里寫(xiě)了他們的對(duì)應(yīng)關(guān)系,也就是說(shuō)這不是算出來(lái)的是規(guī)定的,這也推出了一些結(jié)論:

小數(shù)位是低四位因?yàn)? 也就是說(shuō),寄存器內(nèi)每步進(jìn)1相當(dāng)于溫度步進(jìn)0.0625。因需要如此處理,而代碼中乘0.625是原來(lái)真實(shí)的值擴(kuò)大了十倍,最后取整相當(dāng)于保留了小數(shù)點(diǎn)后一位。而(float)expression的作用則是使計(jì)算更精確。


image-20230630195438080

學(xué)習(xí)一下串口

司馬自動(dòng)更新操你媽

串口通信: https://baike.baidu.com/item/串口通信/3775296?fromModule=lemma_inlink(Serial Communication), 是指外設(shè)和計(jì)算機(jī)間,通過(guò)數(shù)據(jù)信號(hào)線(xiàn): https://baike.baidu.com/item/信號(hào)線(xiàn)/8807477?fromModule=lemma_inlink 、地線(xiàn)、控制線(xiàn)等,按位進(jìn)行傳輸數(shù)據(jù)的一種通訊方式。

UART是通用異步收發(fā)傳輸器(Universal Asynchronous Receiver/Transmitter),通常稱(chēng)作UART,是一種異步收發(fā)傳輸器,是設(shè)備間進(jìn)行異步通信的關(guān)鍵模塊。UART負(fù)責(zé)處理數(shù)據(jù)總線(xiàn)和串行口之間的串/并、并/串轉(zhuǎn)換,并規(guī)定了幀格式;通信雙方只要采用相同的幀格式和波特率,就能在未共享時(shí)鐘信號(hào)的情況下,僅用兩根信號(hào)線(xiàn)(Rx 和Tx)就可以完成通信過(guò)程,因此也稱(chēng)為異步串行通信。

MSP430UART初始化配置步驟:

  • SWRT復(fù)位(UxCTL)

    該位的狀態(tài)影響著其他一些控制位和狀態(tài)位的狀態(tài)。在串行口的使用過(guò)程中,這一位是比較重要的控制位。一次正確的 USART 模塊初始化應(yīng)該是這樣的順序:先在 SWRST=1 情況下設(shè)置串行口;然后設(shè)置 ?SWRST=0;最后如果需要中斷,則設(shè)置相應(yīng)的中斷使能。

    SWRT0 ? ? ? ? ? ? ? ? ? ? ? ? ?SWRT1

  • 設(shè)置字符長(zhǎng)度CHAR(UxCTL)

    07位 ? ? ? ? ? ? ? ? ? ? ? ? ?18位

  • 設(shè)置串口時(shí)鐘SSEL(UxTCTL )

    這兩位確定波特率發(fā)生器的時(shí)鐘源

    0外部時(shí)鐘 UCLKI ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1輔助時(shí)鐘 ACLK ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2子系統(tǒng)時(shí)鐘 SMCLK ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3子系統(tǒng)時(shí)鐘 SMCLK

  • 設(shè)置波特率寄存器UxBRx

    UxBR0 和 UxBR1 兩個(gè)寄存器用于存放波特率分頻因子的整數(shù)部分。 ?其中 UXBR0 位低字節(jié),UXBR1 為高字節(jié)。兩字節(jié)和起來(lái)為一個(gè) 16 位字,成為 UBR。在異步通信時(shí),UBR 的允許值不小于 3。如果 UBR<3,則接收和發(fā)送會(huì)發(fā)生不可預(yù)測(cè)的錯(cuò)誤

    UxBR0低字節(jié) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?UxBR1高字節(jié)

  • 設(shè)置UxMCTL 波特率調(diào)整寄存器

    如果波特率發(fā)生器的輸入頻率BRCLK不是所需的波特率的整數(shù)倍,帶有一小數(shù),則整數(shù)部分寫(xiě)入U(xiǎn)BR ?寄存器,小數(shù)部分由調(diào)整控制寄存器 UxCTL 的內(nèi)容反映。波特率由以下公式計(jì)算: ?波特率 = BRCLK / (UBR+ (M7+M6+..+M0) / 8 ) ?其中 M0,M1,…M6 及 M7 為控制器 UxMCTL 中的各位。調(diào)整寄存器的 8 為分別對(duì)應(yīng) 8 次分頻,如果 ?M=1,則相應(yīng)次的分頻增加一個(gè)時(shí)鐘周期;如果 Mi=0,則分頻計(jì)數(shù)器不變

  • 配置串口模塊控制寄存器 MEx

    UTXE0串口 0 的發(fā)送允許 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?URXE0串口 0 的接收允許 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?UTXE1串口 1 的發(fā)送允許 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?URXE1串口 1 的接收允許 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?0禁止 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1允許

  • SWRST=0

  • 配置接收中斷控制IE

    UTXIE0串口 0 的發(fā)送中斷允許 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?URXIE0串口 0 的接收中斷允許 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?UTXIE1串口 1 的發(fā)送中斷允許 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?URXIE1串口 1 的接收中斷允許 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?0禁止 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1允許

  • 設(shè)置IO口為普通I/O模式,設(shè)置IO口方向?yàn)檩敵?/p>

實(shí)例

發(fā)送函數(shù)

IFG1 中斷標(biāo)志寄存器 1 IFG2 中斷標(biāo)志寄存器 2

UTXIFG0串口 0 的發(fā)送中斷標(biāo)志 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?URXIFG0串口 0 的接收中斷標(biāo)志 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?UTXIFG1串口 1 的發(fā)送中斷標(biāo)志 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?URXIFG1串口 1 的接收中斷標(biāo)志 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?0無(wú)中斷請(qǐng)求標(biāo)志 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1有中斷請(qǐng)求標(biāo)志

相應(yīng)的中斷函數(shù)

一個(gè)問(wèn)題

我的溫度數(shù)據(jù)是short型兩個(gè)字節(jié),而串口是按字節(jié)逐位發(fā)送如何發(fā)送呢?

我目前只能一個(gè)字節(jié)一個(gè)字節(jié)的發(fā),結(jié)果是整數(shù)十六進(jìn)制的形式

(寫(xiě)完整篇后更新)解決了,可以數(shù)字轉(zhuǎn)換成字符串形式:

學(xué)習(xí)一下ESP8266

ESP8266 是一款由上海樂(lè)鑫信息科技: https://zh.wikipedia.org/w/index.php?title=樂(lè)鑫信息科技&action=edit&redlink=1[1]: https://zh.wikipedia.org/wiki/ESP8266開(kāi)發(fā)板#cite_note-Espressif_ESP8266-1開(kāi)發(fā)的可以作為微控制器: https://zh.wikipedia.org/wiki/微控制器使用的成本極低且具有完整TCP/IP協(xié)議棧: https://zh.wikipedia.org/wiki/TCP/IP協(xié)議棧的Wi-Fi IoT: https://zh.wikipedia.org/wiki/IoT控制芯片。

MQTT:一種通訊協(xié)議

我們只是使用,并不關(guān)注其原理

燒寫(xiě)固件

一般的esp8266芯片需要燒錄MQTT固件才能進(jìn)行連接阿里云的功能

首先在安信可的網(wǎng)站: https://docs.ai-thinker.com/esp8266下載固件,和燒錄相關(guān)程序。


image-20230703161027070

其中esp8266與USB-串口連線(xiàn)如下:

TTLESP8266 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3V33V3 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?GNDGND ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?GNDIO0 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?RX/TXTX/RX ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?GNDRST

當(dāng)程序顯示等待上電復(fù)位時(shí)讓RST接地,然后拉高。

這樣就完成了燒錄

完成與阿里云的通訊

相關(guān)參數(shù)由該軟件生成。

image-20230703161938924

成功之后阿里云的云平臺(tái)的相關(guān)設(shè)備會(huì)顯示在線(xiàn)。

與阿里云進(jìn)行數(shù)據(jù)交互

屬性設(shè)置


image-20230703163750214

復(fù)制內(nèi)容

成功則顯示在下圖


image-20230703164938420

調(diào)試

按順序操作


image-20230703165357091

可以看見(jiàn)右方返回參數(shù),串口助手也返回了相關(guān)信息

上報(bào)數(shù)據(jù)

復(fù)制該內(nèi)容


image-20230703165552998

成功上傳數(shù)據(jù)?。?!

image-20230703170245805

esp8266與MSP430f149的交互

先找到引腳功能表


image-20230703183526488

UART0在MSP430f169有現(xiàn)成的接口,用于和PC通信,UART1的TXD和RXT分別位于P36和P37這兩個(gè)IO接口。

如下初始化設(shè)置:

UART1對(duì)應(yīng)esp8266芯片,向其發(fā)送數(shù)據(jù),相當(dāng)于對(duì)它發(fā)送命令,其向主控機(jī)返回的信息,可以通過(guò)中斷函數(shù)向UART0發(fā)送數(shù)據(jù),顯示在串口調(diào)試助手用于調(diào)試。

定義相關(guān)功能函數(shù):

通過(guò)以上功能就可以完成向阿里云轉(zhuǎn)發(fā)上傳溫度數(shù)據(jù)了!

完整代碼:

通過(guò)阿里云平臺(tái)IoT Sutdio可以開(kāi)發(fā)一個(gè)物聯(lián)網(wǎng)APP來(lái)方便查看溫度


image-20230705003904473

An unforgettable journey?。?!

單片機(jī)課設(shè):MSP430+DS18B20+ESP8266+阿里云構(gòu)建實(shí)時(shí)溫度監(jiān)控平臺(tái)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
施秉县| 永康市| 浙江省| 彩票| 白朗县| 高平市| 都匀市| 张掖市| 抚州市| 阿拉尔市| 二连浩特市| 武义县| 新巴尔虎右旗| 安徽省| 乌鲁木齐市| 漳平市| 循化| 陵川县| 西青区| 汉源县| 陕西省| 名山县| 循化| 扎赉特旗| 原平市| 扶余县| 铜鼓县| 稷山县| 南川市| 响水县| 和田市| 大安市| 盱眙县| 庄河市| 无为县| 佛学| 喀喇沁旗| 丰镇市| 台北县| 乌海市| 固阳县|