本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi  
5 c1 ]' Q- _' D- D1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。, b5 _6 o* H: ^& o7 j8 v* P  ]$ V* @
 
 
 Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載  
2 X& n" J$ h) `2 Z. @+ H+ |1 B- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。+ p0 p0 P( `9 N- d' J6 `
 
  2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
 - 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)1 K" Y) H& g) l" r& m4 B: F
 
 
 - 點擊桌面上Visual Studio Code的圖示運行程式。
 - 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
 
' n" n5 n0 E9 g/ m, j- W  7 u8 ]- |2 _! H5 U/ u4 a5 U 
- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
 
: [# j7 l# c; F3 C  4 n  D( O( M0 O1 Z/ x! S; f  ] 
- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
 
% G# h% `: V. g- n1 O) m  2 o2 @' g. a% q; k) _5 G4 B' T- L) Y 
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
 - 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。/ J5 S3 |$ |; ?) N
 
 
  
) R: _! L/ L  y* ]4 E3.童芯派第三方編輯器程式設計準備% ^! \2 t; |2 ^ 
- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。: V9 B) F* _+ X; ]- @1 B: d
 
 
  
4 Y  @6 Q' {8 R6 U  a/ Z" t- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。
 
7 I0 _; @7 Q6 R( \: k0 ] 
 在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。 7 F- W! i' ~  o' N 
- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。3 U1 ]& W0 {6 v% G, i
 
 
 在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 3 U& W' V2 F/ s+ g8 }8 Q 
! x1 C0 f5 D& m2 G6 g: c% _2 ? 
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。5 p" a" d! e1 M4 d
 
  & i! X7 @% `6 H$ _1 @ 
4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 . E% Q! q. R+ Q1 G$ [ 
5.一些程式設計案例, l& k& [, q9 v( K+ H4 g 
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput 9 D- |5 O7 j6 n) d) q1 p- c 
功能介紹: 
0 P: l* x& Z2 V: }利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。 
4 p5 D/ p! y% M- h7 y6 J  v0 x4 z0 O0 b通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。 
9 z& f: i1 c& Y結合藍牙模組可以實現無線滑鼠的功能。 
+ n2 {- d, a# m: t; W1 `2 q* n: {8 }) ^0 | 
from pynput.mouse import Button,Controller% ]# c$ y) x8 m( D9 X) k 
import cyberpi" Y* F- H& z) ^, P9 p8 g3 C 
import time 
4 ?+ ~4 ]" r" o+ O$ {  
+ |! ]3 z6 p* o4 Dmouse = Controller() 
, G  V2 r/ o: ~9 L" }  
3 n6 `$ b6 [* \/ `# N+ Awhile True:1 r; p# ~; Q1 Z4 d2 e 
   if cyberpi.is_tiltback():4 k) E* y' \! o' p3 B 
       mouse.move(-3, 0) 
4 Z% h- F3 y' O8 }, B       print(mouse.position)3 S4 ~" Z* q& Q# O( K' A" D! r' H5 ] 
   if cyberpi.is_tiltforward(): 
: t& g/ v1 N8 d7 z       mouse.move(3, 0)( S& e9 ~/ M/ |# r* c 
   if cyberpi.is_tiltleft(): 
8 y, P% ~. u5 W$ L       mouse.move(0, -3) 
  R* Y, c) J+ V6 G' o8 n' ^   if cyberpi.is_tiltright(): 
& e% M, Z6 L( _; Z' J; K       mouse.move(0, 3)0 A0 w1 b: [& Q- l4 z( ~% J; n 
   if cyberpi.controller.is_press("b"):) x) e" y$ }# f! Q 
       mouse.press(Button.left)& I- T# R8 N6 z9 } 
       mouse.release(Button.left): W5 d8 L4 ^( X# Y& ^& ^, U/ J. t7 h 
       mouse.press(Button.left) 
3 g1 R' n: f* V; N; v! l5 R       mouse.release(Button.left)! W& j6 P- N1 S, i8 R 
   if cyberpi.controller.is_press("a"):% [' Y$ \# }9 ~3 h 
       mouse.press(Button.right)% C/ v& K* c0 w0 ~) o- x 
       mouse.release(Button.right) 
) t' b# {% v1 |, f" V& ^+ g    time.sleep(0.01) 
7 a" b6 r8 D! _7 [7 \ 
+ n! O: `6 R( L1 d' Y4 Q- i% L5 N/ C 
  d; ~" j2 @3 M7 z0 W語音打字器  
$ m8 t7 Q% u' }( E) Y功能介紹:) `2 d$ {' ?) b: @" G6 k4 @ 
利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。. V0 y' E) u8 u/ ` 
將語音辨識的結果通過pynput在文檔中打出來。4 j4 b% n, _/ I4 n 
該程式目前只能支援英文。/ {9 b) b, M9 c& ?2 v+ y6 B% V 
* Q* ~" |$ s3 L5 T+ j/ F7 v 
import cyberpi 
$ L& r7 Q: d2 ?. y  _from pynput.keyboard import Key,Controller& E  X( C3 E& K- e- R 
import time 
! x" z2 m7 [' ~2 O$ ] ; k0 J! M4 N1 l6 j* }# N& Y4 P, D 
keyboard = Controller()1 J. L7 O5 v$ M/ ]5 m6 ` 
cyberpi.console.clear() 
$ D% C+ `  ^& \4 }7 M1 }cyberpi.led.on(0, 0, 0)4 p3 u* E, ?' O% W 
cyberpi.set_recognition_url() 
6 \0 j) p/ o- ?3 ocyberpi.cloud.setkey("請輸入雲服務授權碼")    # 通過慧程式設計帳號可以獲得 
& V, L# Y% R# x" ^; ~cyberpi.wifi.connect("WIFI名稱", "WIFI密碼") 
# q. T: c. Y5 H9 D& c% Iwhile not cyberpi.wifi.is_connect(): 
: w6 Y9 S8 q, `- ?/ U   pass 
0 ?' u4 ^) ?( j, H. y4 y& _+ H* i! hcyberpi.led.on(0,0,255)" q0 I( C( f5 q7 ]: Z 
cyberpi.console.println("WIFI已連接")0 ?: {+ X! o$ `/ g  O 
cyberpi.console.println("--------------") 
+ Q# z9 N9 w* J8 Vcyberpi.console.println("按下A鍵開始語音辨識") 
1 [( p) c) |8 f3 ]while True: 
. n( x: H! a9 p& }$ X( Q4 n, E   if cyberpi.controller.is_press('a'):+ U( N' a* n4 X4 J+ B6 e 
       keyboard.press(Key.space) 
8 @9 C$ [0 z1 H       cyberpi.console.clear() 
8 R) y$ K: M! E' ~3 ^       cyberpi.led.on(100, 0, 0)4 K& r& R! ~3 y  k4 j 
       cyberpi.console.println("開始語音辨識")/ N; G7 I5 u3 D) h: d* C 
       cyberpi.audio.play("switch") 
8 V* d9 r7 m" \' @. v5 D       cyberpi.console.println("--------------") 
! o  k* D; X0 M! g2 Q       cyberpi.cloud.listen("english", 2) 
' S" E5 ^/ f: K7 ?2 {4 s1 d- ~( \       cyberpi.led.on(0, 0, 0)/ H% x" ?, b% J# ]$ p3 c. x, F/ D8 f 
       say = cyberpi.cloud.listen_result()% L& L; u1 e" F  d# C) l" u& |( b; v 
       cyberpi.console.println(say)- K) j4 I$ f+ P- J& c9 E- k 
       cyberpi.console.println("--------------") 
2 N+ e& J- C! y' U: |       for i in say:9 M+ ~! O! ~' \) N( N 
            if i == '': 
: q+ q7 O& _/ Z/ |                 keyboard.press(' '); b3 l$ Q* V6 m5 Y, P 
            else: 
) v, W& e, s6 l9 w7 b                keyboard.press(str(i))' O5 s% E! d& @1 I, J. D 
                time.sleep(0.03) 
; `6 A+ d& Q2 w! j 
) F( @- W+ H3 Q0 w$ Tmatplotlib音量柱狀圖
  
+ @! \8 F) l1 _import cyberpi+ j4 k8 W3 s7 ]/ I3 P2 ? 
import time' I8 M+ n8 c: n% u 
from matplotlib import pyplot as plt 
! `3 ]5 c8 g! P3 J ' Z  s4 `# _+ v 
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] 
# p- |& f: ~7 n: ]; Pplt.ion()4 ]) h  M5 Z' e4 E) \- l 
 $ q# S/ h( ^; I# s7 L9 F/ U 
while True:. v& B8 I% i% q" M4 P$ k6 u 
   loud = cyberpi.get_loudness()/ y6 l0 r) z9 a3 c) J 
   plt.clf() 
3 ~0 S. f' c$ ^- Y& W; x" u   plt.xlabel("數據名稱") 
) C# O( |$ f7 t+ E% K9 b/ O; b   plt.ylabel("音量讀值")4 e; m- d1 \& q' Y2 Q  U6 v 
   y_locator = plt.MultipleLocator(5) 
8 K0 V5 }: @! U3 ?7 Z   ax=plt.gca()4 M0 f; {8 j0 O; J, O+ T% G9 Z# S 
   ax.yaxis.set_major_locator(y_locator)' d1 S+ I( ~# @4 z* Q- y; Z3 } 
   plt.ylim(0,100)5 n0 X$ i6 p& O8 H) P; }, v 
   plt.bar('音量', loud, align='center',label=f'溫度{loud}')8 f6 H' z$ ?8 {1 U* \ 
   plt.title('童芯派聲音感測器讀值') 
& g4 [! h0 T# Q! m1 R& ~   plt.legend()2 W5 `: D3 I4 K/ D 
   plt.show() 
7 [& J! p+ [; Q% K/ m- ~    plt.pause(0.01) 
8 u) `& U; }2 N6 @, j 
' D4 v, e, Z& y2 x. O; M8 a' P$ u2 G8 t( x 
matplotlib 多圖表顯示 
! s: c& [4 H, F' H6 `( m 
1 o) d1 E# }& M* i7 jfrom matplotlib import pyplot as plt 
1 Q/ l% B8 v6 V' oimport time 
5 r# B( ?9 }* K7 J. Aimport cyberpi5 V5 `. R+ }6 J" l8 f% t' Y 
  
% O! b: d7 k! }: B( ?! V4 v9 uloud_list = []+ N4 o, z4 o5 B1 o  [- a 
bri_list = [] 
( K$ s! e3 v/ J9 e; G5 [: Lplt.rcParams['font.sans-serif'] =['Microsoft YaHei']   # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體: K$ Z/ b7 U5 k% u+ t; Q 
plt.ion() 
0 p5 F$ U' J0 N& F3 B) d- Q* R' Yplt.figure(figsize=(10,10)); a4 S7 ?& Q# S0 Y: z 
plt.figure(1) 
1 U' Y6 O; y4 s; Z! f0 bx_locator = plt.MultipleLocator(5) 
: l) ]: F+ v' y& M) s8 ly_locator = plt.MultipleLocator(5) 
1 X; v1 |+ h6 {while True:) m7 ^6 w6 K% c" {: k) s9 ?$ } 
   loud = cyberpi.get_loudness() 
' Z3 x0 Z5 J- `+ Z% D   bri = cyberpi.get_bri() 
2 D3 y0 L! Q. M& V   loud_list.append(loud) 
& e/ w& T; l# {- v& F: r   bri_list.append(bri) 
8 g$ @* Z6 i9 E   battery = cyberpi.get_battery() 
/ I. n7 P/ Q0 k7 s1 n- r8 X   size = [battery, 100-battery]0 D4 r2 N6 p3 Q3 I 
   status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']3 i4 }0 _! n% o0 z* P 
   ax1 = plt.subplot(221)1 |3 D# w9 E1 `! A9 V 
   plt.title('光線折線圖') 
! u( T3 c  X1 O- F5 S1 g   ax1.plot(bri_list)3 n4 A3 Y+ Y/ _ 
   ax2 = plt.subplot(222). H9 L+ n- w6 e7 T0 u- K 
   plt.title('聲音柱狀圖')1 ]; ]) @" V* z6 ^2 H: Z 
   ax2.xaxis.set_major_locator(x_locator), |; ~" y6 A( R4 H  n' R$ @ 
   ax2.yaxis.set_major_locator(y_locator) 
$ T: I' d  V. J   plt.ylim(0,100) 
5 _& e: u$ x) C& Y. Y) O" t   ax2.bar('sound', loud) 
  [4 L/ Y$ m+ O4 W) n: B3 C7 i   ax3 = plt.subplot(223)1 P( J# p7 o+ c/ J) M& P0 m 
   ax3.xaxis.set_major_locator(x_locator) 
. J) a" K1 o. M4 Y   ax3.yaxis.set_major_locator(y_locator)  [3 u# H: ~: k* V 
   plt.xlim(0,100)- K7 J% [. P/ h# |+ c 
   plt.ylim(0,100)( f; E% x3 q5 Y' d8 |3 @ 
   plt.title('聲音、音量散點圖') 
, W) i0 }& [6 z" U& `5 S/ q   ax3.scatter(loud_list,bri_list)/ F- Z  q" e$ N* R 
   ax4 = plt.subplot(224) 
  w1 P" a) q9 |4 F   ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'}) 
% c. m4 K. ~/ w7 u! S   plt.title('童芯派電量') 
  Q  \2 u: _3 {1 E, R, o& w  M   plt.pause(0.2)! h8 d2 ^  M& J, H, [$ j* c( T! O 
   plt.clf()3 Y; T' {0 S  p* i7 M/ T" q 
   if cyberpi.controller.is_press('a'): 
& j5 Z* H$ e& b2 J6 [       break) {. v2 m' H$ @# v9 v" a 
   if len(bri_list) > 500: 
9 ^$ M& t; e- i/ W: L* Y       bri_list = [] 
6 u  R2 p3 l4 l: Y+ }3 _; v        loud_list = [] 
& P6 |" C/ [; D: C( d+ e% O 
- i6 {) T0 d+ F: ]* X) x, i  T |