2012-04-04 53 views
2

定期更新數據庫我現在有我希望使用從連接到互聯網的溫度傳感器存儲定期更新數據MySQL數據庫。無需瀏覽器/用戶

我目前有一個頁面,打開時會抓取當前溫度和當前時間戳,並將其作爲條目添加到數據庫中,但我一直在尋找一種方法,無需每5分鐘刷新頁面秒。

詳細信息: 本數據來源於一個Arduino以太網,貼到一個IP地址。 目前,我使用cURL從IP獲取數據,添加時間戳並將其保存到數據庫。 顯然只有刷新頁面時纔會更新(它使用PHP)。

下面是數據的活飼料 - http://wetdreams.org.uk/ChrisProject/UI/live_graph_two.html

TL; DR - 基本上,我需要一箇中間人,從IP抓取數據,並將其發佈到MySQL

編輯:謝謝所有的建議。可能會有一些混亂,我正在尋找一個解決方案(理想情況下)根本不需要計算機(除了包含數據庫的服務器)。由於我期望長時間(星期)存儲數據,因此我想設置它並在服務器(或Arduino)上運行一個腳本,該腳本獲取temp並將其發佈到數據庫。

在我的頭上,我想有一個自動(沒有任何瀏覽器中打開,或任何其他提示以外的定時器)服務器上的頁面調用PHP腳本。

希望能夠解決問題!

+0

爲什麼不使用crontab? – jpic 2012-04-04 10:42:48

+0

它看起來像arduino更新數據庫,所以crontab將是錯誤的解決方案。它會更像是一個Ajax解決方案。 – Bradmage 2012-04-04 10:45:09

+0

但是,如果Arduino上實現了一個[簡單的http服務器](http://arduino.cc/en/Tutorial/WebServer),顯示它正在服務的頁面上的當前溫度,那麼獲取該數據將是微不足道的使用bash腳本並將其插入到數據庫中。 – Sibster 2012-04-04 10:51:46

回答

0

在這種情況下,最好的解決辦法是使用Arduino向PHP腳本發出請求,完成它的任務並將檢索到的值添加到數據庫中。我剛剛運行它的方式(簡單起見)是使用EthernetClient從Arduino獲得GET請求。

代碼:

char server[] = "www.example.com"; 

if(client.connect(server, 80)){ 
    client.println("GET /test.php?input_val=99 HTTP/1.0"); 
    client.println("HOST: www.example.com"); 
} 

但是,因爲我已經建立了我的網站圍繞數據被髮布到一個獨立的服務器/ IP *的事實,我選擇使用cron來安排任務。在這種情況下,我想每5到10秒更新一次數據庫。但是,我捎帶在別人的服務器上,所以我聯繫了服務器所有者,並要求他們每分鐘設置一個調用「/mysubdir/cron_update.php」的cron作業(最快的cron可以調用)。從那裏我做了一些'ScriptCeption',並在PHP腳本中,在完成腳本之前每隔10秒完成一次我的呼叫。

感謝所有幫助我的人,我在此發佈這個完整的答案和解釋,因爲從技術上講,每個人都是正確的。

0

您可以使用JavaScript來自動刷新頁面

<script type="text/javascript"> 
    function timedRefresh(timeoutPeriod) { 
     setTimeout("location.reload(true);", timeoutPeriod); 
} 
</script> 

一個更好的解決辦法是阿賈克斯,並在後臺數據庫發送日期regulary。

另一種方法是使用PHP-CLI script並使用cron jobs進行計劃,該自動獲取傳感器的值。

+0

我得到了他不想讓人耳目一新的印象。 – Bradmage 2012-04-04 10:51:05

2

,你可以直接從您的Arduino使用ArduinoEtherenetClient發佈到Web服務器(點擊鏈接以獲得示例)

POST /insertData.php - 在insertData.php使用$_POST["tempCaptured"]獲得臨時值,並插入在分貝。

使用ArduinoEthernetClient http://interactive-matter.eu/how-to/arduino-http-client-library/

+0

插入東西到數據庫中?使用POST,而不是GET。 – Quentin 2012-04-04 10:50:21

+0

使用GET會違反HTTP規範,並放棄POST提供的意外數據插入的所有保護。 – Quentin 2012-04-04 10:51:46

+0

這是寫東西到數據庫。它需要POST。 – Quentin 2012-04-04 10:56:46

0

如果我理解這個問題好文章。你只需要每5秒刷新一次網頁的替代品?
沒有獲取數據?

我想建立一個AJAX的連接,並有一種無限循環的運行PHP。將新數據回傳到您的JavaScript以更新圖表。 PHP循環必須進行超時檢查才能最終關閉腳本。

+0

我在想Ajax,但這需要我一直打開瀏覽器,對於這個解決方案並不理想(雖然可能是最後的手段)。 檢查編輯的問題,這可能會清理的東西了嗎? – 2012-04-04 11:28:36

+0

@ChrisM是的,這將是前端。與Arduino本身無關。爲此,您可以將日誌保存爲設備上的txt文件,並在瀏覽器打開時讀取數據。或者讓Arduino直接將數據發佈到數據庫。 Sandeep Manne的例子是我的建議。 – Bradmage 2012-04-04 16:12:37

1

寫代碼(ping.php),其坪此URL以固定的間隔。

現在,設置它運行在固定的間隔這個代碼cronjob

你的cron可以0 */2 * * * PATH_TO_{ping.php} // will run every 2 hours

您ping.php文件會連接到活飼料,數據和存儲結果搶的分貝:

+0

Cronjob已被提及,讓Arduino發送數據,而不是一臺計算機將數據拉出來似乎更經濟。 – Bradmage 2012-04-04 11:09:22

+0

@BradleyForster - 你知道從Arduino發佈到MySQL的簡單方法嗎?問題是你不能從Arduino運行任何服務器端腳本,因爲它顯然沒有安裝PHP。 – 2012-04-04 11:31:33

+0

@ChrisM [EthernetClient](http:// arduino。cc/en/Reference/EthernetClient)是最簡單的。然後你只需要在你的服務器上用數據庫代碼創建一個php文件,併發佈一個像/process.php?temp=34.1×tamp=0000000之類的URL,以及任何你想存儲的數據。 – Bradmage 2012-04-04 16:16:25