本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi - a5 s) q$ r; K& i$ {0 x+ Z! Q6 m# c
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。* p7 R8 V' k/ k. X* F
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載
% e; O) S: _( @9 ~' |8 S; f- x- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
' [7 d) I6 f3 R; Z9 Y: Y8 } 2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
. o1 y6 ?4 P% z# d. [/ R
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。& c& ~, y9 S7 ~" U8 W* R! c
3 c g' U7 x( N0 ?, K- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
7 v) T' _- P& ]1 W2 M# Y
# o+ s8 T' c- t$ m! t$ x4 h- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。, w# `- X, @) N1 E! h
* f2 Q% i! N6 R9 B
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。1 Z7 B5 ]7 m( z( G2 d, i; r; j
5 J% {& u" Z" E8 z0 j# S: ~
3.童芯派第三方編輯器程式設計準備- x# I% V5 A7 n- R/ Z
- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。3 b d( @2 j% J! q
~/ ^9 ^. K# Y6 V% U# U/ L- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。* W! _, N9 a# R/ G* Q3 P4 @
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。 & v% B7 f0 J' E3 e
- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。
" H4 v }! D2 \+ Q! H
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 ! O( m- f G3 n: q9 S" Y
+ r# y- h' [3 g3 D* [8 K
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。
, E! q! t8 F5 n/ N , o/ ]6 Q x Z* P
4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。
7 G: C6 K5 m3 L V! ` s5.一些程式設計案例- N1 y! @1 W: m% r4 E
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput : m. ?) d! Z9 q- B
功能介紹:9 c+ ^( [" F( S- U$ u$ o
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。; v; X" T, o8 ], _/ D3 S
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。
. D0 ]* H+ ]& m/ B/ ~7 J結合藍牙模組可以實現無線滑鼠的功能。
5 p5 h: _9 a7 n- d" D! @$ H+ }' V( r; R5 ^* E: U: Q2 s6 i
from pynput.mouse import Button,Controller* V( k" a+ {. D0 R
import cyberpi! ^* B; u, q* V4 W( `* ~8 T
import time
) H9 Q% v; N% p8 x
' F& |7 d: e& o5 Smouse = Controller()
- E( I% X/ K6 w% B: Y2 m9 _# p0 `
' \8 L3 N( L) `8 M9 }while True:
- S; w% x& ~, h" D* e if cyberpi.is_tiltback():
J( @/ n4 {; f; d6 k! j mouse.move(-3, 0)' H) x! F6 E! l8 P
print(mouse.position)
, l8 k/ N h3 u) i6 l9 M5 u* G if cyberpi.is_tiltforward():' M* H2 s. V+ e4 d% ~# V$ T1 _
mouse.move(3, 0)' q0 o2 _: ^' I
if cyberpi.is_tiltleft():
% F) v5 F% p5 x0 L9 }0 K L) d mouse.move(0, -3)
# d" @2 ~' e9 W, c2 `1 S. ~; L if cyberpi.is_tiltright():
9 c/ c- W5 _$ t" H0 g mouse.move(0, 3)" h' k1 ?2 T/ s
if cyberpi.controller.is_press("b"):
6 E- W4 T- w2 U% z( l5 M mouse.press(Button.left)6 u8 G$ C1 E/ X2 [
mouse.release(Button.left)
. {0 f# D; m1 G3 Q# P6 u& A+ @ mouse.press(Button.left)
! ~! \7 K6 [ H0 {; }1 j mouse.release(Button.left)4 E U0 V& n X3 q. ] ?
if cyberpi.controller.is_press("a"):$ \8 d% l6 [1 Y: D5 a0 I& p
mouse.press(Button.right)8 C3 \7 m) v2 k9 V" u5 {6 n( B
mouse.release(Button.right)4 Q8 T% l! h; O- r2 G5 |; q6 x( a
time.sleep(0.01)2 d9 z. z, t5 \, N2 m
0 r) E$ [: z! Z6 Q' R
8 m# G+ w- M1 X2 L5 f語音打字器 + D- n+ @, P' C/ L; m6 F
功能介紹:7 ]8 w* e4 @) L0 }/ {
利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
9 ?* y. d+ Z+ {! `( p- g將語音辨識的結果通過pynput在文檔中打出來。1 @" d) C p+ ^1 K+ A8 E" h
該程式目前只能支援英文。
' o( h+ H/ ^+ K% I) V! {. i% Q/ x5 a+ g- O" E9 W, ~; w% U/ M
import cyberpi
& R8 w- g0 {: |! g B [from pynput.keyboard import Key,Controller
. O& x7 k( j. ], Y: U4 d3 L: }7 D1 Zimport time% R w R' ? i4 ^% P2 W
) j6 k3 ?5 f% g% M9 A( _
keyboard = Controller()
2 v/ ^) r7 r! g- P4 E* r9 [( r+ Hcyberpi.console.clear()
- c( J- T& ~! b; d7 rcyberpi.led.on(0, 0, 0)
5 G2 g' h8 i p! Ecyberpi.set_recognition_url()
' g4 ]# t( f" \+ h' z8 [1 bcyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得
* r8 W- A- _' X- ~' H/ L$ q1 P2 pcyberpi.wifi.connect("WIFI名稱", "WIFI密碼")
$ K" i% I1 e4 L$ n' d$ Vwhile not cyberpi.wifi.is_connect():' x7 k( [ W: R( J3 `
pass% X/ s x2 I9 f2 Z3 k& w6 F% o) o
cyberpi.led.on(0,0,255)
% l3 A- w. H* R5 u) C' g4 o" F$ T( Hcyberpi.console.println("WIFI已連接")
; c, s6 [+ Z% Y7 G1 {/ h+ Lcyberpi.console.println("--------------")2 D3 u1 B+ v- m! f
cyberpi.console.println("按下A鍵開始語音辨識")
; s7 z1 N R3 u6 }& Kwhile True:% v8 D0 |; [3 Y: _7 z& k, o8 k0 n
if cyberpi.controller.is_press('a'): X/ n& K+ `3 L0 b
keyboard.press(Key.space)
& i& ^1 u \6 B0 B+ a0 Y cyberpi.console.clear()
) J6 I2 X, O% S$ j3 I, W# w cyberpi.led.on(100, 0, 0)
1 c' D( A" d8 E cyberpi.console.println("開始語音辨識")9 l0 `+ t2 G" R7 L/ ]
cyberpi.audio.play("switch")
4 y1 y6 }& Z) |* e cyberpi.console.println("--------------")8 q: Z+ d( w) K: a! \( V( s
cyberpi.cloud.listen("english", 2)+ P) I6 g: r1 H% N. i
cyberpi.led.on(0, 0, 0)6 |8 S6 P# a$ {. ]) K
say = cyberpi.cloud.listen_result()
5 N4 A1 U9 O* v. ~; O* n+ H cyberpi.console.println(say)
* V% }; {5 M& U# O: T9 v1 ~ cyberpi.console.println("--------------") i$ s% ]' L5 d" L! Y
for i in say:8 k/ [6 z- H- k3 C8 t; o' V. D
if i == '':- I- \9 {- O4 @% o! ~
keyboard.press(' '): d- B: [2 ? C5 x! Q0 z
else:( H& Y; |0 |4 f" P% v' c8 |
keyboard.press(str(i))
6 g3 O3 p% r# |0 C: o6 Q0 J time.sleep(0.03)
; T$ q. U6 S/ _- P |1 y. ^% D- f, a* g' _5 O. D
matplotlib音量柱狀圖 7 ]) X3 T x- C4 a5 @# @8 J% V' t
import cyberpi
' K9 y( x) H/ L( b! T7 {) zimport time& b* m9 p, U" W+ j( q0 S$ q
from matplotlib import pyplot as plt6 g; g" A9 n6 |% @9 d' }
6 E P4 D- h- U! r5 S) A
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']
/ R, @. b$ P: S+ zplt.ion()
7 r9 u; T. s9 E. d- L3 I 5 R9 z' o3 [0 `; i2 k
while True:
2 p) u$ i3 B# s" g# C8 v$ d7 c% z& W loud = cyberpi.get_loudness()
5 m3 h# s. r) x- U- A plt.clf()
; `& w4 j# N6 H% h8 ~/ n& ] plt.xlabel("數據名稱")
8 Y' v# F/ d3 U8 R0 L5 [$ c: B& R plt.ylabel("音量讀值")
) O& r( |" ~6 V, Q y_locator = plt.MultipleLocator(5)
+ H/ a ~4 Q1 z4 | ax=plt.gca() F8 q' X& {) s; z7 _3 S3 r/ I' Y
ax.yaxis.set_major_locator(y_locator)
Q& |! t: l4 I! j plt.ylim(0,100)
! J/ h; a9 b9 I J0 K plt.bar('音量', loud, align='center',label=f'溫度{loud}')
/ k A/ M, D3 _: N plt.title('童芯派聲音感測器讀值')1 [4 G7 h% c2 o( n5 ~
plt.legend()
1 L7 |3 E5 t$ A. U plt.show()
. \# L6 Y4 z! U7 N7 U& V h- b# o plt.pause(0.01)' W( v; g4 ]* \( s1 Q
( I9 s% @# a* B$ ^5 C7 R, E
4 |) I- o- ?/ B9 }
matplotlib 多圖表顯示
6 x3 [8 A- x* |* h m% E9 P; L. W8 T
9 z7 G; k0 t) D- Ufrom matplotlib import pyplot as plt3 e1 l* {5 {/ D+ C8 u2 _
import time
. O5 Y( P! p2 f5 Qimport cyberpi0 x9 X J2 I' D3 Y6 ?$ k# J* `" \3 z
+ P/ d$ f2 F0 ?# h
loud_list = []
6 l4 c0 ~8 }* n+ U- V: Obri_list = []
, z& \9 @8 j6 S1 M9 U3 _6 E1 Tplt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體
4 V c. \. ?, E. |9 o' v5 F1 E( Zplt.ion()
& L. G' h! m1 rplt.figure(figsize=(10,10))
. O; k6 x7 m# ?/ A1 F# Y. Yplt.figure(1)
" |' V" u n: d- z" vx_locator = plt.MultipleLocator(5)# z3 {2 ]8 b2 E4 R( V, ~8 D
y_locator = plt.MultipleLocator(5)- T; \( x$ C3 Y
while True:4 D) @- `- r$ D+ [0 X4 t/ W( m
loud = cyberpi.get_loudness()
( M/ {+ h5 @; j bri = cyberpi.get_bri()
3 Q1 j4 t2 u2 P loud_list.append(loud)/ q( U# w, O/ q6 K7 Z$ @0 W2 p
bri_list.append(bri)) [: e+ v: W" e( `2 \4 _
battery = cyberpi.get_battery()
+ Y# ^( J0 F5 ^6 ` size = [battery, 100-battery]
1 v) o6 U% U6 N! T* c- k status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']
) ~* u- c0 E* R: ` ax1 = plt.subplot(221); v# E7 f! }' O( B" c' m
plt.title('光線折線圖')8 j5 E* A4 N7 A' T5 \+ F+ M5 k
ax1.plot(bri_list)3 P; w4 Z2 z! l; i1 e
ax2 = plt.subplot(222): b& s8 c \. \1 f2 j! I2 z
plt.title('聲音柱狀圖')
( q; ~) K* F- \- O% s: g ax2.xaxis.set_major_locator(x_locator)
3 v# a% Z" _8 i. q ax2.yaxis.set_major_locator(y_locator)
$ O2 l+ t. k1 a% J7 O/ Z plt.ylim(0,100)5 }1 \# k! q% z3 R' O
ax2.bar('sound', loud)2 K- I m# E/ J, ^+ H! _ V. `
ax3 = plt.subplot(223)
2 t& ~2 R0 h1 X: D# |. L; w# |0 t) o ax3.xaxis.set_major_locator(x_locator)% O+ T/ X, P$ P$ {+ T/ `
ax3.yaxis.set_major_locator(y_locator)
1 d$ V8 n% `& T' P plt.xlim(0,100)" Z* E& [; X% Y* t, l; Z1 F" j4 c
plt.ylim(0,100)
# k# U. [6 A2 g' P( _( c plt.title('聲音、音量散點圖')2 K% \: X# B! U5 W" ~
ax3.scatter(loud_list,bri_list)
' r0 R& [5 E' k" ]/ M/ l! @ ax4 = plt.subplot(224)
# N: `" `" ~4 N" [3 j ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
; l$ z( r" n( L/ P3 N" }: { plt.title('童芯派電量')3 `0 t+ R! ]. w+ a$ h7 A
plt.pause(0.2)
1 p6 x" g* T6 D plt.clf()/ y$ P! w3 E3 n0 n+ o' @
if cyberpi.controller.is_press('a'):
8 d8 y* d( i# c8 W% {. k break
$ N+ W; L- T! D' t+ e0 Y- Z0 R if len(bri_list) > 500:0 Y' h- d" X) t$ t9 b7 j1 z# |
bri_list = []: @4 q" K) R: s
loud_list = []- N1 o' w7 a, D* `
: v+ m$ g, X) g8 Q
|