本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi ' w! I8 w: d0 S# w8 C
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。! j& M2 u7 Q7 ]1 \
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載 2 q) w# \) T p# t7 T
- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
, J: H* l3 q. u- j4 y8 \ 2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)5 R8 h9 `9 z7 h, J) G2 V
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。) q4 I# x1 p6 X6 w& p' R5 {
) k }( C3 i) ~1 N+ D6 o5 J
- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)- |* T- F& y; E0 w9 A/ P! S' L
* y7 }9 Q4 b! h o6 W, n( _
- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
; L' u& H* U1 d8 |) p
+ S' | O' d2 S% R- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。. O3 A$ U8 A* @& P2 j9 e: Y! d
+ c5 L! X; j/ d, K Q3.童芯派第三方編輯器程式設計準備
0 `0 f' }: V! Q% N: s6 m& H( ^- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。+ n( v5 j- u7 c( F# D7 [5 R" x! l
2 W' t( [0 V3 h+ z2 i1 O7 ?! L D
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。
4 C; g' e5 q3 I' h5 t6 k: H/ t
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
+ T+ l7 b4 c! M- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。
+ n' ~+ ]6 S) g# N
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。
; s( a! ]3 L* H/ e) H# U% F. N$ Z
( g5 ]) a/ d3 j. x6 |* }; y- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。9 G3 n( |. H6 W W
% V. y r' g8 ~0 \- m
4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 2 X0 N/ h6 V0 _% K4 {6 `$ z
5.一些程式設計案例: X$ b1 Z+ d3 Y4 @, z
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput
5 N7 x" p5 R2 }: T9 Z+ j3 L7 ^功能介紹:
5 U* X: F# y" c) z( { ]# A利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。
4 E! P' [: S: `+ V+ t$ b5 u1 Z3 \ S通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。/ i6 z( j0 U) Q
結合藍牙模組可以實現無線滑鼠的功能。) l: x D1 n! m: i
p0 B$ A3 {9 v
from pynput.mouse import Button,Controller, H& {; I* y4 v2 A: i6 x; n8 V
import cyberpi. E) V4 ]( w5 |. n- x
import time
1 q# a: A. D6 c8 r# g! q5 Y
8 }+ u. C" d6 C4 Ymouse = Controller()! H. `) y6 C4 t) ]" h# W
7 k' r, L% X/ l+ N
while True:6 S6 b, n% ?+ v" M4 R3 k: s
if cyberpi.is_tiltback():
8 U6 l9 I1 y( N2 P mouse.move(-3, 0)
, v; c9 ^4 ~+ [% m3 t7 ~1 U; ` print(mouse.position)! u U- s( X% u1 F3 H* _
if cyberpi.is_tiltforward():, [0 o9 t; m& r- w$ w
mouse.move(3, 0)
$ k! R4 Z; s6 ?3 I6 u# J3 ^6 I: P! S if cyberpi.is_tiltleft():
9 y$ H6 Q4 B% z mouse.move(0, -3)
0 M/ }; R% M1 }) Y4 q7 x0 x if cyberpi.is_tiltright():
6 M4 L# \% ~2 j1 p$ y1 j7 G+ U3 } mouse.move(0, 3)
U3 h; Y1 G$ `+ x3 p7 p& T if cyberpi.controller.is_press("b"):
1 ~' A3 [) k; M; ` mouse.press(Button.left)' c6 }; ^3 l- E
mouse.release(Button.left)
* [9 q) c# \$ m, W$ [ mouse.press(Button.left)! U9 f- s/ d7 I6 l- T+ X! j4 l$ d
mouse.release(Button.left)$ ^6 M. ]! O' t/ |! @
if cyberpi.controller.is_press("a"):
0 H) h3 E1 f6 C; w9 n5 t, _, @" k0 g mouse.press(Button.right)" E7 }& N3 L$ T$ R% }5 E
mouse.release(Button.right), L F( R" X( I! D
time.sleep(0.01)) t9 K7 B+ L& _. y f& n
& H6 O1 d. X& o7 {. g% I" [1 t2 {+ m: B6 ?; d* f6 }8 P, n j
語音打字器 / h. m/ m9 D9 y- O- T! n
功能介紹:
' M: S8 @/ f7 U/ H5 m% M# p利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。6 \* X# Z. Y8 K0 b' g8 |6 h7 K
將語音辨識的結果通過pynput在文檔中打出來。
* c6 Y2 h3 a/ ^ l9 j該程式目前只能支援英文。
; P$ X4 [2 L7 p, B) W4 t
0 `+ m! f) N1 @! M( h' y6 e7 V/ }5 Wimport cyberpi5 u R9 U7 s+ R+ a2 J
from pynput.keyboard import Key,Controller" s0 m A! k9 s' J. g6 S" [
import time
' e% f$ \3 ^! \; o- l/ X+ d ! J4 C7 H, ~- a3 g) C5 @
keyboard = Controller()' N0 l- I- J& x
cyberpi.console.clear()
6 P- g/ ?1 T% ]$ Rcyberpi.led.on(0, 0, 0)
1 V1 e Y/ w6 G$ qcyberpi.set_recognition_url()
7 c. @, y' R. c% O* pcyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得8 N+ U) ]- m4 Q; p$ u( {1 o
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼")
- w- Q! x4 r' k( F/ D+ ~while not cyberpi.wifi.is_connect():2 [, T+ x9 w2 L* t
pass, r8 i/ ?7 _. b$ s
cyberpi.led.on(0,0,255)7 A- U0 X0 B" k1 S
cyberpi.console.println("WIFI已連接")7 Y5 a% f/ R7 |9 ~5 H& J+ e+ L
cyberpi.console.println("--------------")+ Y3 ~, D- G( m5 `* n# g! e! _1 U
cyberpi.console.println("按下A鍵開始語音辨識")
* C# @/ M# L- T- K+ hwhile True:* X3 s7 ~) R3 p: \0 `3 h
if cyberpi.controller.is_press('a'):
7 N8 Z" N4 b7 K; z keyboard.press(Key.space)& E5 C7 b. T0 K
cyberpi.console.clear()
5 F; R4 p' a, V3 d$ q cyberpi.led.on(100, 0, 0)
% _1 m: N& ?+ e- g i8 _7 q cyberpi.console.println("開始語音辨識")# ~6 `3 W5 D4 g
cyberpi.audio.play("switch")
& y4 L6 N. E2 h) A cyberpi.console.println("--------------")9 F |; l" P+ ^" C- ?% Y
cyberpi.cloud.listen("english", 2)
5 h: X% S9 I7 F cyberpi.led.on(0, 0, 0)
% a( w1 J, V7 s7 O- _* F0 n g( N say = cyberpi.cloud.listen_result()2 a& ?/ _$ O- j8 B/ L; ]9 J
cyberpi.console.println(say)
9 M/ `. y) `7 c' V, D& H5 i2 | cyberpi.console.println("--------------"). g8 G T6 G% | }$ R& z4 ~
for i in say:
. V( |& W$ h7 w: R8 w if i == '':; B+ o* n7 L' ?: _, ?" w
keyboard.press(' ')4 _9 B/ o8 j5 H) c* d! Y
else:
( V6 }/ b) l2 v& {( v keyboard.press(str(i))2 ]4 D9 `) Q+ D: q
time.sleep(0.03)
, L1 n( D9 L- X; `5 U& C
" ^& m9 V1 n. m* ~matplotlib音量柱狀圖
' Q) E! O4 Y6 g% cimport cyberpi! D' |6 j& j- J3 x; A% J; W
import time
" j0 E8 U( G0 s, Cfrom matplotlib import pyplot as plt
, g; V+ c" _/ |- m% }; L- x
1 @- ?* F8 ^3 O/ E5 n& v/ Qplt.rcParams['font.sans-serif'] =['Microsoft YaHei']
$ b5 T) `0 m7 z; }3 H0 rplt.ion()
6 A/ V) @6 k. ]5 j4 K: y0 c+ a 1 [; U1 ]6 }% {5 w* k, a7 J+ U# }
while True:
/ Y& M/ \; K F* `% O ` loud = cyberpi.get_loudness()
6 Y: }2 R) n9 w; J# E$ g! c plt.clf()6 l# [! R9 y/ `" F" T) d$ w
plt.xlabel("數據名稱")) r- i7 C: V7 m6 {5 O9 I' h
plt.ylabel("音量讀值")/ e# A. N- b# g& Q. j+ v% E( J0 q
y_locator = plt.MultipleLocator(5)
6 D2 g8 w' e0 H$ \ E; m ax=plt.gca()
: r& m J. ?; m: a: f: f. ` ax.yaxis.set_major_locator(y_locator)- T4 B* B& D- r* F
plt.ylim(0,100)8 e; r9 D: A1 N0 f
plt.bar('音量', loud, align='center',label=f'溫度{loud}')
# U0 M6 t; y: x$ J/ B plt.title('童芯派聲音感測器讀值'): y: r9 O* ?. \ Z
plt.legend()' Q, S( M7 }9 z' M
plt.show()7 [9 E# C4 B3 m- P! g
plt.pause(0.01)
" K8 ^# o% K5 K% C$ ]0 Z1 m% ?% b; i7 Q$ [
3 s$ A9 n2 _/ R9 l$ V% I" B: i' ~
matplotlib 多圖表顯示9 r' g1 }% v1 L4 V9 l5 ^
, F0 D' J! _7 N( a+ q/ R$ |6 S, x1 ~from matplotlib import pyplot as plt' j8 a- n2 e: X' ^% a K
import time7 Q c/ Y5 V2 w* ^+ J
import cyberpi
7 i: E# @; x2 f4 _+ ] 3 P9 ]/ d; {9 ~1 ~) m1 H4 @
loud_list = []/ \2 r! p& }0 l5 w
bri_list = []" p3 P9 B' m4 i0 H- D/ e( s
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體
; q7 V6 V9 Y$ P1 `! b& P; l- Vplt.ion()3 [$ y2 ?9 k8 `7 s# |
plt.figure(figsize=(10,10)); @' @$ j3 @0 g( H' B
plt.figure(1)
) i2 |, F8 d5 K& e' Q7 T9 ux_locator = plt.MultipleLocator(5)
" D* Q! f' k2 O$ V! _y_locator = plt.MultipleLocator(5)* K; h2 q7 O% O
while True:2 e- t5 R8 Z" R3 b0 p
loud = cyberpi.get_loudness()
$ @9 f) }1 Q+ x+ f bri = cyberpi.get_bri()( m" ]8 [1 N' y% J ]6 l8 I, X2 i
loud_list.append(loud)' ?4 \: x" H0 [
bri_list.append(bri)6 _# `/ j# s+ Q. g7 r9 a+ ~
battery = cyberpi.get_battery()& s9 ]: [" C4 k h5 F( H3 Y6 M) i
size = [battery, 100-battery]4 k' u+ q) f6 d' o9 G
status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']& D }! R2 r- P0 u; I
ax1 = plt.subplot(221)" J( x1 c, ~! }; w7 |* t" k
plt.title('光線折線圖')4 a* }; I! Z/ X0 v4 N- Y$ s. Q5 ^# o- [
ax1.plot(bri_list)
5 H2 w+ _( x0 j) k ax2 = plt.subplot(222)
+ |' y y' T5 j8 D7 V: x2 ]: \ plt.title('聲音柱狀圖')
3 m* _$ D6 K/ H2 j0 h+ w ax2.xaxis.set_major_locator(x_locator)
, X) z- f( ?7 J' [1 P6 @4 n ax2.yaxis.set_major_locator(y_locator)6 [* C8 _9 h% I7 u
plt.ylim(0,100), D7 S7 N) F( } r: a* U+ ?+ d
ax2.bar('sound', loud)" ^ E; i! X5 f, ^+ P( A
ax3 = plt.subplot(223)
4 e7 S7 o9 ^( I ax3.xaxis.set_major_locator(x_locator)9 Q. D# p& r7 F, n( G7 [+ o1 {
ax3.yaxis.set_major_locator(y_locator)
! H4 _) u/ i3 g; z. v7 z plt.xlim(0,100)
# C5 n, x9 g* c4 w plt.ylim(0,100)8 w& ~/ a" y6 i" y, W( L& i
plt.title('聲音、音量散點圖')5 P% r9 r0 H( H: T
ax3.scatter(loud_list,bri_list)
8 [1 N% i3 }2 \& A+ i4 ?. G9 v3 a( ? ax4 = plt.subplot(224)! `" g9 A0 W, Q7 k" U2 I2 y
ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
9 z; n/ W x( L3 s/ E v plt.title('童芯派電量')
* N T- j5 _( _# r+ E0 | plt.pause(0.2)
( d- ~& ]3 h5 C+ Z$ Y9 J% F plt.clf()
# H& r! }; F+ q2 C2 k if cyberpi.controller.is_press('a'):0 p& O" i0 } g) g
break
" F6 e+ Z! a+ D' r if len(bri_list) > 500:. w) v( B4 O/ U' ~; T8 O
bri_list = []
/ m4 {7 G- s1 A3 |6 x# J) |6 ^ loud_list = []
0 s7 P7 V* J- a c3 i; ]: o% \( Z% t1 g) l
|