打造我的聊天機器人!

系列四:使用 IBM IoT 平台和 MQTT 操控機器人動作

wesleyboy42
Maker Cup
Published in
5 min readJun 19, 2016

--

前面三個系列的範例都是用 Mac 筆電做收音和播放聲音,如果想要操控機器人的動作的話,那就勢必要有一個真實的機器人硬體了,在以下範例將會用 MTK LinkIt Smart 7688 Duo 來接收 Mac 筆電透過網路傳來的指令,然後驅動步進馬達的轉動,例如動動手臂之類的。

網路連接的部分,會使用到 IBM Bluemix 和 MQTT,範例已經在「IBM Bluemix:連接多組感測器和終端設備」介紹過了,以下快速帶過主要設定,首先先介紹 Node-RED 的邏輯怎麼拉:

其實跟之前範例一模一樣。至於 7688 broker,則是改成接收 Action(動作)的 Event:

IBM IoT out 也是把 Event 改成 Action,用來傳遞控制機器人的動作命令:

這樣就完成了Node-RED部分。

MQTT程式部分將會分為Publish和Subscribe,其中Publish的程式可參考以下範例:

其中在發送事件的地方,第22行程式碼,Event改成了Action,而最後的字串也改成了指令’hello’:

這樣Node-RED的7688 broker才會正確接收到指令。

至於MQTT Subscribe部分,在7688 duo開發版收到MQTT的事件後,還要再把指令傳到7688 duo的Arduino晶片中做控制機器人的處理,因此除了原本的MQTT架構外,還需要使用Serial Port來把指令傳送給Arduino中,而這部分的程式是參考陳伯儒(Blue)Gitbook

因為7688 duo的Linux晶片與Arduino晶片是用ttyS0在溝通,所以這邊SerialPort就帶入ttyS0,而baudrate則是用57600。

如果MQTT收到了 Action 的訊息,那就判斷指令是 hello、order或是check,然後傳送相對應的值到 Arduino 晶片中。

詳細程式範例可參考以下網址:

最後是 Arduino 部分,首先在 setup() 函數中定義 Serial1.begin(57600),也就是與 Linux 晶片溝通的 baudrate 是用 57600。

接下來 loop() 函數中用 Serial1.available() 判斷是否有資料進來,如果有就用Serial1.read() 來接收從 Linux 晶片傳來的資料:

其中 switch case 終究能定義不同指令下,機器人的動作各是那些。

最後如果想下載 Arduino 的原始碼可在以下網址下載:

--

--