# 簡單物聯網
到這時,我們算搭建了一個簡單的REST服務了。接著我們可以簡單的做一個最小的物聯網系統,將我們的單片機、MCU等等連上網。

考慮到如果我們只是單一連接各個節點,那么系統的結構圖,同下所示

下面的星形結構圖類似于我們在接下來所要構建的系統

一個用于控制真實電器的硬件實物圖

## 硬件通信
### 串口通信
Arduino與Raspberry Pi通過串口通信的方式實現通信,相互傳輸所需要的數據,Raspberry Pi將資源傳于互聯網上對應的接口,接口可以在互聯網上被訪問。Laravel框架構架于服務器之上,將Raspbery Pi獲取過來的數據存儲于MySQL數據,再以REST服務的方式共享數據,互聯網上的其他設備便可以通過網絡來訪問這些設備。Ajax用于將后臺的數據以不需要刷新的方式傳遞到網站前臺,通過HighCharts框架顯示給終端用戶。
#### Python
1.在Windows中的串口通常是`COM1`,`COM0`等等
~~~
ser=serial.Serial("COM0",9600)
~~~
2.Mac OS系統中位于/dev目錄下,名字類似于`tty.usbmodem1451`。
~~~
serial.Serial("/dev/tty.usbmodem1451",9600)
~~~
3.在Linux內核的系統中虛擬串口用的節點是ttyACM,位于/dev目錄下。
~~~
serial.Serial("/dev/ttyACM0",9600)
~~~
> 串行接口是一種可以將接受來自CPU的并行數據字符轉換為連續的串行數據流發送出去,同時可將接受的串行數據流轉換為并行的數據字符供給CPU的器件。一般完成這種功能 的電路,我們稱為串行接口電路。
便是打開這個設備,以9600的速率傳輸數據。
~~~
import json
import urllib2
import serial
import time
url="http://www.xianuniversity.com/athome/1"
while 1:
try:
date=urllib2.urlopen(url)
result=json.load(date)
status=result[0]["led1"]
ser=serial.Serial("/dev/ttyACM0",9600)
if status==1 :
ser.write("1")
elif status==0:
ser.write("0")
time.sleep(1)
except urllib2.URLError:
print "Bad URL or timeout"
~~~

系統還需要對上面的數據進行處理,只拿其中的結果

當改變led的狀態后,便可以得到下面的結果

#### Ruby
如果你用的是Ruby的話,可以嘗試使用`serialport`
安裝
~~~
sudo gem install serialport
~~~
代碼大致如下
~~~
require 'serialport'
sp = SerialPort.new "/dev/ACM0", 9600
sp.write "1"
~~~
注意: 根據相關的系統修改相關的代碼。
### 18.1.2 I2C通信
## 18.2 硬件
### 18.2.1 51單片機
> 51單片機是對所有兼容Intel 8031指令系統的單片機的統稱。該系列單片機的始祖是Intel的8031單片機,后來隨著Flash rom技術的發展,8031單片機取得了長足的進展,成為應用最廣泛的8位單片機之一,其代表型號是ATMEL公司的AT89系列,它廣泛應用于工業測控系統之中。
這里以51單片機為例的原因是,多數大學課程都是以51單片機為主。
### 18.2.2 Arduino
### 18.2.3 Raspberry Pi
對于搭載GNU/Linux系統的RPi來說,這活就比較輕松了。
### 18.2.4 ARM
> LwIP是Light Weight (輕型)IP協議,有無操作系統的支持都可以運行。LwIP實現的重點是在保持TCP協議主要功能的基礎上減少對RAM 的占用,它只需十幾KB的RAM和40K左右的ROM就可以運行,這使LwIP協議棧適合在低端的嵌入式系統中使用。
~~~
git clone git@gitorious.org:coap-lwip/coap-lwip.git
~~~
[TinyOS CoAP](http://tinyos.stanford.edu/tinyos-wiki/index.php/CoAP)
### 18.2.5 繼電器
> 繼電器(英文名稱:relay)是一種電控制器件,是當輸入量(激勵量)的變化達到規定要求時,在電氣輸出電路中使被控量發生預定的階躍變化的一種電器。它具有控制系統(又稱輸入回路)和被控制系統(又稱輸出回路)之間的互動關系。通常應用于自動化的控制電路中,它實際上是用小電流去控制大電流運作的一種“自動開關”。故在電路中起著自動調節、安全保護、轉換電路等作用。
## 18.3 協議間通訊
當我們有使用CoAP協議的A設備,以及HTTP協議的B設備。這時,就變成一個有意思的話題了。