本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi 4 S/ ?! T( [8 w Y$ `! ] w& A4 p
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
3 J4 [4 R* N, j) T4 R+ c4 H1 M
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載
% ^+ T3 Z; y. g k% |: B- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
: o z1 V: e! y) C 2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
) S1 t: Y; g/ Z
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
8 ^$ s8 A% E' p: w" B8 X+ _
1 q6 S r& c( v- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟), R7 R! Q( x- c3 `/ J* V& o6 ?
+ H# f" s1 _, g" H- X) c- K( J; ^
- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。3 W% o+ o2 k; j) d+ S1 M
) k( v: ~, c9 g- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。
/ W6 g* |4 W0 t
3 V3 H5 ]& \, y; f$ }$ \+ s! B3.童芯派第三方編輯器程式設計準備- ?1 ?( s( U; C, \0 y
- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。4 Y8 y9 W$ H- i+ d0 I
; V: W2 y3 L3 w! i2 }' `( Y
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。
2 a% L) C q4 ]/ p0 W4 l3 @! N
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。 ( w0 `- h3 |, z6 z, i
- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。! H, u7 ?1 c) x# V& _6 C5 P
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 2 }& g, k! r8 q& O$ @! f; T
0 y: |" q9 S4 \: d0 R! B0 @- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。
+ G; d8 I& F: [0 Y8 c& {7 ]
. i, ]0 l2 ?! h |1 J: z7 N0 o4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 + K1 D" \' h2 Q& _, ]
5.一些程式設計案例
- q& `0 E6 P- s$ [童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput / L6 b- L, q3 y& D- X# n) m
功能介紹:. J$ g" _% | y+ {2 G
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。8 n+ R' Q. q* ]) o; b( m* o
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。
. F& f* r% _2 m% I! c' v' w5 N結合藍牙模組可以實現無線滑鼠的功能。# T- j) \' L' f% `7 f$ k2 j
8 j* z- N( g2 V0 H2 n" F J% Dfrom pynput.mouse import Button,Controller
" ]4 h6 k8 O" l. P @5 }import cyberpi. G( b8 s( H6 X; ?( k
import time7 X' v1 L) @" |$ I/ }
+ M, Y$ T) s5 W3 E- xmouse = Controller()
1 \, E& p: Q5 L0 X- x! N
- q( j9 f+ P$ C7 ywhile True:
7 {, ^- Y! B& p2 r2 g if cyberpi.is_tiltback():
. `5 Y4 p! w3 P7 c x( K+ k mouse.move(-3, 0)
5 x6 d* |+ k# P/ N; B) W I+ W print(mouse.position)
$ |+ j6 @' w5 ^( T7 k* X; ]5 e if cyberpi.is_tiltforward():$ v% E+ P! w6 H! c+ y
mouse.move(3, 0)
5 w7 v, J$ U1 z' s4 h+ [8 ] if cyberpi.is_tiltleft():' o* m- P/ d" r
mouse.move(0, -3)" f$ B$ M8 ^. [( L7 Y9 h5 v
if cyberpi.is_tiltright():4 y" k( I% C, L$ B" W* L* k
mouse.move(0, 3)6 K: C( w6 M, c/ }& b
if cyberpi.controller.is_press("b"):$ U. O/ v! K& K& Y, k
mouse.press(Button.left)
% j% k8 I% C' k+ T% T" K* Y6 C mouse.release(Button.left)9 O8 ^, a, y6 J( Y
mouse.press(Button.left)
, s4 }2 g; s2 _+ @ mouse.release(Button.left)/ t7 ^2 z( T. K' l# D
if cyberpi.controller.is_press("a"):5 O4 }* n9 x5 o; g5 ~6 [
mouse.press(Button.right)
8 d) B3 b4 C3 J6 ~1 H; u- d. f; z mouse.release(Button.right)/ J4 Q3 P' C$ \$ ]; L1 u
time.sleep(0.01)/ A5 b: C) r b* J( T% }
. s' I, F5 u. x. @$ c+ Z( T
+ ~; o: t1 \/ X s$ z$ t語音打字器 , X9 O5 r4 s/ z/ M. y/ w
功能介紹:- f6 @4 C" H+ ~7 |! B
利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
& {* j& R: i# ~' l" }/ Z將語音辨識的結果通過pynput在文檔中打出來。 D6 B3 \2 ]; ?8 q1 ^4 i% i
該程式目前只能支援英文。
- W: a3 }( Z& A7 i( s
3 u8 D. u% ^% X5 ~; ~: nimport cyberpi
) ?. O" J" A8 x, ?8 s: u; S7 mfrom pynput.keyboard import Key,Controller
2 L$ `" }. J+ Gimport time3 Z6 y$ g5 J' y" D: A
; U) l5 ]. U6 F+ \keyboard = Controller()
B: [& C; o; I7 Z# f7 T) _cyberpi.console.clear()7 _0 Z0 K( S( _5 c) c/ O
cyberpi.led.on(0, 0, 0)
+ |+ A$ H. Z8 Zcyberpi.set_recognition_url()& x3 [2 W3 V1 n! z% f: ?* f `
cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得
$ J# j- t9 p7 y9 t4 ucyberpi.wifi.connect("WIFI名稱", "WIFI密碼")/ Y: V( m2 J, @1 M n6 j3 W. v+ I
while not cyberpi.wifi.is_connect():
3 ~6 g+ c! l k* { pass5 J) f; Y* K1 C3 C- F
cyberpi.led.on(0,0,255)
. }# k, L& z6 k1 v7 ccyberpi.console.println("WIFI已連接")
4 {2 m" g2 _2 I n i2 z/ ?cyberpi.console.println("--------------"), F# x: _6 D& M- m
cyberpi.console.println("按下A鍵開始語音辨識")4 o4 P4 X5 s& {
while True:
8 E2 O* @! K* e8 G if cyberpi.controller.is_press('a'):+ B+ ]* o2 Q0 Z2 t/ F" H5 Y) ]
keyboard.press(Key.space)
9 O" p5 ~! M+ Q9 o1 h' | cyberpi.console.clear()% y: s" S, D9 D' }! {: ~
cyberpi.led.on(100, 0, 0)
" y& ?& s: D: d u! d cyberpi.console.println("開始語音辨識")$ {$ C4 w/ N9 G& h) ^
cyberpi.audio.play("switch")1 r$ c2 l$ C5 m4 u
cyberpi.console.println("--------------"): o' d8 `' B4 [* `
cyberpi.cloud.listen("english", 2)
) u K% d: \% ?& j) } cyberpi.led.on(0, 0, 0)6 t' `# k! S+ r- ^0 D
say = cyberpi.cloud.listen_result()
1 _4 N9 O/ p# Q9 |- S# j% x cyberpi.console.println(say) g; C! A7 x: q/ Q6 z
cyberpi.console.println("--------------")
7 ]0 w* j: L5 \1 c* h for i in say:
. V5 b6 Q5 z9 T* m if i == '':
Z% k0 f y- a; t3 ~9 c keyboard.press(' ')2 A D' G0 O: D0 a
else:
+ I r- s- S/ b# F keyboard.press(str(i))$ _5 P8 b3 B$ _8 R
time.sleep(0.03)5 g3 k4 h) L- T; \1 d
; ]/ a/ P$ U: z jmatplotlib音量柱狀圖 ' [7 H& v* j- |
import cyberpi( H1 }) }* W; k8 I( I# N
import time5 D. y& [# n* y' G
from matplotlib import pyplot as plt& c- S5 p2 q; A% R/ H
! B/ L& i" H4 B$ b p5 h
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']
; Q+ S2 E* g% S9 A1 Z) }7 Oplt.ion()
$ R# _$ [' u4 q. k3 D+ Y
7 H& ^/ z/ g. M2 x% _/ Ywhile True:
+ Z, r5 M9 ^7 S( F8 j3 E loud = cyberpi.get_loudness()
9 k# \3 {1 c, m8 z plt.clf()2 \ _' z' v" d \1 e+ b8 d# C) o7 f; B, \) i
plt.xlabel("數據名稱")
6 ?9 r7 m. }, w plt.ylabel("音量讀值")
2 [' w/ M, m) N9 X1 T y_locator = plt.MultipleLocator(5)4 }! M' f6 a( k }; U: R6 h, H
ax=plt.gca(), }1 A, J! V' C2 W( \* T
ax.yaxis.set_major_locator(y_locator)
2 _) |( z5 ^ j2 j. z8 I plt.ylim(0,100)8 H; c/ b8 ?2 U. n, X2 ?3 ]
plt.bar('音量', loud, align='center',label=f'溫度{loud}') a+ b$ w0 M7 z/ P8 x% b0 J$ f
plt.title('童芯派聲音感測器讀值')
8 |9 J' a; N/ _5 N% M& T plt.legend()
* T; p& b/ ]$ y0 i plt.show()
' ]4 d+ ^2 v3 A }8 F2 I9 \ plt.pause(0.01)
$ ]7 p3 T$ I+ y ~0 ?- U
# F4 B' c4 H* p9 X
# G9 i7 n- Y: Y* W+ X+ ymatplotlib 多圖表顯示
4 }: ?* U1 u% E; C; m1 B2 P' V* n
from matplotlib import pyplot as plt
! R! N: z( }/ Q9 d' y( cimport time: [1 [$ l3 `0 d ]2 U
import cyberpi
% s/ j( \ J: c1 ?' \1 k : O& b n- z7 e5 s2 s
loud_list = []
0 y5 q# y- r: D2 u9 k) p. u% @9 Vbri_list = []0 N. G; f& V3 i/ [& N
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體
( y0 u3 S% b; y6 u0 Splt.ion()" g% {) B+ K0 E# ^7 }0 w; k
plt.figure(figsize=(10,10))
3 C" I9 q2 n; h E# x: ~0 |plt.figure(1)
4 P: x# v1 \* V) n; ~4 Vx_locator = plt.MultipleLocator(5)
+ _1 ~* _% f: ^y_locator = plt.MultipleLocator(5)
$ F! m( J7 F0 p& Awhile True: h, ~' g! G2 Y L7 b
loud = cyberpi.get_loudness()
8 T; j( p5 u. v9 { bri = cyberpi.get_bri()& U- V1 b- t$ |
loud_list.append(loud)* _: E, L& U1 @0 z4 D* P" U* a
bri_list.append(bri)
$ w% Z" f+ i4 ~2 A( f battery = cyberpi.get_battery()
, G6 \* K6 Q7 y/ \6 K% L size = [battery, 100-battery]
7 h# o4 v! x* f! o- J d status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']3 u2 M$ P$ x) O" `
ax1 = plt.subplot(221)6 G6 |3 a. o x9 I, U1 O
plt.title('光線折線圖')
2 ]4 H. ^/ G" E! q1 I" m9 ? ax1.plot(bri_list)& q8 U5 _, _( x0 T" {
ax2 = plt.subplot(222)# Z+ p: n8 G3 y
plt.title('聲音柱狀圖')
1 f& W6 @, F- A! Q: H ax2.xaxis.set_major_locator(x_locator)
: }6 H: ]% g% ]! d# K- w1 b ax2.yaxis.set_major_locator(y_locator)% i; ^! ]% J8 G) }3 F
plt.ylim(0,100)
6 D3 p# }8 Y+ g, t% W6 a3 _ ax2.bar('sound', loud)' D' ~+ A( m, F, e. ^# z( x
ax3 = plt.subplot(223)
c( Y/ o- f0 h0 k2 M- k9 M7 z ax3.xaxis.set_major_locator(x_locator)+ K) T8 T# L) [4 D) v& X
ax3.yaxis.set_major_locator(y_locator)
0 K- n. R6 I2 ~ plt.xlim(0,100)3 D2 [2 ]; z8 Z& W- J6 U2 p
plt.ylim(0,100)
, z) J6 z0 m3 M- P plt.title('聲音、音量散點圖')
' h7 Y9 U6 ~- B4 X3 O8 x0 }/ T$ Z9 \ ax3.scatter(loud_list,bri_list)
0 P; n# u T q8 W' O# |, S$ R7 d$ i ax4 = plt.subplot(224)1 Z3 _6 x/ e0 k" s
ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
$ t o: O b: D plt.title('童芯派電量'): l, R" K/ w( E, o
plt.pause(0.2)
1 m8 A- _4 S1 K0 |( f) [+ v% U plt.clf()9 O, `& o# }4 m
if cyberpi.controller.is_press('a'):
0 ^5 B# m$ U6 B. V$ G4 D: \ break" Y; I( y; y2 w4 s) e7 V
if len(bri_list) > 500:
; n( \( Z O$ e+ a: \ bri_list = []9 [* c2 N8 h2 M5 O, T
loud_list = []/ l8 o' o/ \: z5 @# I# m$ m
6 M p# l3 ^) U8 E/ s: x# s$ O+ k |