簡介
本篇文章中,讀者將學習有關雙向溝通:傳送訊息至另外一個micro:bit,並且使您的訊息得到回應。讀者也將學習Ping程式,什麼是Ping程式呢?它是一種常用的工具,被用來檢查電腦是否仍連結於網際網路。
本文中,將根據前一篇文章《探索micro:bit的奧妙:一對一》進一步學習,新概念包括:
- 雙向溝通的概念
- Ping程式
- 往返時間的概念
因此,讀者們將會需要下列配備:
- 兩個micro:bit
- 一個白板
- 白板筆/便利貼
- 一位隊友
背景
雙向溝通使兩台電腦間進行雙向溝通。
小知識:雙向溝通的定義
雙向溝通是一種溝通的模式,在這樣模式中,資料以雙向傳輸,但並非同時進行。
在前文《探索micro:bit的奧妙:一對一》,您的micro:bit扮演清楚的角色,不論是傳輸裝置或接收裝置。在雙向溝通中,兩個micro:bit中的任意一個皆可傳送或接收訊息。這樣,創造雙向通訊協定便成為可能。在這些通訊協定中,當一台電腦傳送訊息,這台電腦會等待其訊息的某種回應。
小知識:Ping程式
Ping程式是雙向通訊協定的範例。它被廣泛用於網際網路中,以測試一台連網的電腦是否啟動且正常連線。
Ping程式傳送Ping訊息,以測試電腦是否沒有問題。Ping程式期待Ping訊息被回應,例如,以一則Pong訊息回應。這正如同打乒乓球一般,只是在電腦間,透過網路傳輸。如果傳送裝置的Ping程式沒有收到回應,這便顯示接收裝置那一端出現問題。如果傳送裝置花費了很長時間,才收到Pong回應,亦代表了接收裝置那一端出現了問題。
所以,Ping程式便計算兩台電腦間的往返時間,以指出這些問題。
小知識:往返時間(Round-trip-time, RTT)
往返時間是指,一則訊息從傳送裝置抵達接收裝置,再返回傳送裝置,所花費的時間。
換句話說,當傳送裝置傳送Ping訊息,並且接收到Pong訊息,它會計算時間的不同
所以:
RTT= 傳送裝置收到Pong訊息的時間 減去 傳送裝置傳送Ping訊息的時間。
下方的圖二,顯示出Ping、Pong及往返時間的關係。
除了往返時間(RTT)外,Ping程式會報告相關的統計資訊。那麼,如何運用micro:bit,計算您的訊息的往返時間呢?讀者會需要用到「輸入(Input)」選單下的「更多(…More)」,當中的「運行時間(running time)」變數。
小知識:micro:bit的「運行時間(running time)」變數
運行時間變數,是用來記錄自micro:bit啟動或重啟,經過了多久的時間。而這個變數的計算單位是「毫秒」。
本文剩餘的內容,讀者們將使用「運行時間」變數,以計算往返時間。當您首次傳送訊息,並且也接收訊息時,以這個變數記錄時間會非常有用。
小提示:
記錄運行時間,意指設定一個變數等於現行的運行時間。讀者們會需要將「運行時間」變數,結合micro:bit JavaScript程式積木編輯器中,「變數(Variables)」選單下的「變數…設為…」程式積木。
來寫程式囉:Ping
這項活動最好兩個人一起進行。你們將一起替micro:bit撰寫程式,以運作Ping程式。為了完成這項活動,讀者們需要完成四項任務:
任務一:預備單播
描述:Ping程式在傳送的micro:bit及接收的micro:bit之間,使用單播運作。所以,如果不記得如何運作單播的話,請回顧一下《探索micro:bit的奧妙:一對一》。
指引:使用您在《探索micro:bit的奧妙:一對一》中,所撰寫的單播程式作為基礎。在這個程式中,決定哪一個micro:bit將傳送Pings,以及哪一個將以Pongs回應。根據您們的決定,設定位址的變數,設計您們的資料頭、Ping資料包及Pong資料包。
任務二:傳送一個Ping資料包
描述:傳送Ping的micro:bit,在它送出Ping資料包前記錄時間。然後,單播Ping資料包。
指引:使用「運行時間」變數,以記錄Ping的傳送時間。然後傳送Ping資料包至接收的micro:bit。
任務三:接收一個Ping資料包
描述:擔任接收裝置的micro:bit,以Pong回應接收到的Ping訊息。
指引:替作為接收裝置的micro:bit撰寫程式,當它收到一個Ping資料包,以單播Pong資料包回應。
任務四:收到一個Pong資料包,並且計算「往返時間」。
描述:當一個作為傳送裝置的micro:bit,收到一個Pong資料包,它便計算「往返時間」。
指引:替傳送裝置的micro:bit撰寫程式,以接收Pong資料包。當收到了Pong資料包,使用「運行時間」變數記錄時間。在您的micro:bit螢幕上,顯示出接收到的時刻和傳送時刻之間的不同。然後運作您的程式5次,並且寫下您在螢幕上看到的傳送時間,並且回答下面兩個問題:
-
最小和最大的往返時間各是多少?
-
平均往返時間為多少?
(特別感謝作者Cigdem Sengul與Anthony Kirby,以開放授權方式讓我們翻譯,特此致謝。本文僅為針對重點摘譯,若想進一步閱讀原文,請見此。)