請教前輩們,Arduino有沒有辦法一邊"不間斷"的擷取sensor資料,一邊把資料寫進SD卡,然後又把之前寫在SD卡的資料讀出來用藍芽傳給手機?
謝謝囉~
Yi-Jia Ye
2017-09-16 00:10:17
張凌瑞
2017-09-16 00:13:53
因為我是擔心當SD卡內的資料很多,在讀取並上傳手機的時候會讓資料擷取的動作中斷...所以才有這樣的疑問
曹建國
2017-09-16 00:18:56
張凌瑞
2017-09-16 00:20:53
當然,目前只是要記錄壓力感測值。不過希望能在不遺失資料的前提下越快越好。
曹建國
2017-09-16 00:24:08
張凌瑞
把每種sensor讀取所需時間,與update to db/ cloud 所需時間,如果都不一樣,就分割所需時間之最大公因數為間隔,在沒一間隔到那個感測器時間,去更新
張凌瑞
2017-09-16 00:32:49
好的,不過因為可能紀錄1000筆資料之後才上傳,所以可能就要在兩次擷取資料之間上傳多筆資料,例如10筆,來減少上傳時間。或是利用壓力為0的時候不寫SD卡,全力上傳。
曹建國
2017-09-16 00:35:33
張凌瑞
2017-09-16 00:38:53
賴聲寬
2017-09-16 00:39:17
彭帟絃
2017-09-16 00:39:49
曹建國
2017-09-16 00:39:54
張凌瑞
多工在arduinoi sketch很難寫,用CPP class 要考慮核心
張凌瑞
2017-09-16 00:43:07
因為藍芽傳輸可能在稍後才進行,所以是讀取稍早記錄在SD卡裡面的資料來上傳。是不需要及時的一直更新到手機的。
彭帟絃
2017-09-16 00:45:16
張凌瑞
2017-09-16 00:48:10
賴聲寬
2017-09-16 00:49:54
張凌瑞
2017-09-16 00:53:26
ㄜ...我沒看到藍芽傳輸的Buffer...應該是底層的東西齁...我只會表面的Orz...
張凌瑞
2017-09-16 01:02:04
謝謝各位的建議,我會先試試曹老師說的方式,像是分時多工來處理不同作業。後續如果有其他Idea敬請不吝指導,謝謝^^
彭帟絃
2017-09-16 01:02:42
彭帟絃
2017-09-16 01:03:44
張凌瑞
2017-09-16 01:04:46
賴建宏
2017-09-16 03:12:59
帕拉提斯
2017-09-16 03:52:16
我覺得比較有希望的作法是
1. timer interrupt 更新 sensor data,寫 sd 卡
2. main loop 嘗試丟藍芽,例如確認目前是否有連接、那些資料已經傳出去、那些資料還沒
注意 fat32 檔案最大 4gb。
粘智恒
2017-09-16 07:44:47
用 timer 讀sensor,主 loop 讀寫 sd
James Hwang
2017-09-16 10:17:04
Arduino (atmega328p) 是否能做多工處理,基本上是可以的,看資料量與速度。
有經驗的,會有自己的一套多工mini kernel 使用。沒經驗的或是想快速下課的當然都是 delay loop 自然就做不好。
以1s才update 1次的多工,那太簡單了。
賴建宏
2017-09-16 10:39:24
其實感測器通常不會每筆取樣都存,一般來說會間隔時間取樣幾筆,然後求平均或什麼
帕拉提斯
2017-09-16 13:14:03
1s 才 update 一次算什麼多工... 我以為 hard limit 是 10ms... XD
帕拉提斯
2017-09-16 13:16:06
.............. 1sps (samples per second) = =
這個做不出來就抓起來打屁股 XD
張凌瑞
2017-09-16 16:53:07
張凌瑞
2017-09-16 23:31:39
嗯...我是想把資料上傳給手機做後續處理,不過如果開發板能預先做一些簡單的處理應該也不錯!
張凌瑞
2017-09-16 23:47:21
其實一開始設定比較慢速是因為...我不知道他可以跑多快,所以先用走的XD
張凌瑞
2017-09-17 00:00:19
哦哦哦…使用中斷,這個讚,後面會試試看! 感謝
?
賴建宏
2017-09-17 06:09:03
可以啦!但是資料的運算量不能太大,而且不要用很多複雜或高次的計算
手機可以用藍芽收回後,透過App算,比較好!因為手機的記憶體跟處理器還是比較高檔
你可以看看LASS的空氣盒子那種做法
賴建宏
2017-09-17 08:23:28
其實慢速倒是無所謂,看你所要偵測的目標本身的環境以及感測器的反應時間
通常環境的變化不會太快,而且感測器不會瞬時變化!
一般你像是LASS或是我那時魚菜共生系統的感測當時,我們會先穩定個上百ms才叫ADC對感測器取樣
賴建宏
2017-09-17 08:24:36
Milo Chen
2017-09-17 14:28:05
因為你的情境考慮到app 讀裝置資料,你將這問題分成兩個情境看就會簡單多了。
一個 case 就是一直存資料到 SD 卡就好了。另一個狀況是手機手機透過藍芽跟 arduino 請求要資料。
你將 arduino 讀sensor 資料的優先順序設最高就好,心有餘力的時間再來處理手機 app 對 arduino 裝置的請求即可。
app 端的話,如果是 android 的話,配 background service 跟arduino 請求資料, 藉此慢慢把 DATA sync 就好。
這樣作的話,你arduino sensor 的資料都會存到,而手機端在使用時,使用者也會感覺手機上的資料與裝置是一直同步的,不會有要特別手動作處理。
Hsu Regis
2017-09-17 15:40:11
Hsu Regis
2017-09-17 15:41:01
黃文辭
2017-09-17 16:18:08
在寫入sd卡的時候可能要有技巧些,如過讀到一個值就寫入的話,效能會很差.
邱歐吉
2017-09-17 21:49:20
要真正不間斷就要看你MCU有沒有DMA, 沒有DMA的話,充其量只是分時多工。
賴建宏
2017-09-17 22:11:50
帕拉提斯
2017-09-17 22:54:16
fat32 單一檔案最大 4gb,是檔案系統的限制。
分區可以更大沒錯。
蔡茂青
2017-09-18 22:59:06
帕拉提斯
2017-09-18 23:17:48
吳水豚
2017-09-18 23:58:49
張凌瑞
2017-09-19 00:24:23
反例是,紀錄幾個小時之後才連結手機藍芽做上傳的動作。這時就會一直讀取SD卡資料經由藍芽上傳手機。如果沒有規劃好,擔心會delay到sensor data的擷取時間間隔(變成有快有慢)。慢速應該沒差,但是快速擷取時可能就會有影響了。
蔡茂青
2017-09-19 07:58:49