# 微電腦控制實驗板玩互動創意
# 用CyberPi學Python
###### tags: `CyberPi`
### 短網址: https://reurl.cc/NR8dZp
## 一、前言
### 1.為甚麼要學程式
情勢所逼,產業界需要程序員,教育界在推108課綱,所以各位才會在這...

即便是管理階層,PM不懂程式能管理的了一群RD嗎?
### 2.為甚麼要學Python
Scratch 這類圖形化程式語言,用滑鼠拉程式完全不用打程式碼,非常適合新手建立信心以及程式基本程式邏輯

但它就相當於程式學習的學步車,並不能應用在實際的軟體開發場景,試想一下面試的時候說自己有Scratch的開發經驗...

## 二、痛點與方案
### 1.學Python的痛點
#### 建立環境複雜
從Python下載、安裝、設定環境變數,到設定編輯器可撰寫、執行,程式這一整串步驟,老師可以自己操作但容易教會學生嗎,學校電腦可以先設定好,那學生回家如何做作業?



#### 執行結果無趣

### 2.mBlock與CyberPi解決你的困難
#### 完善的Python編輯器
mBlock的Python模式本身就是完善的編輯器,檔案區、編輯區、執行區

還有強大的套件管理器,內容包含資料分析、遊戲設計、網路爬蟲、

#### 趣味的學習過程與成果
CyberPi本身長的就像一台遊戲機,豐富的聲光效果增強學習反饋。

## 三、啟用CyberPi與mBlock
### 1.硬體簡介
硬體功能超豐富

USB type-C 連接電腦

### 2.環境建置
下載並安裝mBlock桌面端windows版
https://mblock.makeblock.com/zh-cn/download/

剛打開是圖形化程式界面,按右上角"黃色按鈕"切換至Python界面

進入Python界面,準備開始寫程式

### 3.即時與上傳
圖形與Python兩種界面,都有"即時"與"上傳"兩種模式,

即時模式由電腦負責運算、上傳模式由CyberPi本身做運算

圖形介面中的上傳模式下,拉積木時可以同步產生Python程式

但在Python介面中我們要先從"即時模式"開始。
## 四、開始寫程式
### 1.按鈕有反應
無限迴圈按鍵感測,計數器與變數型態轉換,字串處理雙螢幕輸出
``` python=
# 按下CyberPi的按鈕,同時在小螢幕顯示
import cyberpi
#按鈕次數歸零
cyberpi.controller.reset_count('a')
cyberpi.controller.reset_count('b')
while True :
if cyberpi.controller.is_press('a'):
cyberpi.console.println('a')
# 在電腦顯示A按鈕按下的次數
print('button A press '+str(cyberpi.controller.get_count('a'))+' times')
if cyberpi.controller.is_press('b'):
cyberpi.console.println('b')
# 在電腦顯示B按鈕按下的次數
print('button B press '+str(cyberpi.controller.get_count('b'))+' times')
if cyberpi.controller.is_press('up'): # 檢測是否按下按鍵
cyberpi.console.println('up')# 即時顯示按鍵名稱
if cyberpi.controller.is_press('down'):
cyberpi.console.println('down')
if cyberpi.controller.is_press('left'):
cyberpi.console.println('left')
if cyberpi.controller.is_press('right'):
cyberpi.console.println('right')
if cyberpi.controller.is_press('middle'):
cyberpi.display.clear() # 清除小螢幕
cyberpi.console.println('middle')
```



### 2.數據顯示器
跨領域數學、物理,各式環境與運動物理量感測器,串列資料處理即時圖表繪製。
``` python=
import cyberpi
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
x_values = []
y_values = []
n=0
def animate(i):
global n
n+=1
x_values.append(n)
# data=cyberpi.get_bri() # 亮度
data=cyberpi.get_loudness() # 聲音
# data=cyberpi.get_shakeval() # 震動強度
# data=cyberpi.get_wave_angle() # 晃動角度
# data=cyberpi.get_wave_speed() # 晃動速度
# data=cyberpi.get_pitch() # 俯仰角
# data=cyberpi.get_roll() # 翻滾角
# data=cyberpi.get_yaw() # 方向角
# data=cyberpi.get_acc('x') # 加速度
# data=cyberpi.get_gyro('x') # 角速度
# data=cyberpi.get_rotation('x') # 轉動角度
y_values.append(data)
plt.clf() #
plt.plot(x_values, y_values)
ani = FuncAnimation(plt.gcf(), animate, 1)
plt.show()
```

### 3.電子水平儀
向左傾斜亮藍光、向右傾斜亮紅光
``` python=
import cyberpi
while True :
data=cyberpi.get_acc('x')
cyberpi.console.println(data)
if data>0 :
cyberpi.led.on(data*20,0,0)
if data<0 :
cyberpi.led.on(0,0,-data*20)
if data==0 :
cyberpi.led.on(0,0,0)
```
上傳模式

### 4.抽屜防盜器
光感測+音效
``` python=
import cyberpi
while True :
data=cyberpi.get_bri() # 亮度
cyberpi.console.println(data)
if data>20 :
cyberpi.audio.play_music(60, 0.25)
```
### 5.聊天機器人
自然語言處理,語句情感分析
``` python=
from snownlp import SnowNLP
import mkcloud
while True:
say = input("你要說什麼:")
s1 = SnowNLP(say)
print("你的發言積極指數:",s1.sentiments)
response = mkcloud.robot.chat(say)
text1 = response
s2 = SnowNLP(text1)
print(response)
print("回复的發言積極指數:",s2.sentiments)
```
## 五、留下足跡
#### 1.進入MLC平台
http://mlc.ipoe.cc/

#### 2.找到課程

#### 3.輸入認證代碼

#### 4.拍照上傳

#### 5.寫下心得:今天學到的CyberPi+Python,可以怎麼跟自己的教學做結合?

#### 6.歷程認證


## 六、補充資料
### 交個朋友吧
https://www.facebook.com/profile.php?id=100001957620613

### CyberPi系列Python 資源
https://education.makeblock.com/help/category/mblock-python-editor-python-api-documentation-for-cyberpi/


### 原廠Python教學資源
https://www.yuque.com/makeblock-help-center-zh/mcode/mblock-python

### MakeX Challenge 國際比賽
https://www.makex.cc/
