在Arduino
I2C Wire.h Multi-Masters功能實作中以Arduino+Gravitech
7-SEG Shield組合成為一個I2C Slave Device,可以提供其它的Arduino使用I2C Master方式控制LED的顯示,藉以驗證Wire.h具備多重I2C Master的處理功能。
而原先的構想是任何可以進行I2C通訊的裝置,應該都可以控制這個I2C Slave Device,包含NXT在內,而事實上NXT對Arduino的I2C通訊也經由實際測試,運作正常。
不過經由多次的測試,NXT始終無法如同Arduino一般能夠正常的存取這個I2C Salve
Device,而比較之前的測試Case,唯一的差別就在於Gravitech 7-SEG
Shield擴充板所內建對於SDA及SCL的4.7k ohm pull-up,實在是百思不解問題真正所在。
Arduino Network Device建構
(Photo)
而為了讓NXT可以使用Gravitech 7-SEG Shield的功能,所以改造原來的I2C Slave
Device成為Network Device。
不再使用I2C而改為Ethernet TCP/IP方式,:
(1). 以Arduino UNO + Gravitech 7-SEG Shield +
Arduino Ethernet
Shield組合成為 Telnet Server。
(2). 另外使用 Arduino UNO + Arduino Ethernet Shield組合成為Telnet Client。
至於NXT則透過I2C傳送指令與資料給Telnet Client,由Client端UNO組合成封包之後經由網路線傳送至Telnet Server接收,而Server端的UNO解析之後再以I2C控制Gravitech 7-SEG Shield執行指定的功能,有點複雜但可玩性十足。
(架構圖)
(Demo Video)
NXT對於Network Device控制流程
整體架構共分成三個部份:
(1). NXT to Telnet Client:
將Telnet Client作為I2C Slave Device,規劃相關功能對應的Register Address及Data需求:
0x00
- 回傳裝置資訊,這是用來測試I2C通訊功能是否正常。
0x41+三色LED顯示指令(R/G/B) -
控制Gravitech 7-SEG
Shield顯示指定顏色。
0x42+英數字串 - 控制Gravitech 7-SEG
Shield將字串顯示在七段式LED。
0x43+整數值字串 - 控制Gravitech 7-SEG
Shield將數字顯示在七段式LED。
因此,NXT即將前述的指令以LowspeedWrite()傳送給Client端的UNO,而對於UNO即會觸發onReceive()的handler進行接收。
(2). Telnet Client to Server:
Client端UNO負責將接收到的NXT
request解析並製作成資料封包後,使用Ethernet.h library的功能,透過Arduino Ethernet Shield以網路線傳送至Server端,而Server端的UNO同樣也是以Ethernet.h的功能接收封包資料。
(3). Telnet Server to Gravitech 7-SEG Shield
Server端經解析來自Client端的資料之後,即分別使用Digital I/O控制三色LED的顏色顯示以及以I2C方式控制七段式LED顯示字串資料。
後記
(1). Ethernet.h雖然區分成server與client兩個classes的功能,但不是限制只能在個別角色中才能使用的methods,尤其在server端反而會用到很多Client
class的功能來控制資料的接收,這一點是官方說明文件比較陽春的地方。
(2). 除了本case所使用的telnet(port 23)協定之外,外部很常見的http協定(port 80)就可以讓NXT結合Web server應用透過browser來控制,這是另外一個有趣的應用領域。
範例程式
(1) NXT 端程式:NXT_7SEG_DEMO.nxc
(2) Telnet Client端程式:TelnetClient_I2CSlave.pde
(3) Telnet Server端程式:TelnetServer_7SEGLED.pde
- 留言者: ㄚ仁
- Email: pciahb@yahoo.com.tw
- 網址:
- 日期: 2012-07-14 01:14:22
[版主回覆07/14/2012 12:30:59]Google的IP常常在變, 所以先使用命令提示字元去ping www.google.com, 就可以解析到正確的IP.
我剛才ping 到的IP是 74.125.31.147
沒有留言:
張貼留言