---
# System prepended metadata

title: 5-3 用CyberPi控制Dobot手臂
tags: [Dobot進階]

---

### 為甚麼是CyberPi?

要用Dobot Magiciang機械手臂模擬一個工廠的運作，手臂與手臂之間要能協同合作，Dobot原本的控制無論有限還是無線，都是一台手臂配一台電腦，這在只有一兩台電腦時還可行，但工廠裡不可能只有一兩隻手臂，當手臂數量一多場面就變得極其混亂。

因此控制Dobot手臂的裝置必須具備下列條件，裝置間必須要有**無線通訊**的功能，**體積小輕**巧方便配置。綜合上述條件可行的方案就有，類似樹莓派的微型電腦，或基於ESP32有wifi功能的開發版，但是樹梅派所費不貲，一台手臂配一台樹梅派實在有點浪費，而ESP32開發版雖然格低廉，但用它開發專案又要加裝按鈕、LCD等元件，還要處理複雜的麵包版線路，很難將精力聚焦在手臂的應用上。

這時CyberPi的優勢就脫穎而出了，體積小巧、價格實惠，CyberPi本身就是基於ESP32的開發版，多台CyberPi之間可以無線廣播通訊，並且具備**按鈕、螢幕**以及多種傳感器，在開發專案時可以即時控制跟顯示訊息，非常便於除錯，除此之外還能實現手臂跟mBot2機器人的協作，又增加了許多變化性，可以說CyberPi就是為了建置Dobot工廠系統而量身打造的控制器。
![](https://hackmd.io/_uploads/S11ezXVL3.png)

### 兩者如何連線控制?

原本以筆電控制Dobot手臂時，是以USB介面進行控制，而CyberPi的USB介面是要用來跟電腦連接燒程式用的，況且也沒有type-B對type-C的USB傳輸線。將CyberPi翻過來可以看見它的背面有14個接孔，相當於是其他ESP32開發版的腳位，旁邊有標註清楚，他在連接鋰電池擴展版或mBot2時，也是用這裡進行供電跟通訊。

![](https://hackmd.io/_uploads/Bk_bE748h.png)

而Dobot Magician本身也有通訊介面(Communication Interface)，是用於銜接原廠的其他控制盒，通訊介面裡有10個針腳，每個針腳的功能如下圖所示。觀察CyberPi與Dobot的腳位中兩者都各自有一組RX、TX，這是晶片之間最常用來雙向溝通的UART協定所使用的腳位，我們就是要用這個方式實現CyberPi控制手臂。

![](https://hackmd.io/_uploads/SyQFBE4U2.png)![](https://hackmd.io/_uploads/H1dxvBVU2.png)



除了連接RX/TX之外，要讓CyberPi開機還需要5V/GND供電，因此總供需要連接4個腳位，CyberPi與手臂之間是透過杜邦線連接，連接的原則是TX對RX、RX對TX、5V對5V、GND對GND，如果不想自己慢慢對線**照我的顏色接法**準沒錯。

![](https://hackmd.io/_uploads/S12i4E4U3.png)

從公母杜邦排線上取下**棕紅橘黃**4個顏色的線，4條線之間不需要撕開，公端街在CyberPi、母端街在Dobot上，接法如下圖所示，簡而言之**紅色5V、棕色GND**，這兩個一定不能接錯，橘色黃色是兩邊的RX/TX反接，接錯頂多手臂不會動，到這邊硬體的部分就算是處理完了。
![](https://hackmd.io/_uploads/HkXUVrNIn.png)![](https://hackmd.io/_uploads/H1G5VS4Ln.png)

### 控制自動歸零
![](https://hackmd.io/_uploads/HkDEGwNI2.png)


接著打開mBlock的Python編輯器，並將下列只有短短四行的程式複製進去，並切換成**上傳模式**，再按下**上傳按鈕**將程式上傳到CyberPi，不出意外的話上傳完成的瞬間Dobot手臂就會開始做歸零的動作，如果沒有請重新檢查上一步接線環節是否有誤。
```python=
from machine import UART 
uart = UART(1, baudrate=115200, tx=15, rx=21)
data = [170,170, 6, 31,3,0,0,0,0,222]
uart.write(bytes(data))
```
就這短短4行程式就能控制手臂歸零，第1行載入UART模組，第2行設定溝通的鮑率與RX/TX腳位，鮑率需要符合手臂需要的115200，RX/TX腳位則與CyberPi背後標示的一樣，第3行設置UART指令內容，第4行將指令從CyberPi的TX送出，Dobot的RX接收到指令之後就會開始動作。

所以看來最關鍵的就是在第3行這一串奇怪的數字串列，想詳細了解這當中是怎麼回事可以先閱讀原文網誌：

https://jacquesjohnston.wordpress.com/2019/01/29/communicating-with-the-dobot-magician-using-raw-protocol/

![](https://hackmd.io/_uploads/S1cELP4L2.png)

簡而言之，UART指令是由一連串0~255的整數組合而成，一個數字表示8個byte即一個位元組，可以用16進位(Hex)或10進位(Dec)表示，歸零指令的內容如下圖所示，程式第3行的數字串列內容ˋ是從這來的，前兩個170是Dobot規定每個指令都是以此做開頭，6表示接下來要講多長。

Payload裡才是重頭戲31是指令的ID，接下來3是設定這個指令是對Dobot**下達控制**(write)還是請求**回傳資料**(read)，接下來的四個0是31這個歸零指令規定須要給的資料，就是一個空的32位元，每個指令該傳多少資料都是設定好的，想知道究竟有多少指令，以及每個指令該怎麼寫，可以讀Dobot Magician的通訊協定資料：

https://jacquesjohnston.files.wordpress.com/2019/01/dobot-magician-communication-protocol-v1.1.3.pdf

最後的222是校驗和(checksum)也是最麻煩的，他是用於驗算用的怕資料在傳輸的時候傳錯了，前面Payload裡的數字套一個公式進去而得來，這個公式Dobot本身也會算一次，當CyberPi給的數字跟他自己算的對不上，代表傳輸過程出問題，指令就不會被執行。

### 結語
到這邊剛把CyberPi跟Dobot之前的橋樑打通，才只是**迷你關燈工廠**系列的第一步，後續還要學會用CyberPi的傳感器控制Dobot的動作，還要打通Dobot的輸送帶、滑軌、吸盤、夾爪等各種周邊配備，以及如何同步控制多台Dobot，甚至Dobot手臂、mBot2機器人、AI視覺模組之間要如何協作互動。