一種溫濕度傳感器的記錄數(shù)據(jù)保存方法
最原始的數(shù)據(jù)記錄都是依靠人工去完成的,每隔一段時(shí)間記錄一次數(shù)據(jù)。在科學(xué)實(shí)驗(yàn)室里,科技人員經(jīng)常拿著筆和紙記錄當(dāng)時(shí)觀察的數(shù)據(jù),這種工作既單調(diào)又枯燥,還不能及時(shí)。于是人們想到一種辦法,讓機(jī)器來定時(shí)采集和記錄,然后將采集的數(shù)據(jù)保存到FLASH中。當(dāng)我們需要的時(shí)候,再從FLASH中讀出來,供我們使用。可見,機(jī)器記錄數(shù)據(jù)既保證了實(shí)時(shí)性和效率,還節(jié)省了人工成本。
我們先回顧一下人工記錄的方法:先在一張空白的紙上制作一個(gè)表格,里面有:序號(hào),內(nèi)容,時(shí)間,簽字人姓名,核驗(yàn)時(shí)間。同理、機(jī)器記錄也需要首先要有一個(gè)空白的數(shù)據(jù)記錄區(qū),而且掉電再上電還要保證數(shù)據(jù)繼續(xù)存在。于是我們會(huì)很快想到FLASH存儲(chǔ)器,F(xiàn)LASH通常有兩種:I2C通訊的EEPROM和SPI通訊的FLASH。EEPROM最大的分區(qū)為頁,限制了EEPROM的容量擴(kuò)展;其次跨頁寫入時(shí),EEPROM需要發(fā)送重啟條件;再次I2C抗干擾能力差。SPI通訊的FLASH支持扇區(qū)讀、寫和擦除,同時(shí)支持塊擦除,容量大,性價(jià)比高。因此,SPI通訊的FLASH是我們的首選。
W25Q128容量為16M字節(jié),共計(jì)4096個(gè)扇區(qū),每個(gè)扇區(qū)為4*1024個(gè)字節(jié),地址為24位。扇區(qū)擦除后,里面的數(shù)據(jù)全部是0xFF。
1、保存對(duì)象
溫度1(float型),溫度2(float型),濕度1(u8型),濕度2(u8型),狀態(tài)數(shù)據(jù)(u8型)
1、數(shù)據(jù)保存周期
規(guī)定每5分鐘保存一次。這樣,每天保存的信息數(shù)量為:24*60/5=288條。
2、消息格式
1)、時(shí)間:
用秒表示,32位數(shù)值,使用16進(jìn)制的ASCii碼表示,需要占用8個(gè)字節(jié)。
若用0表示2000年1月1日00:00:00,則:
全為平年,最大年數(shù)為0x100000000/3600/24/365=4294967296=136.19年
全為閏年,最大年數(shù)為0x100000000/3600/24/366=4294967296=135.82年
從2023年算起,還可以支持112年,這個(gè)時(shí)間數(shù)值夠用了。
2)、u32和單精度浮點(diǎn)數(shù):
單精度浮點(diǎn)數(shù)為32位數(shù)值,使用16進(jìn)制的ASCii碼表示,需要占用8個(gè)字節(jié)。
3)、整型數(shù):
u16型數(shù)值,使用16進(jìn)制的ASCii碼表示,需要占用4個(gè)字節(jié),用D表示。
u8型數(shù)值,使用16進(jìn)制的ASCii碼表示,需要占用2個(gè)字節(jié),用d表示。
4)、校驗(yàn)碼:
校驗(yàn)碼為u8型數(shù)值,使用16進(jìn)制的ASCii碼表示,需要占用2個(gè)字節(jié)。
5)、起始符號(hào)和結(jié)束符號(hào):
起始符號(hào)’(’,使用ASCii碼表示,需要占用1個(gè)字節(jié)。
結(jié)束符號(hào)’)’,使用ASCii碼表示,需要占用1個(gè)字節(jié)。
6)、上傳狀態(tài):
0xFF表示沒有上傳,需要執(zhí)行斷網(wǎng)續(xù)傳;字符’Y’表示已上傳,無需續(xù)傳。需要占用1個(gè)字節(jié)。
7)、消息格式:(上傳狀態(tài)/時(shí)間/f1/f2/d1/d2/d3/校驗(yàn)碼)
每條信息為3*8+3*2+5=35個(gè)字節(jié)。
1個(gè)時(shí)間數(shù)據(jù),3個(gè)浮點(diǎn)數(shù),3個(gè)u8型數(shù)值。
舉例:
(Y000000003F0000003F0000004B4B00XX)
Y表示該信息已經(jīng)上傳
時(shí)間:00000000通過換算得到時(shí)間為2000-01-01 00:00:00
溫度1為浮點(diǎn)字符串?dāng)?shù)值3F000000,合為十進(jìn)制數(shù)為0.5度
溫度2為浮點(diǎn)字符串?dāng)?shù)值3F000000,合為十進(jìn)制數(shù)為0.5度
濕度1為u8型字符串?dāng)?shù)值4B,合為十進(jìn)制數(shù)為75
濕度2為u8型字符串?dāng)?shù)值4B,合為十進(jìn)制數(shù)為75
溫度1,溫度2,濕度1和濕度2狀態(tài)值為u8型字符串?dāng)?shù)值00,合為十進(jìn)制數(shù)為0。
3、扇區(qū)規(guī)劃
1)、每個(gè)扇區(qū)的前兩個(gè)字節(jié),用來記錄扇區(qū)的狀態(tài):
分別用SectorXByte[0]和SectorXByte[1]表示,其中-1
SectorXByte[0]=0xFF且SectorXByte[1]=0xFF表示該扇區(qū)為空白扇區(qū);
SectorXByte[0]=’1’且SectorXByte[1]=0xFF表示該扇區(qū)可以繼續(xù)保存信息;
SectorXByte[0]=’1’且SectorXByte[1]=’1’表示該扇區(qū)滿,不能再保存信息;
SectorXByte[0]=0xFF且SectorXByte[1]=’1’表示該扇區(qū)損壞了,不能保存信息;
這么規(guī)定的目的,可以告訴我們當(dāng)前寫到哪個(gè)扇區(qū)了,同時(shí),可以避免將數(shù)據(jù)寫入壞扇區(qū)。
舉例:
Sector0Byte[0]=0xFF且Sector0Byte[1]=0xFF表示扇區(qū)0為空白扇區(qū);
Sector0Byte[0]=’1’且Sector0Byte[1]=0xFF表示扇區(qū)0可以繼續(xù)保存信息;
Sector0Byte[0]=’1’且Sector0Byte[1]=’1’表示扇區(qū)0滿,不能再保存信息;
Sector0Byte[0]=0xFF且Sector0Byte[1]=’1’表示扇區(qū)0損壞了,不能保存信息;
2)、每個(gè)扇區(qū)的信息數(shù)量
(4096-2)/35=116.9條,按照116條/扇區(qū)計(jì)算,損失34個(gè)字節(jié)。
3)、規(guī)定信息寫入,不得跨越扇區(qū)。因此最后34個(gè)字節(jié)為0xFF,不使用。這么設(shè)計(jì)的目的,就是為了保證扇區(qū)前兩個(gè)字節(jié)用作記錄扇區(qū)的狀態(tài),不被改變,同時(shí),也是為了扇區(qū)具有可讀性。
4、W25Q64JV(8M容量的FLASH)
1)、最大信息數(shù)量
116*2048=237568條數(shù)據(jù)
2)、最多天數(shù)
237568/288=824天,因此8M的FLASH可以保存2.2年的數(shù)據(jù)。
5、W25Q128JV(16M容量的FLASH)
1)、最大信息數(shù)量
116*4096=475136條數(shù)據(jù)
2)、最多天數(shù)
475136/288=1649天,因此16M的FLASH可以保存4.5年的數(shù)據(jù)。
6、總結(jié)
通過上述對(duì)FLASH得規(guī)劃,實(shí)現(xiàn)數(shù)據(jù)記錄就很容易實(shí)現(xiàn)了。
審核編輯 黃宇
-
傳感器
+關(guān)注
關(guān)注
2564文章
52793瀏覽量
765447 -
FlaSh
+關(guān)注
關(guān)注
10文章
1674瀏覽量
151349 -
EEPROM
+關(guān)注
關(guān)注
9文章
1084瀏覽量
83521 -
ASCII
+關(guān)注
關(guān)注
5文章
172瀏覽量
35778
發(fā)布評(píng)論請(qǐng)先 登錄
常見的溫濕度傳感器類型?
溫濕度變送器功能有哪些?一文詳細(xì)解析
溫濕度傳感器:核心原理與跨領(lǐng)域應(yīng)用解析

如何操作電子溫濕度記錄儀

溫濕度傳感器:生活中的“小氣候?qū)<摇?/a>
溫濕度傳感器種類及原理的優(yōu)劣分析
溫濕度傳感器是什么類型的傳感器
dht11溫濕度傳感器工作原理介紹
車載溫濕度傳感器有什么功能
如何使用合宙的DTU+業(yè)務(wù)云平臺(tái),做一個(gè)溫濕度傳感器數(shù)據(jù)采集項(xiàng)目?

溫濕度傳感器怎么調(diào)試
溫濕度傳感器技術(shù)參數(shù)有哪些
蜂窩物聯(lián)4G溫濕度傳感器如何助力現(xiàn)代農(nóng)業(yè)?

評(píng)論