本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi
/ G7 B4 J8 j$ c- ~1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
! h8 k1 n5 i4 N9 {% g0 n- D
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載
: F& S3 w$ S7 o+ R+ w% Z4 b- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
, q* X( b9 n, i4 |2 D7 r u 2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
4 ^9 W. y" e5 s0 R
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
2 j6 C ^( P) e8 h4 D H( j ) s# ?2 b9 r F) \
- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟). ]& X8 L h/ ]
( ^4 S" c2 ~5 }8 p- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
2 d9 n& f c6 Z 3 B9 j- r/ l+ {$ x
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。: I9 D9 w. q. j; ~; R0 q
% W6 ]% s$ M2 |
3.童芯派第三方編輯器程式設計準備
( @! ~3 U8 z2 {% q- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。
, g" D" F3 j4 F& \- v( s 6 J, V2 M/ M4 h6 l; Z
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。1 v/ l: P% C/ W! P
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。 . Q0 l9 G, x% t" \: m6 V
- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。; s1 o7 H4 A: R5 w+ y
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。
& N9 { I# f. D# ]' ]1 F+ K! ]! F. S" t& R
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。* D; U) F" s9 k( |+ B' }
7 b) I7 r. s! w6 E
4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。
% ]9 u' V) e+ I; y/ v$ j5.一些程式設計案例6 Z* \* q- P) t8 f& y$ }3 [# O
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput % c1 u; A s I
功能介紹:
" _' R% I$ t& m8 c利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。; M! A, {& v2 G5 Q# I; m
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。
. ?. ?' t* c! Y; _0 A結合藍牙模組可以實現無線滑鼠的功能。5 {5 @0 e0 I; ?' m, N s
% q- X7 a( a6 s4 h! h! Zfrom pynput.mouse import Button,Controller4 V- T# \8 N, u' m
import cyberpi, z4 u# B! N5 C- v
import time: ^; t/ \& a, e* M& Y. H7 v( C
/ e( Y" ]1 O( c7 K! ?mouse = Controller()2 Y1 y3 j+ {1 S, ?+ G
0 R1 ~2 O* M- \1 d9 `+ n
while True:; f( l2 y$ n+ p& J& T; z
if cyberpi.is_tiltback():
0 a( [3 O9 Y3 H& ]3 \ mouse.move(-3, 0)$ z2 ]$ U* A# b i
print(mouse.position)
- j: L8 T2 t; P6 q1 s, k( v+ ] if cyberpi.is_tiltforward():
6 q, Z- v/ A) c3 }% L H& G3 P mouse.move(3, 0). A4 _% _" N7 \7 e8 Z+ x. ]3 ?
if cyberpi.is_tiltleft():
. O ?/ V0 L' a& B# f mouse.move(0, -3)9 X1 z. J& a! E/ J
if cyberpi.is_tiltright():2 A9 m0 h; _( t5 v+ k6 z
mouse.move(0, 3)
: h y7 [3 T; X/ C+ w B' t if cyberpi.controller.is_press("b"):
% r3 j t# N4 K7 U s( e, @ mouse.press(Button.left)
5 s$ m9 z$ x$ H3 n. { mouse.release(Button.left)9 c8 k& M5 k, _6 z; v- I8 P
mouse.press(Button.left)
1 S; P4 R, L" D) t mouse.release(Button.left)
/ v# N7 G6 }) a" P2 Q if cyberpi.controller.is_press("a"):7 }6 x( |) q- |
mouse.press(Button.right)
& ^" ^! q8 Q, {. m+ \( e. s mouse.release(Button.right)
) N3 H6 H" O# |, Z! { time.sleep(0.01). p/ L6 w$ {1 s
) k/ H P0 j' u3 l$ b, X2 I) m6 r5 S: X& T* c- A5 a) {
語音打字器 7 s; p& f- W( ?- E% V k
功能介紹:
0 ~+ P7 O' U( ^* h7 A! X利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
& ~8 ?+ {3 W: F將語音辨識的結果通過pynput在文檔中打出來。5 M9 `# O1 P1 u- x2 C0 O$ ]! o6 D
該程式目前只能支援英文。2 Z2 R" N( h% `7 y" b
9 I0 J- f* a4 G
import cyberpi
. R/ ~' S; Q& }& D+ b- Hfrom pynput.keyboard import Key,Controller6 O6 m9 A. T1 A2 e2 |
import time
' L. c! f8 ^& m( \0 f. Y
; V( T% Z/ v" m( rkeyboard = Controller()' h; r, P% m' F# S
cyberpi.console.clear()
6 h, A6 v) H) G2 o# {2 \cyberpi.led.on(0, 0, 0)+ G4 _$ ?+ c% E/ s+ ?- N
cyberpi.set_recognition_url()+ c% E! I3 Q+ I6 c0 M
cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得
2 v; q& s; M Q" U3 @3 K& zcyberpi.wifi.connect("WIFI名稱", "WIFI密碼")$ b H$ v! \" I- O- ^" a- `
while not cyberpi.wifi.is_connect():8 s8 u& Q+ q6 ^. s9 \" _
pass
6 }' v7 q; b8 G5 U2 i) K/ _" Vcyberpi.led.on(0,0,255)# Z8 f0 | _5 J u
cyberpi.console.println("WIFI已連接"). w' ?/ K, x$ X8 o1 o0 O
cyberpi.console.println("--------------")
Y9 y4 [. w5 |3 B0 Acyberpi.console.println("按下A鍵開始語音辨識")$ E1 m: o' r; w% W, A
while True:
/ k) s; t* u6 i$ H if cyberpi.controller.is_press('a'):, E% o( o0 c9 p& c' [
keyboard.press(Key.space)
6 Y! }$ w8 I. g8 X, M: w0 z) C" S cyberpi.console.clear()$ h" _; ~# g" L' V' D( ]5 t
cyberpi.led.on(100, 0, 0)
; _- n: h* N$ d: o5 F( ]+ { cyberpi.console.println("開始語音辨識")' a! Z& S) {' B! H/ l0 ^2 `7 a s
cyberpi.audio.play("switch")" g7 {, i- v3 ]' X L% L2 U
cyberpi.console.println("--------------") E7 B& g" z, E/ h
cyberpi.cloud.listen("english", 2)
' C% C @5 _% n+ p# r cyberpi.led.on(0, 0, 0)" H1 N& K) E+ S9 ?8 t
say = cyberpi.cloud.listen_result()
4 [% f8 z% d' T cyberpi.console.println(say)
* S3 v% j* Y) o7 c cyberpi.console.println("--------------")9 C8 V0 n3 u+ |! r, |& m( }+ i
for i in say:9 F7 ?- M, D: ^: p' H
if i == '':5 u# `- D+ |1 b" c8 q H
keyboard.press(' ')
' K1 R% ]3 |' Z- M else:
/ X( e6 u+ }! K0 y8 k4 s3 _9 _ keyboard.press(str(i))
" V# ^2 u" _6 k; M" e1 b: B# H" s/ E time.sleep(0.03)( V' \2 c0 ~% l1 A
3 W8 `: _$ B. [7 dmatplotlib音量柱狀圖
. T% P; a8 z }& f1 M1 `import cyberpi
, Y; Q3 [! ~' l+ Fimport time+ [. G$ N& f# I! {4 _2 Z, o
from matplotlib import pyplot as plt" l6 i; y/ J, e
. g$ n4 ?- o1 m' t$ J3 R1 n# C" gplt.rcParams['font.sans-serif'] =['Microsoft YaHei']! F1 m# s& L* q, X1 S9 Y3 P/ g
plt.ion()0 k/ A+ m) {8 h5 b& J7 U' H
' Y3 s4 s A" d
while True:, k w N; n4 y0 k- U p0 l
loud = cyberpi.get_loudness()8 a. h" @6 b" r3 w ^
plt.clf()
) A' c b; e$ G# |7 S l8 B plt.xlabel("數據名稱")# a! s) k+ X% y# X
plt.ylabel("音量讀值")
~( G% q2 L: D- a8 H$ Z y_locator = plt.MultipleLocator(5)1 P" f2 O6 ^! o% g) D) T J
ax=plt.gca()
3 Y/ u* x5 M* H' I! d ax.yaxis.set_major_locator(y_locator)
) I: x( D& o( I# i, q- W" j plt.ylim(0,100); |; w) h& Y9 X. c
plt.bar('音量', loud, align='center',label=f'溫度{loud}')
5 q# H- B( [: m1 r3 B. J: J plt.title('童芯派聲音感測器讀值')
# X6 z5 s/ Z+ Q0 A3 c% J. v$ M plt.legend()& P1 r6 \. k) W5 L2 h$ \3 Z" G. o+ c
plt.show()4 S# E4 m' @. k2 G& u3 _5 Q
plt.pause(0.01)
/ w |! H) L/ L0 K9 t2 e R
8 x+ R2 ]# s! u( s( a8 `- g, j7 J. L# A
matplotlib 多圖表顯示
, H; M6 Q. @ V* V1 Q+ u
0 F" d/ y: M) K9 w% d: yfrom matplotlib import pyplot as plt! C0 s }4 m8 T% R1 ^7 h
import time7 z; F" D- ~8 t0 D1 u
import cyberpi- y0 ~6 a, v0 c$ U. U K$ M2 D8 c
2 g4 J7 f+ O9 C# y4 X1 C0 H; u. r# Zloud_list = []
% L: @1 N' F, Z5 Bbri_list = [] A& k# m* f% E$ K; \
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體
8 s: m; s* R4 k4 ~; b1 hplt.ion()
& x7 h1 b# N) h0 z" u: z9 I0 `plt.figure(figsize=(10,10))7 H4 w. N! C2 {: t: y
plt.figure(1)* J! ?/ t3 y0 v' _. u0 P" [
x_locator = plt.MultipleLocator(5)
* ^ H$ N u5 g% [$ O: Y: R4 iy_locator = plt.MultipleLocator(5)$ i" k8 V6 T& x" b
while True:
" n; k* g8 k, [6 h loud = cyberpi.get_loudness()7 l4 l! m* R. q
bri = cyberpi.get_bri()
i) f* B. K5 v$ A7 U loud_list.append(loud)
- K- w+ G5 U ]1 t5 p bri_list.append(bri)
& E. ~! ^$ k9 `# I% B; W4 O3 o6 M battery = cyberpi.get_battery()
/ F B& ]3 _9 g# ~3 U size = [battery, 100-battery]
/ M# W) Z2 T" R* ]3 Z3 |9 H status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%'], A6 R' @; Z8 T- x
ax1 = plt.subplot(221)1 {3 b9 P1 I; Y) x4 r9 B7 h3 U. d
plt.title('光線折線圖'), \5 h! p1 Z" b
ax1.plot(bri_list)
8 r) b2 ]; Z( D% I( F! N! k ax2 = plt.subplot(222)
: p* A5 n( A/ } plt.title('聲音柱狀圖')
& X& B& {' r0 V ax2.xaxis.set_major_locator(x_locator)- U! C" O1 z! ]! n" N- B0 e
ax2.yaxis.set_major_locator(y_locator)
" O1 B' H; K [ plt.ylim(0,100): _! l' F- ~% z: s3 v# B
ax2.bar('sound', loud)
; X& W+ c* \' o ax3 = plt.subplot(223)( p+ i/ A: v; t0 t. E+ j1 V9 u8 V
ax3.xaxis.set_major_locator(x_locator)
3 }; E5 M' O5 i c9 r7 L ax3.yaxis.set_major_locator(y_locator): f+ M. b$ E1 Z8 ]/ T+ n9 K6 O4 y
plt.xlim(0,100)
: Y+ o p$ X9 ^9 V) } plt.ylim(0,100)
: D- ?1 T+ h2 b plt.title('聲音、音量散點圖')
; K) g1 f5 D" V ax3.scatter(loud_list,bri_list)2 w" ^# ]# p N
ax4 = plt.subplot(224)' ~) N- u: O$ W
ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})0 w7 O- ?* g& T; f# ^5 j' g4 N; I6 z
plt.title('童芯派電量')
: s' S7 [; F9 |4 Q' { plt.pause(0.2)+ W# g+ [: u' ?/ i
plt.clf()
( @7 B/ S0 u' _8 R$ G8 m& ` if cyberpi.controller.is_press('a'):* B( H9 `8 }1 U# H |2 I4 `
break
& l( I6 o" f" ? if len(bri_list) > 500:
; O& Z1 X" U* z" X8 W" u, D bri_list = []
6 R, Y l9 j1 @) | loud_list = []1 \; |! N% e( J& s7 s
+ z- o% b% f- a! o5 X
|