2012-03-21

以瀏覽器控制Mindstorms NXT

若要以瀏覽器來控制NXT,會需要透過Web Server處理來自Client端的HTTP Request,主要是解析HTTP Header中對NXT的控制資訊。 而能使用瀏覽器的最大優點在於不限裝置,只要能支援TCP/IP,則無論是電腦蘋果(iOS)還是芒果(Windows Mobile7.5),都能用來控制NXT,而且只需要Arduino開發環境,也不需要XCodeVisual Studio,簡單又容易。
(All Devices)




運作架構
在本次的實作,以Arduino Ethernet於家用網路中架設Web Server
位於同一網段的裝置透過HTTP協定使用瀏覽器連線後,會下載有三個Submit ButtonsWeb Page
(Web Page)



每一個按鈕在HTMLform tag中皆定義有對應的控制NXT命令字元。
當按下其中任何一個按鈕,即會Submit出一個POST methodHTTP Request
POST HTTP1.1
...

ledEffect=K or F or H
Web Server接收之後,會解析在Header後面的傳送資料,
若有符合的命令,就會以Serial Port透過XBee傳送給NXT去執行。
NXT則是透過NXTBee由第四個Sensor PortRS485接收來自Arduino Web Server的命令。(運作架構)
Arduino Web Server
本次實作使用Arduino 1.0,新版本對於Ethernet.h>改善了一些功能。
詳細可以參考軟體更新資訊:Arduino Software Release NotesArduino 1.0 bringing improvements and changes其中比較實用的是在Stream Class增加了解析串流資料的功能,由於EthernetServerEthernetClient兩個Class都繼承了Stream Class
因此,對於解析HTTP Header就方便許多。程式結構說明:
Arduino Web Server程式主要功能分成兩個部份:
  • 當接收到ClientHTTP連線請求時,首先解析Headers資料,若是為POST method,就可以判斷連結是由Client端瀏覽器按下Submit button所傳送過來,因此,即繼續解析POST DataNameledEffectvalue值,再將值透過sendCommand()函式傳送給NXT作為執行的指令。
  • 而如果不是POST method(就是GET method),或者已經完成傳送指令給NXT時,就以HTTP Response回傳Web pageClient
  • 以上Web PageHTML原始碼(Magicwand LED Effects.HTML)連結
  • 完整的Arduino Sketch程式碼(WebServer_XBeeComm_POST.ino)連結
  • 完整的NXT NXC程式碼(WLessComm_NXT.nxc)連結

沒有留言:

張貼留言