手把手教你用單片機或arduino玩轉物聯網_第1頁
手把手教你用單片機或arduino玩轉物聯網_第2頁
手把手教你用單片機或arduino玩轉物聯網_第3頁
手把手教你用單片機或arduino玩轉物聯網_第4頁
手把手教你用單片機或arduino玩轉物聯網_第5頁
已閱讀5頁,還剩20頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、手把手教你用單片機或arduino玩轉物聯網教程分為 3 篇1、物聯網公共服務平臺介紹篇主要內容是介紹物聯網基本概念,組成,還有物聯網開放平臺的介紹,它的主要應 用領域,使用范圍,還有一些案例和國際上發展的趨勢。2、Yeelink 平臺篇主要介紹 Yeelink 平臺的設計理念,使用的開發工具,系統架構,能夠提供的服務, 如何注冊賬號,并進行測試性的嘗試。3、Yeelink 平臺動手篇A. 如何用 arduino+PC 工具實現光照傳感器數據上傳和顯示。B. 如何用 arduino+Ethernet shield 進行溫度數據的上傳和如何觸發 email 報警。第一章 物聯網公共服務平臺介紹物

2、聯網理念如今已經逐漸深入人心,并隨著傳感器技術,通信技術和互聯網技術的 發展逐漸觸及到社會的每一個角落,物聯網存在的意義在于,它徹底改變了人與人 創造的機器世界和周邊環境的交流方式,從此,人們能夠更自由,更簡單的獲取各 種各樣的信息,也更容易的與機器和進行交互,甚至是讓機器與機器(M2M)之間, 建立通信和對話的橋梁,讓機器更好的為人類服務。隨著物聯網主機進入大數據(Big Data)時代,通過對海量的傳感器數據進行存儲,并提取有價值的信息和形成模型, 對科研,城市管理,自然科學等方面研究,都有著重要的意義。一些大型公司所號 召的物聯網應用,如 IBM 的智慧星球,Google 的智能眼鏡,N

3、ASA 的星球皮膚等等 項目,都已經逐漸獲取了市場和人們的認可。那物聯網具體有哪些表現形式,他又能為人們提供哪些方面的好處呢?最典型的應 用,就是使用 RFID 或者二維碼標簽,對各種各樣的物體進行唯一性的標示,使得物 品從生產和銷售,回收流程中,能夠被自始至終的監控,譬如對農產品的產地進行 精確回溯,對生產機械的制造和運行進行監控,這樣除了能夠對產品的質量問題快 速定位外,還賦予了用戶增加更多的能力,比如遠程對機械的工作情況采集甚至控 制。一個典型意義的物聯網應用,一般要完成傳感器數據的采集,存儲,和數據的加工 和處理這三項工作,舉例來說,對于駕駛員,希望獲取去目的地的路途上的路況, 為了完

4、成這個目標,就需要有大量的交通流量傳感器對幾個可能路線上的車流和天 氣狀況進行實時的采集,并存儲到集中的路況處理服務器,應用在服務器上通過適 當的算法,從而得出大概的到達時間, 并將處理的結果展示給駕駛員。所以,我們 能得出大概的系統架構設計可以分為如下三部分:1.傳感器硬件和接入互聯網的通信網關(負責將傳感器數據采集起來,發送到互聯網服務器)。2. 高性能的數據接入服務器和海量存儲。3. 特定應用,處理結果展現服務。從物聯網的應用形態中,我們能看出,針對具體應用的不同,我們關心的傳感器數 據是各有不同的,譬如,對安防應用來說,我們希望能夠讀取到家庭里布置的門磁, 紅外燈傳感器的數據,而對于海

5、洋研究來說,就希望能夠讀取到特定海域的氣候信 息,對制造風電的朋友,則希望能夠獲取設備的工作狀態,所以,針對不同的業務 類型,傳感器的需求可謂是千差萬別,而數據上傳的手段,根據對費用,便利程度 的要求不同,有 GPRS,wifi,網線,工業總線等等多種選擇,差別的比較大。在我們成功采集到傳感器數據后,需要解決的另外一個問題就是傳感器數據的存儲, 幾乎任何一個典型的物聯網應用,都需要處理大量的數據,這對服務器的設計提出 了相當高的要求,第一,需要能夠同時承載數以萬計,乃至數十萬的同步網絡數據 傳輸,就是首先要把這些數據收好;第二能夠將這些海量級的數據,以一定的規則 存儲好,在存的同時,還要考慮和

6、解決數據取回的問題,舉例說,500 個傳感器, 以 10 秒一條的速度上數據,在 1 年能夠達到上億條的數據記錄,這時候,如何實現 數據的快速查詢和取回就變得極具挑戰性,除此之外,服務器還需要考慮解決安全 性,可維護性,不間斷的服務能力等多種問題。數據的取回和展示也是一個非常關鍵的問題,隨著移動互聯網的興起,人們已經不 滿足僅僅從 web 瀏覽器去獲取數據,更多的希望能從智能手機,平板電腦等媒介, 便利的獲取信息,除了傳感器數據給人看之外,物聯網的傳感器數據還可以為遠程 的機器或者設備直接獲取,并按照既定規則直接執行相應的動作,譬如大型養雞場, 根據雞籠的文檔變化,自動調節恒溫系統;辦公大樓根

7、據大量光照傳感器的讀數和 感知各個樓層的人數,自動調整燈光系統的水平,這些都是典型的機器直接使用傳 感器數據的例子。從上面的介紹我們能看出,盡管存在著形形色色的物聯網應用,但是它們都需要有 一個基于互聯網的平臺加以支撐,而這個平臺的穩定性,可靠性,易用性,對該物 聯網項目的成功實施,有著非常關鍵的作用,所以,類如 IBM,CISCO,HP 等 IT 基 礎設施和解決方案提供商,包括國內的一些科技行業巨頭和科研院所,都提出了各 種各樣的平臺方案,利用云計算和云存儲的理念,解決上述的提到的服務共性問題; 但是遺憾的是,到目前為止,這些方案和解決思路都是封閉的,是為了解決特定問 題營運而生的,他們并

8、未向社會開放使用,好比天上的神仙,看起來很漂亮,但是 百姓們卻除了膜拜無事可做。那么,除了國際巨頭之外,存不存在這樣的公司,他們自己完成物聯網服務平臺的 主要基礎功能開發,然后開放接口,為公眾,特別是具有一定電子或軟件知識的愛 好者或者中小企業服務呢?事實上,隨著世界上物聯網理念的逐漸普及和深入人心, 為人群重大的草根階層量身設計的物聯網公共服務平臺已經逐漸出現,幾個國際上 規模比較大的平臺有 Scinan,Arrayent, COSM/Pachube 等,國其中 cosm 是目前世 界上用戶量最大的開放物聯網平臺,他提供了一系列的數據上傳手段,讓每個人都 能通過簡單的開源硬件或者單片機,實現

9、傳感器數據的上傳和存儲,還提供了一系列的數據展現方式,比如 dashboard,用來按時間軸多個傳感器數據到一個同一個平 臺上(圖一),另外,通過和視頻識別技術和增強現實技術,移動應用的結合,還能 夠使用 android 手機對傳感器設備進行識別,并自動將獲取的傳感器數據疊加到手 機顯示層上(圖二),是不是很神奇呢?圖一:COSM 將多個傳感器的歷史數據反映到通一個 WEB 數據面板上圖二:增強現實(AR)技術講傳感器數據通過 3D 投影實時疊加到手機屏幕國內的 平臺,是目前國內第一家對公眾開放的物聯網公共服務平臺,目 標是服務中國的物聯網愛好者,使得中小型的企業和電子愛好者們能夠非常簡單的

10、使用物聯網平臺,下面,我們將詳細的介紹一下 yeelink 平臺和如何使用它來完成您 的夢想。第二章 Yeelink 平臺介紹Yeelink 平臺的設計目的,就是要成為物聯網世界的開放服務提供商,完成對傳感器 數據的接入管理,數據存儲,以及將數據隨時顯示給客戶。為了解決上文中提到的物聯網服務器所必須解決的幾個關鍵問題,yeelink 開放和運 維團隊做了大量的工作,來保證可靠,安全,高質量的提供物聯網公共服務,下面,先從技術層面上,來分析一下為何 Yeelink 具備這種提供高性能物聯網服務的能力。首先 Yeelink 系統在設計之初,就充分考慮了超大并發接入的可能性。在設計接入服 務系統的時

11、候,參照新浪微博的標準(峰值 3000 條/秒,目前 Cosm 的平均值是 300 條/秒),Yeelink 基于團隊多年在開發和維護電信級服務器的經驗,進行大量的設計 優化,那就是,做到平臺與應用服務的隔離,一個 http 的 post 服務,在經過接入網 關的處理后,交給專門的服務模塊進行處理,而一個完整的傳感器數據存儲操作, 由運行在多個機器上的服務組件協同處理,有效的達到了負載上的均衡,而且很容 易通過增加機器擴充容量,在理念的實現上,Yeelink 采用了 Node.js 這一比較流行 的開發語言用來提供傳感器接入服務,隨著雅虎,微軟,Linkedin,和國內的淘寶網 開始大量的采用

12、該技術開發項目,已經證明了該技術在處理高并發,實時性和開發 速度上的卓越優勢,同時由于 Yeelink 的前段同樣大量使用 Javascript,所以在調試時 服務器系統和前段可以以同一種語言調試,大大提高了解決問題的速度。數據接入以后,在解決數據的存儲方面,Yeelink 使用了 Hadoop 這個分布式處理框 架有針對性的搭建了一個高并發,海量存儲,高可擴展性的云存儲服務中心,針對 傳感器數據在時間上具有連續性,數據插入時速度相對恒定,數據需要快速取回(展 示)等特點,Yeelink 做出大量的優化工作,使得系統能夠非常穩定健壯的提供數據 存儲的優質服務。在對用戶的數據獲取手段的支持上,我

13、們使用了基于 RESTful 架構的開放 API 體系, 通過統一的 web service,使得用戶在取回和管理自己的傳感器數據時,界面非常友 好和簡單,可以使用各種語言實現客戶端系統,這樣很很方便在當前的移動智能應 用流行的環境下,提供個性化服務,不管是在 android,iOS 等操作系統上,使用 Yeelink 提供的界面組件 API,可以非??焖俚拇罱ㄆ饘儆谧约邯氁粺o二的 APP,加速您想法 的實現速度,特有的 win7 桌面 Widget,和論壇插件,博客插件,能夠方便的將您 的傳感器數據,共享到社交網絡。另外,除了完成數據存儲工作外,通過 Yeelink 的數據事件引擎,傳感器數

14、據不再是 冰冷的節點,我們考慮到您的需求,定制了大量的規則觸發應用,譬如在傳感器達 到閾值的時候,自動觸發類似電信 API 如短消息,語言電話,彩信等應用,也能按 照您所定制的數據類型,向指定的其他設備轉發控制信息,從而方便的實現 M2M 控制,更讓人興奮的是,實現這一切,無需任何編程,通過點擊網頁的按鈕和填寫 資料,就能輕松實現。了解了這么多,是不是想親自動手試試 Yeelink 到底有多好玩呢?下面,我們就試試 如何通過網頁模擬傳感器數據來對 yeelink 平臺進行測試吧!是的,如果你能猜到的 話,整個測試過程,無需編寫任何代碼,也不使用任何硬件系統。下面,我就簡單介紹一下,如何使用 w

15、eb 瀏覽器進行開放平臺的使用測試: 第一步:首先需要注冊用戶注冊賬號后,注意填寫電子郵件部分,因為,您注冊后,會自動收到一封激活郵件,賬號和 API 只有在激活以后才能正常使用。(沒收到?可能需要去信箱的垃圾郵件那邊 翻翻看)第二步:通過點擊郵箱內的連接,完成激活您的賬號,這時就可以正常使用 API 了。 行,注冊就是這么簡單就完成了。第三步:這時候,可以打開首頁的“登陸”按鈕,就能看到自己的賬號信息了。在出現用戶頁面后,填寫用戶和密碼即可完成登陸登陸之后,控制面板上出現了“用戶中心”,可以通過這個用戶中心來管理和查看 自己的物聯網設備啦!在 Yeelink 平臺上,所有的用戶設備被分為兩類

16、“設備”和“傳感器”。 “設備”可以看做是一個傳感器的集合,他是一個具備處理能力和互聯網接入能力的網關設備,您的傳感器數據,就是通過設備來接入物聯網的,在這里您可以將設備理解成您的 arduino 或者單片機板。 “傳感器”可以看做是最終的節點,他代表了一種的采集數據內容,傳感器可以是和設備在一個單片機系統上,也可以是無線或有線的形式和單片機相連。 點擊“用戶中心”后,可以首先增加一個物聯網設備:通過點擊“我的設備”>“增加新設備”:填好以后,直接保存,該設備就已經準備好進行上傳數據和使用了。 增加完畢新設備后,還需要再添置一個傳感器(因為一個設備可同時支持多個傳感器),而傳感器獲取的數

17、據則是我們真正關心的東西了。添加完傳感器后,系統會自動生成一個圖標用來描述收集的數據以后,這個傳感器采集的數據,都會以圖標的形式,展現在這里了。 要完成數據的上傳,要進行如下操作:從上圖中,能看到“我的賬戶設置”里面,有屬于您的 API KEY,這個 API key 能夠 是您的數據和其他人區分出來,務必請安全保存不要泄露。數據的上傳下面介紹如何上傳數據:從這個圖中,我們能看到,這個傳感器的 Device=8 即設備號等于 8, Sensor = 12 即傳感器號等于 12, 這也是該傳感器在服務器系統的唯一標示,我們上傳數據的時候, 也是依靠這兩個 ID 和 API KEY 進行數據的有效性

18、驗證。根據 API 手冊,就需要發送 POST 到 URL按照協議來說,需要發送如下數據到服務器:POST BODY 里面需要增加如下數據:“value”:340這樣,就能把該傳感器的數據發送到服務器了,系統會自動拿當前時間作為標記,進行 存儲。如果你是使用 Curl 進行測試,則需要這樣操作: 命令行下面敲入:curl request POST -data “value”:349 -header U-ApiKey: 您申請的 API_KEY” -verbose 默認服務器將以服務器的當前時間對該數據進行存儲,如果您對時間有特別的要求,可 以發送帶 timestamp 的數據給服務器,如果沒有

19、,則服務器會自動分配一個時間,格式如圖 中所示,點擊 SEND 按鈕發送即可發送到 Yeelink 了。如果多發送幾個點,回到傳感器的頁面,按 F5 鍵進行刷新,就能看到繪圖空間已經幫您將 數據點從數據庫取出并繪制成一個 Flash 的圖片了。怎么樣,是不是很簡單呢?下面我們談一下如何將數據從數據庫中取回數據的取回用如下的方法取回數據比如想取回我們剛才插入的所有數據,可以發送 GET 到如下的 URL: 服務器會默認返回最新的一條數據記錄""timestamp":1337158055,"value":243"如果是希望返回某個時間段的

20、數據,則可以根據 API 文檔,完成獲取數據的功能了。如何進行觸發規則的設定:僅僅把數據發送到服務器,從 web 頁面上看到圖片,是不是對你來說有點簡單啦? 想要更多,沒問題,那就使用 Yeelink 強大的事件觸發引擎吧!事件觸發引擎,被設計用來當某個傳感器數據達到預設閾值的時候,觸發由用戶指 定的動作,譬如說,溫度傳感器達到 50 度的時候,發送短信給你的手機號;PM2.5傳感器達到 100 的時候,自動給驅動窗戶的電機發送控制包關閉窗戶,顏色傳感器檢測到熱水器燒水開的綠燈亮后,發布微博到所有實驗室同學微博上等等。這些有 趣的點子在 Yeelink 平臺上,都非常簡單。下面就舉例說明,如何

21、設置一個簡單的 Email 觸發器吧。首先,我們假定這樣一個場景,假定要增加一個觸發,讓傳感器數據達到 600 的時 候,觸發一個郵件發送到你的信箱,需要如下操作1. 點擊設備的名字2. 點擊綠色的增加觸發按鈕,然后添加一個觸發動作即可3. 這里我們添加一個,當光線傳感器的流明達到 600 的時候,自動發送電子郵件給自己就可以了,就是這么簡單,注意默認 15 分鐘內,郵件只會觸發一次哦。 等你配置好后,就可以迅速的用上次提到的網頁測試工具試試吧!更多的通知 方式,如短消息,語言電話,微博通知,還有其他的有趣功能會在后面逐一放 出,敬請期待吧。第三章:Yeelink 動手做上面,我們都是在討論

22、Yeelink 平臺的功能和如何使用網頁來簡單的測試 Yeelink,下 面就讓我們用電子愛好者都比較熟悉的開源硬件 Arduino,或者是你手邊上的單片機, 來進行實際的實驗吧。第一個實驗 arduino/單片機+ PC 實現光照傳感器數據上傳和顯示實現首先從一塊 arduino 板和一種傳感器,通過電腦完成數據的上傳,這個最簡單, 也適應于其他類似的單片機用戶,只要會使用串口操作,就能夠完成這個實驗。需要硬件:1.任一支持串口輸出的單片機(包括 arduino)2.任一傳感器需要軟件:串口轉 http 軟件(yeelink 開發并開放源碼目前僅提供 windows 版本) Serial2Y

23、eelink.exe)實驗流程:1. 在你的硬件上,將讀取到的傳感器數據作為字符串獨立一行打印出來,在行首加上”yeelink:”. 比如在 Arduino上使用Serial.print("yeelink:");Serial.println(value);2. 運行 yeelink 串口工具,選擇與你硬件連接的串口和波特率,當然,還少不了要用線纜連起來:)3. 登錄 網站,進入用戶中心,在 我的設備 >> 設備管理 中找到即將要上傳的數據的傳感器,如果 你還沒有添加,這里有上一章的 Yeelink 平臺使用手冊添加。將其中的 URL 復制到工具的上傳地址一欄。另

24、外,從帳戶 >> 我的帳戶設置 中找到 API KEY 一欄。將其復制到工具的 API-KEY 中,然后點擊連接就可以 打通串口到 Yeelink 服務器的通道了。至此,你的工作已經完成了,程序會打印出 log 供你分析出現的問題。如果沒有異常,你應該會見到如前面主界 面所示的結果。這時候,當你的硬件往串口上寫入數據,本工具就會檢測到,并提取出來,然后上傳到 yeelink 上你指定的傳感器地址。結束語程序上傳的數據會在網頁上繪制出曲線圖,當你看到這樣的數據圖是是不是很激動呢。原本很復雜的過程現在變 得如此簡單,沒錯,就是如此簡單。還猶豫什么,馬上試一試。第二個實驗 arduino

25、+ Ethernet shield 進行光強數據上傳和觸發 Email 報警。硬件需求 Arduino 主板 Ethernet 板BH1750 光強傳感器模塊(你可以替換成自己的傳感器)硬件連接:電路Ethernet 板和主板的插接略去。 傳感器插接線:VCC-5v GND-GNDSCL-SCL(analog pin 5)SDA-SDA(analog pin 4) ADD-NC實驗過程,在連接好線路以后,下一步,就是講 arduino 連接到電腦上,并將下面我們給出的 示例程序下載到 arduino 上,即可運行了。程序的代碼如下:*/Yeelink 測試程序 將光照傳感器的數據采集,并通過以

26、太網卡,發送到 Yeelink 服務器上*/#include <SPI.h>#include <Ethernet.h>#include <Wire.h>#include <math.h>int BH1750address = 0x23;byte buff2;/ for yeelink api#define APIKEY"9cdf51696fa9ddfacdf819033a5f2f63" / 這里用您的 yeelink API key 替換#define DEVICEID4 / 這就是您 yeelink 網站上的設備號,請參見

27、Yeelink 平臺手冊獲取#define SENSORID7 / 這個更換成您的傳感器號碼,如何取得請參閱 Yeelinkreplace your sensor ID/ assign a MAC address for the ethernet controller.byte mac = 0x00, 0x1D, 0x72, 0x82, 0x35, 0x9D;/ initialize the library instance:EthernetClient client;/char server = ""/ yeelink API 的服務器名稱IPAddress server

28、(202,136,60,231);/ 這里填的是 yeelink 平臺的入口服務器 IPunsigned long lastConnectionTime = 0;/ 上次連接到服務器的時間,毫秒boolean lastConnected = false;/ 上次連接狀態const unsigned long postingInterval = 30*1000; / 默認發送間隔 30 秒void setup() Wire.begin();/ start serial port:Serial.begin(57600);/ start the Ethernet connection with DH

29、CP:if (Ethernet.begin(mac) = 0) Serial.println("Failed to configure Ethernet using DHCP");for(;);else Serial.println("Ethernet configuration OK");void loop() / if there's incoming data from the net connection./ send it out the serial port. This is for debugging/ purposes only

30、:if (client.available() char c = client.read();Serial.print(c);/ if there's no net connection, but there was one last time/ through the loop, then stop the client:if (!client.connected() && lastConnected) Serial.println();Serial.println("disconnecting.");client.stop();/ if you&

31、#39;re not connected, and ten seconds have passed since/ your last connection, then connect again and send data:if(!client.connected() && (millis() - lastConnectionTime > postingInterval) / read sensor data, replace with your codeint sensorReading = readLightSensor();/send data to servers

32、endData(sensorReading);/ store the state of the connection for next time through/ the loop:lastConnected = client.connected();/ this method makes a HTTP connection to the server:void sendData(int thisData) / if there's a successful connection:if (client.connect(server, 80) Serial.println("c

33、onnecting.");/ send the HTTP PUT request:client.print("POST /v1.0/device/");client.print(DEVICEID);client.print("/sensor/");client.print(SENSORID);client.print("/datapoints");client.println(" HTTP/1.1");client.println("Host: ");client.print(&quo

34、t;Accept: *");client.print("/");client.println("*");client.print("U-ApiKey: ");client.println(APIKEY);client.print("Content-Length: ");/ calculate the length of the sensor reading in bytes:/ 8 bytes for "value": + number of digits of the data:in

35、t thisLength = 10 + getLength(thisData);client.println(thisLength);client.println("Content-Type: application/x-www-form-urlencoded");client.println("Connection: close");client.println();/ here's the actual content of the PUT request:client.print(""value":");client.print(thisData);client.println("");else / if you couldn't make a connection:Serial.println("connection failed");Serial.println();Serial.println("disconnect

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論