樹莓派透過無線傳輸協定
傳送資料
日期:2018/05/10
2
樹莓派之間要透過網路互相傳送訊息,必須先確定他們
分配到的IP是在同一個區域網路或者IP可以對外連線。
ATTENTION
3
晶片天線
(Wi-Fi和藍牙v4.1)
樹莓派上的兩種無線傳輸功能Wi-Fi和藍牙
Bluetooth Protocol Stack
4
樹莓派上的
藍牙模組
Connects upper protocol to
application (partial list)
Bluetooth serial port
User data
Connects host to module
Link management
Packet construction
Physical link
APPLICATION
RFCOMM
L2CAP
Link Manager
Baseband and Link Controller
Radio
Host Controller Interface
OBEX WAP TCS SDP
Two-Way
Voice
Data
Control
Host
Module
RFCOMM和L2CAP
• RFCOMM協定可以模擬 RS-232 序列埠,讓上層協定使用,使用
RS-232介面的軟體都可以在RFCOMM 之上進行資料傳輸。
• L2CAP可以用多工的方式傳送多個不同的上層協定的資料,使不
同協定共享同一份資料,並負責當上層送來的封包過大時,將封
包切成適當的大小往下層送,好讓下層可以處理,反之亦然。
5
樹莓派之間透過藍牙傳輸資料
6
7
點這個圖示左鍵
8
9
搜尋藍牙裝置
10
藍牙-Server端
11
藍牙-Client端
樹莓派之間透過Wi-Fi傳輸資料
12
TCP/IP通訊模組
13
• TCP/IP它是一種網路協定,它定義了點對點如何的傳輸,如何將
資料封裝、定址、傳輸、路由以及在目的地如何接受,全部都加
以標準化,它基本上可以分為應用層、傳輸層、網路互連層與網
路介面層
TCP/IP 各種應用協定 功能
應用層 HTTP、FTP、SMTP、POP3、NFS、SSH 應用服務
傳送層 TCP、UDP 傳輸服務
網路層 IP、ICMP 連線服務
鏈結層 Ethernet、Token Ring、Modem、ATM、Serial 實體接線
什麼是Socket ?
• Socket是在應用層與傳輸層之間的一個抽象層,它是一組接口,
隱藏了底層的複雜操作,同時你也可以把他想成一個雙向的
endpoint(Client和Server),可以給人連線或連線它人,而且由於它
有綁定一個特定的port所以這也代表傳輸層它們那邊可以用它來
定位應用程式。
• 從網路的角度來看,socket就是通訊連結的端點;從程式設計者
的角度來看,socket提供了一個良好的介面,使程式設計者不需
知道下層網路協定運作的細節便可以撰寫網路通訊程式。
14
15
Client A
(192.168.100.1:1101)
Server B
(192.168.100.2:80)
1
2
3
建
立
連
線
傳
輸
資
料
關
閉
連
線
TCP資料傳輸三階段 TCP Socket資料傳輸
Client A
(192.168.100.1:1101)
Server B
(192.168.100.2:80)
listen()
accept()
connect()
read()
write()
read() write()
close() close()
連線請求
連線建立
傳輸資料
傳輸資料
斷線請求
斷線確定
16
Wi-Fi-Server端
TCP UDP Terminal
輸入樹莓派的IP
輸入訊息
17
樹莓派之間透過MQTT
傳輸資料
18
什麼是MQTT ?
• MQTT is a machine-to-machine (M2M)/"Internet of Things"
connectivity protocol. It was designed as an extremely lightweight
publish/subscribe messaging transport.
19
鏈結層
圖片來源:https://swf.com.tw/?p=1002
封包格式
20
HTTP封包格式 MQTT封包格式
圖片來源:https://swf.com.tw/?p=1002
MQTT是一種「發布∕訂閱」機制的訊息傳輸協定
• Publisher: Sends messages.
• Broker: Forwards messages to registered subscribers.
• Subscriber: Receives messages through the broker.
21
MQTT 訊息傳遞架構
Broker
Client
Server
Client
Publisher
Publisher
Publisher
Topic
Subscriber
Subscriber
Subscriber
Topic
22
本MQTT實作範例為了方便操作將publisher和broker的
角色寫在同一個python檔,在實際的應用中publisher、
broker和subscriber是三個獨立的裝置。
ATTENTION
23
24
25
Publisher和Subscriber分開執行
課後實作基本題:訊息推播
• 目的:練習物聯網的MQTT無線傳輸技術。
• 需求:模擬商品推播功能,以PIR偵測是否有人,如果有人就進
行商品推播。
• 敘述:
26
MQTT
樹莓派A 樹莓派B
拿手機的人
時間軸 時間軸 時間軸
PIR偵測到人
Socket
課後實作進階題:同步控制
• 設定:用兩台樹莓派,可以一人或兩人一組
完成進階題。
• 目的:練習物聯網的無線傳輸技術。
• 無線傳輸方式:無線網路或藍牙。
• 敘述:用智慧型手機透過Wi-Fi或藍牙,同時
傳送指令使LED燈發亮。
27
附註
28
查看MAC位址
29
安裝python藍牙函式庫
30
1
2 執行sudo python3 -m pip install pybluez
31
執行sudo apt-get install bluetooth bluez blueman
安裝python MQTT套件
32
33
34
安裝方式一
安裝方式二
App下載
• Android系統
• TCP/UDP Terminal
• iOS系統
• Telnet Client Terminal
35
MQTT特性
• 了解了Publish/Subscribe的機制之後,讓我們來看看MQTT有哪些特性:Publish/Subscribe的
訊息傳送模式,來提供一對多的訊息分配。
• 使用TCP/IP來提供基本的網路連結。
• 三種訊息傳送服務的qualities:
• "At most once",最多一次,訊息遺失或是重複發送的狀況可能會發生;這種quality適合應用在環境感
測,不在意資料是否會遺失,因為下一次的資料取樣很快就會被published出來。
• "At least once",至少一次,這種quality保證訊息會送達,只是可能會發生重複發送訊息的狀況。
• "Exactly once",確定一次,確認訊息只會送到一次。這種quality適合用在計費系統,系統只要有重複
收到資料、或是資料遺失狀況發生,就會造成系統錯誤。
• 由於他的header固定長度為2byte,因此可以減少封包傳送時的額外負載,並減少所需的網
路頻寬。
• 當異常斷線發生時,會使用最後遺囑(Last Will and Testament)的機制,通知各個感興趣的
client。
36
無線網路-Client
import socket
host = '127.0.0.1'
mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
addr = (host,5555)
mysock.connect(addr)
try:
msg =b"nhi, This is connection from python network client n"
mysock.sendall(msg)
except socket.errno as e:
print ("This is Socket Error!", e)
finally:
mysock.close()
37

2018 Week 11 Bluetooth and Wi-Fi