物聯網最新應用技術與趨勢 - powenko 柯博文 | ios, · pdf file ·...
TRANSCRIPT
1Copyright © 2012 Jinstown All Rights Reserved. Jinstown.
物聯網最新應用技術與趨勢物聯網最新應用技術與趨勢
Powen Ko 柯博文
主辦單位:中華民國計量工程學會 執行單位:工業技術研究院量測技術發展中心103 年 9月 23 日
物聯網與穿戴裝置技術、趨勢研討會
講師介紹 - 柯博文#. 美國矽谷 LoopTek 公司 CTGO 技術長
#. 擔任中國工信部電子視像行業協會的數字平台推進中心顧問 , 中國物聯網應用與推進聯盟智
能電視產業部顧問 , 工業技術研究院資訊與通訊研究所網路服務技術組顧問
#. 專注於 Android 的蘋果 iPhone 和手機應用軟件開發,目前已經在谷歌 Android 市場和的
iPhone 上開發銷售近百款軟件,並有多款曾經為前 10 名軟件,國內外數十場大型演講講者,
並出版 10 本書籍,上百篇雜誌文章。目前專注於智慧型手機與週邊設備的應用發展,並為大型
上市公司開發相關軟體,如台北國泰世華銀行,台灣房屋,美華影音等。
#. 美國 iOS dev camp , 台北 Computex 展 , 北京手機開發者大會 , 北京 CSDN 大會、上海
中國遊戲開發者大會等數十場大會的演講者
物聯網 (Internet of Things, IoT) 應用
隨著行動裝置普及、市場上嵌入式設備和新型態穿戴裝備的陸續出現,促使傳統產品紛紛開發智慧連網功能。此外,全球互聯網蓬勃發展和 APP應用眾多,再加上 3G、 4G 的高速無線網路無所不在,無形中各個產業與產品可能都因為人手一機的行動裝置應運而生的物聯網 (Internet of Things , IoT)應用,將成為下一波國內外科技發展的主流。IoT是指將所有物品通過射頻傳感設備將訊息與網際網路連接起來,提供智慧化識別與管理,其用途遍及交通、環保、公安、居家安全、工業監測、老人照護等眾多領域。其最終目標是在任何時間、地點、人與物皆可自由互動,互通的對象包含人、感測器、智慧終端、家電、汽車與水電瓦斯儀表等,影響既深且廣。預期未來在物聯網環境逐漸完備後,影響所及將不僅限於資通訊產業,亦可能對所有產業引發變革創新。現階段其已開始應用在醫療、農業、防災等領域,未來無論在環境建構或相關資料分析,皆潛藏龐大的市場商機。許多國際研究機構亦將物聯網列為 2014年十大關鍵科技之一,全球大廠也積極展開布局。
物聯網溫度監視器
現在的天氣異常和極端不穩定, 40 度上的高溫經常發生,為了保護我們的大自然,有可能應用我們現在所學的樹莓派知識,並用在保護我們的自然環境,所以在這個專案之中,我們最後的目的希望能夠做出一個定時監測天氣的溫度,並且定時記錄的一個氣候監視系統。
ADC
常見的 ADC IC 有:ADC0804 : 有八個接腳的數位輸出。MCP3008 : 只有四個接腳的數位輸出。
ADC
影片 adc0804 demo.mov
實際硬體量測結果
Raspberry Pi 樹苺派樹莓派是開放源程式碼的硬體,具備簡單 I/O功能的電路板,Broadcom BCM2835 system on a chip (SoC) 的 ARM晶片、並且擁有一大堆的 Linux 軟體。
Raspberry Pi 樹苺派
1) SD 卡:2a): HDMI 輸出顯示 2b): RCA 輸出顯示 3) USB 的輸入連結,如滑鼠與鍵盤。4) RJ45 網路線連接。5)透過Micro USB 的電源
最少電源需要最少有 700mA 5V 的電力。 Audio Jack 聲音輸出。
Raspberry Pi 樹苺派
Raspberry Pi 樹苺派 - 讀取 analog
#!/usr/bin/env python# author: Powen Ko import time, RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)GPIO.setup(7, GPIO.IN)GPIO.setup(11, GPIO.IN)GPIO.setup(12, GPIO.IN)GPIO.setup(13, GPIO.IN)GPIO.setup(15, GPIO.IN)GPIO.setup(16, GPIO.IN)GPIO.setup(18, GPIO.IN)GPIO.setup(22, GPIO.IN)while True: a0 = GPIO.input(7) a1 = GPIO.input(11) a2 = GPIO.input(12) a3 = GPIO.input(13) a4 = GPIO.input(15) a5 = GPIO.input(16) a6 = GPIO.input(18) a7 = GPIO.input(22) total=a0+(a1*2)+(a2*4)+(a3*8)+(a4*16)+(a5*32)+(a6*64)+(a7*128) print a7,a6,a5,a4,a3,a2,a1,a0,"[",total,"]" time.sleep(0.1)
python-gpio-analog-input.mov
Raspberry Pi 樹苺派 - 溫度
本實驗將會使用溫度感應器來監測實際室內溫度,讓樹莓派成為一個溫度計把相關資料儲存和保留到檔案中,以做之後的溫度變換記錄。
溫度的表示方法有許多種,較常見者為攝氏溫標、華氏溫標、及絕對溫標。攝氏溫標單位為℃,冰點為 0℃,沸點為 100℃,此種表示法為目前最常被使用的,且亦為公制之溫度單位;華氏溫標亦常見於溫度計標示,其單位為℉,冰點為 32℉,沸點為 212℉,兩者間相差 180℉;國際單位系統 (International System of Units, SI) 之溫度單位為凱氏溫標 (Kelvin, K) ,屬於熱力學之溫度單位,故並沒有度的單位,在凱氏溫標裡,冰點為 273.15K ,沸點為 373.15K ,兩點之差與攝氏單位類似為 100.00K ,因此 1K 等於 1℃。凱氏溫標之 0K稱為絕對零度,該點若換算為攝氏溫度為- 273.15℃。以下將各溫標間之數學轉換關係簡單列出,而以下內容均以攝氏溫標作為單位:
℃= (℉- 32)×5 / 9 ℉= 9 / 5 ×℃+ 32 K=℃+ 273.15
Raspberry Pi 樹苺派 - 溫度硬體線路
LM35 溫度感應器的外型
Raspberry Pi 樹苺派 - 讀取溫度
#!/usr/bin/env python# author: Powen Ko import time, RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)GPIO.setup(7, GPIO.IN)GPIO.setup(11, GPIO.IN)GPIO.setup(12, GPIO.IN)GPIO.setup(13, GPIO.IN)GPIO.setup(15, GPIO.IN)GPIO.setup(16, GPIO.IN)GPIO.setup(18, GPIO.IN)GPIO.setup(22, GPIO.IN)while True: a0 = GPIO.input(7) a1 = GPIO.input(11) a2 = GPIO.input(12) a3 = GPIO.input(13) a4 = GPIO.input(15) a5 = GPIO.input(16) a6 = GPIO.input(18) a7 = GPIO.input(22) total=a0+(a1*2)+(a2*4)+(a3*8)+(a4*16)+(a5*32)+(a6*64)+(a7*128) temp=total*(5*1000/256)/10; print a7,a6,a5,a4,a3,a2,a1,a0,"[",total,"]","[C=",temp,"]" time.sleep(0.1)
RaspberryPi_Temp.mov
Linux 定時執行程式
$ mkdir code$ cd code$ sudo nano ./job.sh
date >>/home/pi/code/1.txt
$ sudo chmod 755 job.sh
$ sudo crontab -e
*/1 * * * * /home/pi/code/job.sh
RaspberryPi_CornTab.mov
Raspberry Pi 樹苺派 - 讀取溫度
#!/usr/bin/env python# author: Powen Ko import time, RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)GPIO.setup(7, GPIO.IN)GPIO.setup(11, GPIO.IN)GPIO.setup(12, GPIO.IN)GPIO.setup(13, GPIO.IN)GPIO.setup(15, GPIO.IN)GPIO.setup(16, GPIO.IN)GPIO.setup(18, GPIO.IN)GPIO.setup(22, GPIO.IN)while True: a0 = GPIO.input(7) a1 = GPIO.input(11) a2 = GPIO.input(12) a3 = GPIO.input(13) a4 = GPIO.input(15) a5 = GPIO.input(16) a6 = GPIO.input(18) a7 = GPIO.input(22) total=a0+(a1*2)+(a2*4)+(a3*8)+(a4*16)+(a5*32)+(a6*64)+(a7*128) temp=total*(5*1000/256)/10; print a7,a6,a5,a4,a3,a2,a1,a0,"[",total,"]","[C=",temp,"]" time.sleep(0.1)
RaspberryPi_Temp.mov
物聯網 -把資料上傳到網路
#!/usr/bin/env python# author: Powen Ko import time, RPi.GPIO as GPIOimport urllib
def fetch_thing(url, params, method): # 傳遞資料到網路上的函數 params = urllib.urlencode(params) if method=='POST': f = urllib.urlopen(url, params) else: f = urllib.urlopen(url+'?'+params) return (f.read(), f.code)
GPIO.setmode(GPIO.BOARD) # 設定樹苺派的 GPIO 接腳動作 ….. # 省略 total=a0+(a1*2)+(a2*4)+(a3*8)+(a4*16)+(a5*32)+(a6*64)+(a7*128)temp=total*5*1000/256/10;print a7,a6,a5,a4,a3,a2,a1,a0,"[",total,"]","[C=",temp,"]"content, response_code = fetch_thing( 'http://127.0.0.1/settemp.php', {'id': 1, 'temp': temp}, 'GET' )
RaspberryPi_Temperature_URL.mov
物聯網 - 資料庫 CREATE TABLE temp(datetime DATETIME NOT NULL, temp FLOAT NOT null , userid INT NOT null );
物聯網 -寫入資料庫<?php$con=mysqli_connect("localhost","root","raspberry","raspberryDB");if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error();}
$now1= date('Ymdhis');$id = $_GET['id'];$temp = $_GET['temp'];mysqli_query($con,"INSERT INTO temp (datetime,temp,userid) VALUES ($now1,$temp,$id)");
mysqli_close($con); echo "powenko.com get it".", date time=".$now.", temp=".$temp." id=".$id;?>
RaspberryPi_Temperature_PHP_InsertDB.mov
http://192.168.0.91/settemp.php?id=1&temp=31
物聯網 -透過網頁顯示資料<?php$con=mysqli_connect("localhost","root","raspberry","raspberryDB");if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error();}$result = mysqli_query($con,"SELECT * FROM temp");
echo "<table border='1'><tr><th>Date Time</th><th>Temperature</th><th>user ID </></tr>";while($row = mysqli_fetch_array($result)) { echo "<tr>"; echo "<td>" . $row['datetime'] . "</td>"; echo "<td>" . $row['temp'] . "</td>"; echo "<td>" . $row['userid'] . "</td>"; echo "</tr>";}echo "</table>";mysqli_close($con);?>
RaspberryPi_showDB1.mov
物聯網 -透過網頁顯示資料<!doctype html><html> <script src="Chart.js-master/Chart.js"></script> <body> <div style="width: 50%"> <canvas id="canvas" height="450" width="800"></canvas> </div><?php$con=mysqli_connect("localhost","root","raspberry","raspberryDB");$result = mysqli_query($con,"SELECT * FROM temp");...while($row = mysqli_fetch_array($result)){ .. $Lables=$Lables.'"'. $row['datetime'].'",'; $temps=$temps.'"'. $row['temp'].'",';}mysqli_close($con);?><script>var barChartData = { labels : [<?php echo $Lables; ?>], datasets : [ { fillColor : "rgba(20,20,20,0.5)", strokeColor : "rgba(220,220,220,0.8)", highlightFill: "rgba(220,220,220,0.75)", highlightStroke: "rgba(220,220,220,1)", data : [<?php echo $temps; ?> ] } ] } window.onload = function(){ var ctx = document.getElementById("canvas").getContext("2d"); window.myBar = new Chart(ctx).Bar(barChartData, { responsive : true }); } </script> </body></html>
RaspberryPi_showDB2_chart.mov
物聯網 - 定時收集溫度資料content, response_code = fetch_thing( 'http://192.168.0.91/settemp.php/', {'id': 1, 'temp': temp}, 'GET' )
$ sudo nano ./job.sh
sudo python /home/pi/code/temp_url.py
RaspberryPi_showDB1.mov
物聯網 -成果
物聯網 - 手機上查閱資料
RaspberryPi_Temp_Final.mov
Thank you!Q&A