本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi " f* q- X) A0 H* ^ E$ Q; m, U8 m' K
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。2 I! ~: v( ^' ?( ?1 a" y4 ]: A
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載 3 {$ X+ q3 L, ~- G
- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
! w( B- J# Z4 g' y- b2 @ 2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
2 p" ~1 n% p4 z" @; C! }' |
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。4 J; ?* X9 H; v7 T6 C
3 @ s# m1 e* \# O
- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
4 f* \# S9 G# _) U
2 ]2 A+ |5 R: j0 @: m- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
2 m5 l9 z3 e! M1 o7 P* G6 c6 N
1 p5 ?, Z7 E) ]- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。) l$ [' Q3 P9 h' W
! A( E- v5 n& u5 j& T3.童芯派第三方編輯器程式設計準備
+ _( T$ O% U: n( o, u- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。
1 h8 [0 G4 C# u3 K1 ~% p% D
# }. r f% c: C3 h, r- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。* v2 _0 X2 I# s. f4 \
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
F5 L: I5 ~+ [$ a3 o- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。- L5 r" U( }0 g K- Y
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。
& ~! Y) H" e: ^0 s0 H# ~5 H( ~9 M% t0 o( {9 O4 b. ]# \/ @* v* Y
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。
* L! y. F! d; ^' w& v7 K& K
: S/ L! _, n! f3 v" c0 `. t, C, V4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 7 l; J& l# r1 c# z: k" x: w2 F7 Z
5.一些程式設計案例- X$ _. R* ?+ s3 r! `, L3 F+ q
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput
& r' y8 s! Q7 h- s) K! k功能介紹:9 h" R9 ]: c0 S
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。
, k' c1 ^: d) M1 `通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。0 p1 D9 s4 S6 @0 E9 `
結合藍牙模組可以實現無線滑鼠的功能。
* p! v8 D+ v. _( y
( e; [/ x4 A5 Rfrom pynput.mouse import Button,Controller
8 N9 P$ h2 _# S6 z5 `import cyberpi
9 O) k8 c( v/ t" S& O5 G$ mimport time
" r' N/ `" c' o! X; o
q$ g4 s6 R' q8 t1 E( I; @! Fmouse = Controller()
# @4 X4 W1 |* w" Y- H
4 g j& E1 j# Y! z; l9 cwhile True:8 d+ E4 @* U, I Z( K1 P; p% \
if cyberpi.is_tiltback():
( I& S5 d6 B9 A/ l/ x) N9 _6 j mouse.move(-3, 0) X( F8 @ ^& ]/ D
print(mouse.position)- Q: F$ C D! H
if cyberpi.is_tiltforward():- R8 R' u$ r. Y2 U2 ^4 i5 Y
mouse.move(3, 0)4 z1 a! n2 U$ w6 p
if cyberpi.is_tiltleft():
% O* D; a# e3 _4 N mouse.move(0, -3)
& Y. @& V _: `6 Y: D2 N: E if cyberpi.is_tiltright():
9 F1 ?# w X& Q$ h9 b/ o2 V, A mouse.move(0, 3)
% B0 r5 D) T) j8 N if cyberpi.controller.is_press("b"):) i; ^. B& R$ |1 G5 ^' `& M( Y
mouse.press(Button.left)' U1 U5 s# q4 d/ @- a$ g
mouse.release(Button.left)/ ]" `9 S. M2 n4 _& S
mouse.press(Button.left)) E* B* |4 o) F5 X
mouse.release(Button.left), A9 ^! J3 ?6 F& i. o
if cyberpi.controller.is_press("a"):' j9 m; L/ f' m, c/ Y
mouse.press(Button.right)
& N9 z$ f6 H) g2 o% F mouse.release(Button.right)
$ w2 g0 _1 J4 f" R time.sleep(0.01)2 F7 {& @! l; t% J
0 t7 [$ w, R# [7 ` L2 v( Q5 C) Y
+ n8 s- v3 U5 d8 k- G! m. _
語音打字器
' K2 y6 T$ k- K: D9 U/ ^, k/ Y功能介紹:
- `4 m% m1 x$ D) X+ h, k5 ^利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。# R2 M! o7 X+ i2 _7 H
將語音辨識的結果通過pynput在文檔中打出來。
. q- u" R6 ?& ~ e1 Y5 z7 ^該程式目前只能支援英文。
Y( U8 P* K, e2 K8 u" v8 f7 C- t! j/ t
import cyberpi
4 d: ^% u8 l0 r$ x( w3 Nfrom pynput.keyboard import Key,Controller
5 x0 Q% g2 z* [6 V8 e0 mimport time- K$ q8 T5 Q$ t y
5 }+ @7 M7 ]' x, i/ Qkeyboard = Controller()9 o1 R' D( L5 T
cyberpi.console.clear(), L2 M8 W. ^9 x& |
cyberpi.led.on(0, 0, 0)% Y9 Z1 m* a, }! K
cyberpi.set_recognition_url()
- _* {" w9 G2 ^) g, @" R6 Ncyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得, L5 l6 B' Q# `7 ]
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼")5 q) f' e! p! [, ^# O% C- i' b
while not cyberpi.wifi.is_connect():& N" Z- _$ ]# i8 C6 T
pass, k0 [9 Z- {0 b* _/ N W8 {1 c; V9 s
cyberpi.led.on(0,0,255)
: `, }% Y9 r9 g' T& Scyberpi.console.println("WIFI已連接")
- `& q P7 ]1 D1 E2 i4 Kcyberpi.console.println("--------------")
+ j) u' Z a! i2 U$ ucyberpi.console.println("按下A鍵開始語音辨識")
+ ?8 }: B; k3 N; d* Q3 ^while True:
& b. u \. N/ N8 I: [8 M if cyberpi.controller.is_press('a'):2 Q. m7 v3 s* V. y1 B
keyboard.press(Key.space)
6 D" r$ g+ n6 b) U* ], i) T. T cyberpi.console.clear()
9 u7 W/ c- N# }+ W/ `6 { cyberpi.led.on(100, 0, 0)8 o/ A2 X- m5 L$ N1 ^
cyberpi.console.println("開始語音辨識")
' s# r2 ]2 o) i: ]2 `( i5 q0 | cyberpi.audio.play("switch")
/ s) Q: O/ F" u" p cyberpi.console.println("--------------")9 ^9 C; y9 \: h3 o1 ]1 O# ^
cyberpi.cloud.listen("english", 2)
4 v" e7 S+ e. f$ x' Z3 ] cyberpi.led.on(0, 0, 0). q4 X3 i0 s" |6 b- s% R4 g! l
say = cyberpi.cloud.listen_result()
5 W. o+ ~7 P2 ]. X) l/ E cyberpi.console.println(say)
, K6 Q/ H; q# o2 }( C* t$ A cyberpi.console.println("--------------")% Y3 d# w. A# U; \, {
for i in say:% y6 u$ Q Y4 B6 A6 m$ K& ~
if i == '':5 P6 q2 ?' x; {
keyboard.press(' ')
- Y9 j' G6 k9 ~1 c else:
: [) \6 r4 w) o: F: T/ W# d' p, o keyboard.press(str(i))) N" C( D* ?' f8 D
time.sleep(0.03)
" T# v; @1 j1 V# y; X' r3 g* G: ^! ^ N4 ]( W! M2 ?1 L
matplotlib音量柱狀圖
1 W9 e0 L6 r" O; B6 E1 cimport cyberpi
- N& s& U# n: m6 o! ximport time' P5 A5 i) W) i6 r3 Z1 Y
from matplotlib import pyplot as plt* Q& ~$ \, P. A8 t
. }( ^) G9 T% e4 e( U5 [plt.rcParams['font.sans-serif'] =['Microsoft YaHei']
, L$ O7 ^8 g% ^# E( E. ?; S" D4 [plt.ion()
) D s* G" h3 k' Q* f+ s" ~ Z( l! b& p Y- H: o
while True:
& N- q5 G, ?0 A$ C# _: v. v; S loud = cyberpi.get_loudness()
# X2 H& k: g0 o" { plt.clf()
8 N1 t+ q+ ^/ `" D. }" f" p4 P' f plt.xlabel("數據名稱")% _* I# T& ^0 G
plt.ylabel("音量讀值")/ e" F; Y) c5 K0 [1 |1 E1 D5 @ |
y_locator = plt.MultipleLocator(5)
' Q, K3 ~& P- h ax=plt.gca()+ Z' h) d6 @7 w" o6 d& F2 L$ f
ax.yaxis.set_major_locator(y_locator) }: g4 @8 W ?& O
plt.ylim(0,100)
* [! G) A/ \0 k2 y plt.bar('音量', loud, align='center',label=f'溫度{loud}')0 h% u$ c. S0 G0 Q; a& x* i
plt.title('童芯派聲音感測器讀值')
- R) M: S2 h, J& P: j x plt.legend()
! ^/ h6 @. Y* t; ?* G" O plt.show()
! w1 L$ U% z" h$ C plt.pause(0.01)' J% ]* F+ \+ g: H+ I- o
1 H- }: X* O( m4 o1 v* a, h
# [7 Y, p. d0 r1 [3 Z- X# T) Umatplotlib 多圖表顯示0 {3 g' o- Z/ _4 ]+ o% h3 l
3 D$ ]/ v' L- p+ f0 z4 hfrom matplotlib import pyplot as plt
6 s8 s5 m" J7 k2 D8 ]1 zimport time
8 t" a) j2 b( A: p! v3 l! Y' H8 rimport cyberpi+ X5 O4 x7 H4 J
: f6 R+ i/ K* o! ~! j4 a- d6 Jloud_list = []
: d+ B* @+ K1 M8 S+ V9 u5 K, Ubri_list = []6 V4 H, g* B6 p) V, \* O
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體: E/ f" j+ K& Q, Q: p; M3 I
plt.ion()
Y! s7 S2 z7 w6 _: ?+ d1 [& nplt.figure(figsize=(10,10))
5 v- c+ {- m( M# O7 w$ s8 ?5 aplt.figure(1)
' D8 a+ E) H/ g- }7 j1 } Cx_locator = plt.MultipleLocator(5)% ~' v& z) z$ @- `# K
y_locator = plt.MultipleLocator(5)
5 c! Y% U6 j8 \( e4 Y7 p4 ^( G% zwhile True:
, C$ C4 V/ n: S! x2 }& g/ i* X loud = cyberpi.get_loudness()% m$ ^6 {0 | [9 w
bri = cyberpi.get_bri()" E/ l' |4 \) `8 S
loud_list.append(loud)
! L- w9 ~( E+ p; D bri_list.append(bri)
) D/ C, R( i( B' ~! P$ y# F9 q battery = cyberpi.get_battery()
8 ]& }3 I6 x; I1 W5 M) k size = [battery, 100-battery]
& F+ }- }2 h9 E% } status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']/ `! V ^8 ]5 F: h6 M% F
ax1 = plt.subplot(221)
' J, v8 y7 R) ~* K! x2 X plt.title('光線折線圖')
# O7 D2 e' W( b- O ax1.plot(bri_list)
: T) \+ Y2 L8 O; s; c6 J9 s& d ax2 = plt.subplot(222)
" ^. k+ ^% y* n plt.title('聲音柱狀圖')2 k$ O0 a8 N- G6 z7 Z' p
ax2.xaxis.set_major_locator(x_locator)! R+ A3 i6 B" v% a1 U5 R
ax2.yaxis.set_major_locator(y_locator)
4 C7 i# M z) o& o& o plt.ylim(0,100)
. O N+ O a/ O% U) F) u. x! x ax2.bar('sound', loud)0 l. ?& S7 g! l9 c- P
ax3 = plt.subplot(223)! V, u3 z1 `( q |1 O. F. a
ax3.xaxis.set_major_locator(x_locator)
% U* e! {" m& i: x ax3.yaxis.set_major_locator(y_locator), F- P4 P* s1 s( `
plt.xlim(0,100)* [6 [7 e* O8 E" o/ A* P: C# p0 J
plt.ylim(0,100)
/ F# Y- y1 X. v plt.title('聲音、音量散點圖')
/ [0 H( W. f* F7 X3 v. F* g+ F ax3.scatter(loud_list,bri_list)+ |3 O3 a+ ? B! ~
ax4 = plt.subplot(224)8 _; i0 I+ G. t s' V; D
ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
- \/ R& D/ j% Z# [- k plt.title('童芯派電量')
1 V/ e3 Y2 V e' ~; D plt.pause(0.2)5 z8 U0 ?7 @3 R" f: e$ q
plt.clf()7 F8 ~! O: J; f- k$ ?
if cyberpi.controller.is_press('a'):$ A5 N2 p z, C& V
break; J* [/ p3 Q0 P
if len(bri_list) > 500:- z% L" F s/ G6 _
bri_list = []
% z" A8 B: `) C2 u1 x* T$ z) ^4 y loud_list = []8 d/ Y% Z& e) F( k) L
& S: @6 \/ z. Z" f& _4 P |