# 微電腦控制實驗板玩互動創意 # 用CyberPi學Python ###### tags: `CyberPi` ### 短網址: https://reurl.cc/NR8dZp ## 一、前言 ### 1.為甚麼要學程式 情勢所逼,產業界需要程序員,教育界在推108課綱,所以各位才會在這... ![](https://i.imgur.com/qpa5IDr.png) 即便是管理階層,PM不懂程式能管理的了一群RD嗎? ### 2.為甚麼要學Python Scratch 這類圖形化程式語言,用滑鼠拉程式完全不用打程式碼,非常適合新手建立信心以及程式基本程式邏輯 ![](https://i.imgur.com/abd0HOk.jpg) 但它就相當於程式學習的學步車,並不能應用在實際的軟體開發場景,試想一下面試的時候說自己有Scratch的開發經驗... ![](https://i.imgur.com/EObSTqA.png) ## 二、痛點與方案 ### 1.學Python的痛點 #### 建立環境複雜 從Python下載、安裝、設定環境變數,到設定編輯器可撰寫、執行,程式這一整串步驟,老師可以自己操作但容易教會學生嗎,學校電腦可以先設定好,那學生回家如何做作業? ![](https://i.imgur.com/34bVqbS.png) ![](https://i.imgur.com/1MGaDWT.png) ![](https://i.imgur.com/AG0ChU8.png) #### 執行結果無趣 ![](https://i.imgur.com/SDiUIPP.jpg) ### 2.mBlock與CyberPi解決你的困難 #### 完善的Python編輯器 mBlock的Python模式本身就是完善的編輯器,檔案區、編輯區、執行區 ![](https://i.imgur.com/cAkaZ15.png) 還有強大的套件管理器,內容包含資料分析、遊戲設計、網路爬蟲、 ![](https://i.imgur.com/dzHpjf5.png) #### 趣味的學習過程與成果 CyberPi本身長的就像一台遊戲機,豐富的聲光效果增強學習反饋。 ![](https://i.imgur.com/8mEA5JJ.png) ## 三、啟用CyberPi與mBlock ### 1.硬體簡介 硬體功能超豐富 ![](https://i.imgur.com/IsnyESB.png) USB type-C 連接電腦 ![](https://i.imgur.com/FY0CdzT.png) ### 2.環境建置 下載並安裝mBlock桌面端windows版 https://mblock.makeblock.com/zh-cn/download/ ![](https://i.imgur.com/XHB8Vt4.png) 剛打開是圖形化程式界面,按右上角"黃色按鈕"切換至Python界面 ![](https://i.imgur.com/Wrs20ST.png) 進入Python界面,準備開始寫程式 ![](https://i.imgur.com/FVso3Dl.png) ### 3.即時與上傳 圖形與Python兩種界面,都有"即時"與"上傳"兩種模式, ![](https://i.imgur.com/vikVpzi.png) 即時模式由電腦負責運算、上傳模式由CyberPi本身做運算 ![](https://i.imgur.com/Rr8koHH.png) 圖形介面中的上傳模式下,拉積木時可以同步產生Python程式 ![](https://i.imgur.com/z1sPQX1.png) 但在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') ``` ![](https://i.imgur.com/7ag90dx.png) ![](https://i.imgur.com/3amE4qF.png) ![](https://i.imgur.com/gV06jDt.png) ### 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() ``` ![](https://i.imgur.com/MMevR3v.png) ### 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) ``` 上傳模式 ![](https://i.imgur.com/sESiSF3.png)![](https://i.imgur.com/m9hxuEa.png) ### 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/ ![](https://i.imgur.com/Ofb3YBq.png) #### 2.找到課程 ![](https://i.imgur.com/ZYQn0jl.png) #### 3.輸入認證代碼 ![](https://i.imgur.com/HG6AyZp.png) #### 4.拍照上傳 ![](https://i.imgur.com/bbUkLr0.png) #### 5.寫下心得:今天學到的CyberPi+Python,可以怎麼跟自己的教學做結合? ![](https://i.imgur.com/wv3xzDt.png) #### 6.歷程認證 ![](https://i.imgur.com/AknwaBk.png) ![](https://i.imgur.com/oAlwwtR.png) ## 六、補充資料 ### 交個朋友吧 https://www.facebook.com/profile.php?id=100001957620613 ![](https://i.imgur.com/9VExJ2k.png) ### CyberPi系列Python 資源 https://education.makeblock.com/help/category/mblock-python-editor-python-api-documentation-for-cyberpi/ ![](https://i.imgur.com/tCLiqsr.png) ![](https://i.imgur.com/351AHli.png)![](https://i.imgur.com/eMomVVH.png) ### 原廠Python教學資源 https://www.yuque.com/makeblock-help-center-zh/mcode/mblock-python ![](https://i.imgur.com/b2C3QwH.png) ### MakeX Challenge 國際比賽 https://www.makex.cc/ ![](https://i.imgur.com/GMimv6v.jpg)