本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi + b6 J* s( }9 q2 ^. R
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。9 _* w, q0 G! T
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載
5 J7 h4 A: M/ y: F4 f1 Z% k! f+ u! V$ Z; z- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。( m. B2 z2 [) F) Q1 m
2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)$ w2 Y8 W1 [# J) D2 K
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
# U I( q# a; K$ r3 q - u3 _ H$ v1 X1 q& u- a: M
- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)( A5 J" s) S9 o8 D+ [) @
' O/ h6 @" F' O9 U, p- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
' O: e& X* \* X+ v% O& i" ?
0 V/ N4 i( C: e2 s4 L- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。! {2 n% t1 P L8 F3 q
3 K6 Q p! ~/ S- r* w; c: x4 t# C- w1 _
3.童芯派第三方編輯器程式設計準備6 S8 l0 B# O9 F5 n1 M3 p/ w1 |# r
- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。/ x0 U. L( x0 }! M4 t+ v6 ^. B! O
; A+ M v& D) D3 `- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。
" y: Y- }7 o( o6 q& k( ]" y( k6 U. G
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
1 r( z, E. X/ I) W& [$ i- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。
# T8 `5 j* b3 Q4 h. G% w# U
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 + r: p" k& c) f" M2 r; S3 ` m' q
4 _9 m0 Q9 g$ f) g2 T
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。
/ ?1 p, Q, v! x) p1 b% V1 H
% z9 g7 [ K2 g% \4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 2 M, k, ]3 F1 n
5.一些程式設計案例
6 K [7 n' y9 V7 u4 k! g* y童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput : n4 U, M6 n- h7 p8 e
功能介紹:) D9 \9 d; g4 ~1 v. x
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。+ t4 A6 P7 }* a) f, Y
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。3 x& K, Y0 w" z1 K7 ^/ Q: e& O) ]
結合藍牙模組可以實現無線滑鼠的功能。8 q5 L' \; l. c0 t: ^* W3 I" N) O
, `* p6 v! U( R: n( {8 m7 Qfrom pynput.mouse import Button,Controller
7 w; c/ i- Z2 p% j, Y/ qimport cyberpi5 L' d$ Q6 T- J+ W' A( ~7 q1 K
import time
# {" n. s* u6 n, y0 F2 e- s
$ A6 X/ E* x/ H/ y8 I( J! pmouse = Controller()7 J3 I6 g* A1 X1 `# ^; f
! d5 Y f, F" `+ N7 c
while True:: w" q. k- a( F
if cyberpi.is_tiltback():/ s1 B7 l7 p) m0 I& C! ]1 U7 m
mouse.move(-3, 0)/ P+ c0 l6 O" i) B" t# O. h& }7 G
print(mouse.position)
# J4 B5 v' B+ Z8 ^6 v8 S- n2 Q if cyberpi.is_tiltforward():
1 n) {9 h, ?- J) n, z; R/ T8 y mouse.move(3, 0)
u" d, i7 N, \& ? if cyberpi.is_tiltleft():
( T( l- \* o# |8 ~+ ]4 B mouse.move(0, -3)2 [7 l0 X6 D$ v8 N
if cyberpi.is_tiltright():
# I! \2 R0 ?7 E. ?" e mouse.move(0, 3)
* W% c8 ?; Q5 m4 R, v if cyberpi.controller.is_press("b"):3 \2 [( c/ ^6 j/ `: |& @* e' Q
mouse.press(Button.left)6 X+ n3 h8 o# r
mouse.release(Button.left)
& R2 [$ v; C6 J6 a3 S4 H! l mouse.press(Button.left)
5 X1 Y. M9 y7 v8 y& ]$ c% f* k mouse.release(Button.left)
3 M0 u9 y: O/ w) w if cyberpi.controller.is_press("a"):# l5 P% ]$ R7 O2 v; v" i1 ^
mouse.press(Button.right)
8 [% Z4 P/ F ?* d4 h mouse.release(Button.right)
3 c( b5 B5 b' f time.sleep(0.01)4 g- d& \! C' G9 o2 y6 h
% z4 v& h; r; ^+ q. D* D! U8 k r5 `4 {. a) d
語音打字器 7 v0 F* x+ B5 z
功能介紹:7 h- q+ n4 J- A# S& [* c
利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。. O4 H1 C/ }2 R- z% g1 z$ \
將語音辨識的結果通過pynput在文檔中打出來。
: C" F& |& E0 x9 s該程式目前只能支援英文。7 [/ p" E$ y5 W- p& u8 L* W8 g& O
5 L5 z- G# x7 R& m' A0 z; Q( dimport cyberpi
+ z' C6 v" H. J$ V6 ^& pfrom pynput.keyboard import Key,Controller
8 b! L+ o u, U3 S" ]) `7 iimport time
/ N- Z$ L8 |( O) g% N * J# U" R, Z1 p! T# v* k
keyboard = Controller()
6 E' r# I7 h1 l8 _cyberpi.console.clear(), c( p- H" Q# {8 [: _) s' Y7 A
cyberpi.led.on(0, 0, 0)* j+ q8 a3 L$ d+ v
cyberpi.set_recognition_url()
8 W: F" G" Q& P# d2 E0 R \cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得
& E# ^. ?* k5 ncyberpi.wifi.connect("WIFI名稱", "WIFI密碼")" ~% B5 U( |/ m9 m! j0 @
while not cyberpi.wifi.is_connect():
6 S8 @" a4 p: O- h" E! J pass
5 G5 a5 \) s, {* ?3 Dcyberpi.led.on(0,0,255)
: L& V7 a: s/ p5 q/ pcyberpi.console.println("WIFI已連接")
, h& Q- t0 z$ Q5 [cyberpi.console.println("--------------")# h& |5 a- p k6 t _: Y
cyberpi.console.println("按下A鍵開始語音辨識")
+ O. K! n: n' `2 }# a3 ]# Xwhile True: j+ Y0 Z% l9 K3 \
if cyberpi.controller.is_press('a'):
1 A! T4 b) ^ m. {. \ keyboard.press(Key.space)
! u- c$ T% k) G9 {, _ cyberpi.console.clear()+ m6 M) r+ a- m) Q8 c9 A7 ^( {
cyberpi.led.on(100, 0, 0)
2 H& H r9 K$ E0 ~. z/ a/ o cyberpi.console.println("開始語音辨識")
; }" ?9 ]! { [' ]2 r9 z cyberpi.audio.play("switch")% ~! g s) E7 `2 r
cyberpi.console.println("--------------")' }+ n! Y; h* O) k' n4 L
cyberpi.cloud.listen("english", 2)
, K. N4 t/ S0 d/ P. }2 n9 I cyberpi.led.on(0, 0, 0)
8 K$ K) `# f, U) R& A6 m say = cyberpi.cloud.listen_result(); J7 B8 U) B- `/ `8 C; _
cyberpi.console.println(say)
3 t+ Y) T- v' ^% M7 G( H7 B- i cyberpi.console.println("--------------")
% H7 ]7 r2 r; c$ I' W! I7 x: E! x for i in say:
% f! B$ V ?2 K# U' }$ t if i == '':7 ]( G4 G- j! F1 Z7 }. l) w# f1 h: D
keyboard.press(' ')
1 z' a. `1 q |- N else:
$ I) h" e* I) @: t3 d+ {! M7 N @ keyboard.press(str(i))
8 R- T% z2 ^2 G' w: e# [; M time.sleep(0.03)
# f6 c& s6 r' b4 M3 u; x9 T% t0 `6 r- s5 _4 b# P
matplotlib音量柱狀圖
1 \6 n1 {' _9 [: n- v% o; oimport cyberpi
% F% n, Y9 {& I ^% m( r' g/ Y0 Y: limport time: e1 V" j H0 p5 ~" D- r) ~8 N
from matplotlib import pyplot as plt& ]$ c, q" g, O6 [. H5 P! Y' S
0 o( c9 D. j4 q( {plt.rcParams['font.sans-serif'] =['Microsoft YaHei']
* J% H) t" |7 L: Dplt.ion()
8 A5 R) `9 z* b; N- W
5 R) z- A: \0 O9 Owhile True:# t, G' E2 a/ E' o' I* s* ^
loud = cyberpi.get_loudness()
" m/ \* v$ J$ J8 M! H; y plt.clf()6 `3 a# D, Z+ p, z2 ]
plt.xlabel("數據名稱")" u1 \# v- |- R1 N& v
plt.ylabel("音量讀值")" I# Y$ `$ C3 O, s( ?
y_locator = plt.MultipleLocator(5). k" S! e& `( W0 n
ax=plt.gca()# B: b4 D: o; w6 m8 C- U
ax.yaxis.set_major_locator(y_locator)
0 x K, R# H( J5 s& w& k, v+ M Y plt.ylim(0,100)
7 a f6 I6 f: T0 ?3 e% ^; } plt.bar('音量', loud, align='center',label=f'溫度{loud}')
1 k' [ w; s& ]( a plt.title('童芯派聲音感測器讀值')5 o% J8 b: c3 U+ o; U b
plt.legend()
3 l" T1 L' u' O* J% y plt.show()4 n) C, d( w4 {& D
plt.pause(0.01)! B8 c: g. C: z2 L D
( \, d4 l2 h5 P; M1 ~4 ?& @# S5 X
matplotlib 多圖表顯示
4 \ A( s$ f/ o5 `% M; U: x. z. `5 [: J, R( B
from matplotlib import pyplot as plt
; ^. d* G8 p2 _4 [ bimport time' z9 r# [# z* A% b
import cyberpi
+ l6 {) o, `* O" }- j; i& V
" s, b9 r; J0 j# }4 H8 W3 Z1 T) eloud_list = []! {0 k) w N9 o- u* l
bri_list = []# f; f$ P2 b# X/ t
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體
/ P/ M4 a2 [" X( Kplt.ion(), [0 W) ?2 A$ H
plt.figure(figsize=(10,10))
; b4 w7 Z$ [' K, m( T& d! nplt.figure(1)
, ?6 `* d! J8 H% p/ a& Wx_locator = plt.MultipleLocator(5)
# |- f# u- h( ^9 `! m+ Cy_locator = plt.MultipleLocator(5)9 M& X. O8 U9 o( y4 L8 v
while True:! ~5 ?+ u9 q# i0 p
loud = cyberpi.get_loudness() T8 k/ x8 q" e* }& E
bri = cyberpi.get_bri()9 Q# K, Y& S8 s# e" p
loud_list.append(loud)
N9 T' Y" A, J; U bri_list.append(bri)/ z8 v) _3 \, M; T6 X- ~/ C$ L
battery = cyberpi.get_battery() J6 r! N f6 ~0 l
size = [battery, 100-battery]
$ D2 O8 e: F' n status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']
# y8 M( G, \" w$ R4 c2 t ax1 = plt.subplot(221)
, y& Y$ d' L5 ^. V, Y# l+ C) `% ^ plt.title('光線折線圖')/ m' W6 ?- C: [8 g- v
ax1.plot(bri_list)
5 K3 ]0 q% N3 E$ |/ q0 U6 j7 i8 W1 ] ax2 = plt.subplot(222)
. D' ?( T x5 I7 t plt.title('聲音柱狀圖')" Q( E# T/ @& @3 J# ]
ax2.xaxis.set_major_locator(x_locator)
) W% |5 u* z3 L+ L$ M4 @ H4 N7 o ax2.yaxis.set_major_locator(y_locator)
: c6 u% j' c8 j# \" K plt.ylim(0,100)9 Q* ]8 P9 v) }8 [2 X7 e7 Y
ax2.bar('sound', loud)
: d* b4 ^) y0 o; n3 u4 R ax3 = plt.subplot(223)
8 v8 i1 q+ ^2 F ax3.xaxis.set_major_locator(x_locator)( C; y8 U6 A3 Z N
ax3.yaxis.set_major_locator(y_locator)
' a! J$ M/ b. g6 U plt.xlim(0,100)2 o$ Q3 p1 z3 B2 u
plt.ylim(0,100)( |6 m' |' y E4 ~9 ]
plt.title('聲音、音量散點圖')
5 P/ ~- q( V& K: {& { ax3.scatter(loud_list,bri_list)
G3 A+ }1 z, K5 I0 ]& ^ ax4 = plt.subplot(224)
5 h: I/ q: ^) _; f* X- h ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
9 [5 O, w9 r$ E9 K3 M plt.title('童芯派電量')5 v% m B' ^ r3 K
plt.pause(0.2)
5 L- f/ |; v# N+ k plt.clf()
O9 S$ ~1 `$ y" ~: E if cyberpi.controller.is_press('a'):
3 P v+ U; B+ ]2 D) K, V2 ? break+ `" ^- P" I$ m4 C
if len(bri_list) > 500:$ g6 l, I3 @4 X& l$ N
bri_list = []
$ k3 r' S7 W& J" u& L loud_list = []
2 O, s9 r# y8 G2 t$ o3 f2 @: e
, j g" y( e* a. ^3 R |