本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi ) i' E" m; g$ E/ I! r/ }$ l
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
( t! |4 X2 p7 ~, y+ _, s
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載
' E: H- O' ^+ `( M- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。- t0 o7 C6 b+ Z+ j0 R
2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)* R2 r& u, ^8 g3 O, ~' Y4 L
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。2 \' U4 d' g9 @7 P
6 |: x# \: o. C3 \
- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
0 B! L v* ]+ }. @3 n' d' @" H
/ G3 ?( F' V4 E4 }+ P, G- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。2 b2 R2 \7 x% G3 t( K7 i. ?6 {/ n
$ ]4 R, I: v& D; J I- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。) o+ [& v k: s/ w: J, l
6 f) T( N# W* Q
3.童芯派第三方編輯器程式設計準備9 e1 X5 m1 f& K8 d+ B* i9 L% \5 [- c
- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。
" }( C1 j5 G( a+ w7 h
1 M. h% u, I6 R+ R. \- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。3 s( d# x9 |9 N9 v+ O* b* j/ W4 L t
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。 2 q, F- ~* Z. v+ d3 Q" C# `: o$ O
- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。
: R6 D- q9 b$ P
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。
+ D* X8 ^: d) d U) H5 o: B5 w6 I/ }! d
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。
: _6 c+ K! F6 h6 `4 S! t
7 Z8 d9 N V! G/ V' l& Q/ o1 Z4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 ' i* S7 d) o1 ]1 Z$ L+ n% J& G
5.一些程式設計案例
, F5 G1 h1 w0 O2 L" ]童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput
, t2 j. g3 n! q功能介紹:
/ G. i; c/ M( p- ~5 z利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。
* c- { u( {8 O# _) q% L通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。' b- I7 O n" U
結合藍牙模組可以實現無線滑鼠的功能。* h& O' g7 T1 X) |7 Z t5 u4 c
- K4 A8 C4 p; S- S; _from pynput.mouse import Button,Controller
+ g6 e9 F( d* l* K# `4 |5 iimport cyberpi
. D8 j/ I1 W+ K0 L( Iimport time' X3 t ~, O4 L/ f
7 D1 Y/ U( n# B% a0 Z Wmouse = Controller()
" q, d) ^* Z9 `$ L; ^0 `3 _ & D8 m! O4 R; Q9 a
while True:
" H9 n) e; y" W0 l- A if cyberpi.is_tiltback():; Y: v' z" `% T, d* p5 K D4 l) L- c
mouse.move(-3, 0)4 ~* r1 A0 C2 o7 x% C8 B% d% \' Z
print(mouse.position)4 v' y9 E; D8 ?9 o! c1 b
if cyberpi.is_tiltforward():
, z3 n% f, d6 Q9 q# q mouse.move(3, 0)
& I$ n- r; v7 B' k1 y if cyberpi.is_tiltleft():
/ V: Q2 J+ ~% v2 ` mouse.move(0, -3)
$ m% G3 e/ e& D7 i, I8 z; m# q if cyberpi.is_tiltright():, j& J) E. p# R4 q
mouse.move(0, 3)
2 l4 U$ x3 o8 h7 `& R if cyberpi.controller.is_press("b"):
( b3 \1 F- t/ x5 K; | mouse.press(Button.left); Y. M/ F5 }) m+ U. E# }
mouse.release(Button.left)
7 R- t$ d8 a% e1 i1 Z mouse.press(Button.left)) ?* n* r3 ?' {1 s
mouse.release(Button.left)7 A. n! f* H5 _; U. d
if cyberpi.controller.is_press("a"):
5 z& n) E; v3 y$ Q mouse.press(Button.right)" w/ b, Y, ]2 m
mouse.release(Button.right)
8 l+ x$ A0 `! L; W5 v! i# R" U time.sleep(0.01)9 h. j# _7 Y. a7 ?
$ q+ R$ q6 t, j8 D
# Y# ?2 c6 @( u1 v/ [! j" T9 j語音打字器 ' x- x! r1 r! i7 K( E. [$ ]
功能介紹:
5 e: s9 q6 y, l0 F利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
' [6 z6 Q0 k, o; d/ ^將語音辨識的結果通過pynput在文檔中打出來。( ]: B0 x+ [, j9 x5 i; S
該程式目前只能支援英文。
& y5 X' Z% ]; s; Q" j6 p9 @5 P
4 n4 y% z, v* p5 B ^3 X$ Mimport cyberpi
4 V3 N/ [; }" \0 g' Mfrom pynput.keyboard import Key,Controller
5 i( _% y& k, A$ x& zimport time
% h' \0 s* D! ~/ f3 H
6 A; `7 N$ x1 w1 t7 N- s. B+ hkeyboard = Controller()
# \/ F3 }; [5 F$ Y2 [) Y' U. bcyberpi.console.clear()( T3 z6 V. j/ D4 k, F1 m
cyberpi.led.on(0, 0, 0)6 T! O8 k8 |# k
cyberpi.set_recognition_url()0 c5 E' l3 w$ s$ P: L
cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得
. e2 R: C/ F* R+ Q6 M! e& \8 h7 scyberpi.wifi.connect("WIFI名稱", "WIFI密碼")
7 `0 I0 g3 _. D rwhile not cyberpi.wifi.is_connect():7 \: i: k6 p2 Q3 y! a6 t1 L- I5 w
pass1 U# t& f$ E- I4 D& t2 A
cyberpi.led.on(0,0,255)
# }" J7 Y0 ~0 I: kcyberpi.console.println("WIFI已連接")1 }3 x: y2 i4 w- B* Y: G
cyberpi.console.println("--------------")- J+ y; y9 ^+ Q( z- U
cyberpi.console.println("按下A鍵開始語音辨識")8 p; P* k! Z' N! B
while True:
}( A4 B' m0 r+ y( z if cyberpi.controller.is_press('a'):
9 `8 Q& A6 T* i$ S" ]7 V' H9 |8 A keyboard.press(Key.space)) w7 `# B7 V. L+ ?
cyberpi.console.clear()
) O9 a; N, w" \/ V cyberpi.led.on(100, 0, 0)
/ F% a) J* t& ~# x$ l cyberpi.console.println("開始語音辨識")
3 s7 F" T4 v% u" [' Y6 F; h: E" r cyberpi.audio.play("switch")
5 O X) E1 A, ]) Z+ s cyberpi.console.println("--------------")- A/ _# r( c- t8 @% {
cyberpi.cloud.listen("english", 2)+ g4 ?& y b" q, P+ |1 u% U
cyberpi.led.on(0, 0, 0)
& {+ q" F& v g" H3 W9 T8 P1 y say = cyberpi.cloud.listen_result()
I2 X( J2 w* ~8 L5 U cyberpi.console.println(say)4 ?* O: u9 d5 i6 T9 T
cyberpi.console.println("--------------")0 F' Y( M! M) f( a. n
for i in say:% A- \% V/ e. m/ X" h' {. c
if i == '':8 m" f3 f6 L% f6 p
keyboard.press(' ')1 Y. C2 @: @ I# b
else:
( Z: |6 U, J" a! G keyboard.press(str(i))
2 {- P3 i! H( T+ K0 ^4 k6 M time.sleep(0.03)
4 O6 ?7 z3 K& e- ^) D1 l) d6 E K/ Z
/ y/ m5 _4 l mmatplotlib音量柱狀圖 - ]9 s% W( {4 O/ N0 V; e
import cyberpi$ S9 f: ?' u% d; i
import time
+ A9 X) V% N4 W2 {5 H& efrom matplotlib import pyplot as plt
& `8 s% l, Y7 n( h% B2 U, S7 F4 y1 q9 T
6 W/ B% o) \; |( X5 Eplt.rcParams['font.sans-serif'] =['Microsoft YaHei']
* x+ c. [9 z) q0 z. \3 Qplt.ion()3 P3 s8 Q7 T b7 X
: d( y. \5 |( o T. X
while True:$ i1 w v. u* z9 n+ s
loud = cyberpi.get_loudness()
# a b, ~! j# M* o% b# w. C plt.clf()4 d5 j! W: B' F+ o7 D) G
plt.xlabel("數據名稱")
4 f8 S/ K# K. |1 t1 ^% @ plt.ylabel("音量讀值")3 `& W- k" E3 o! e2 |; \" n
y_locator = plt.MultipleLocator(5)
! k H6 f- o. h ax=plt.gca()
3 z" N! U# G! t$ O9 S8 R6 y ax.yaxis.set_major_locator(y_locator)
* d+ h }$ w b/ s d! K! [ plt.ylim(0,100) F4 V6 [( D/ W# l; w% }% [2 G* g1 \
plt.bar('音量', loud, align='center',label=f'溫度{loud}')
: }) r+ [& g/ h plt.title('童芯派聲音感測器讀值')' Q' w+ u( ^' }
plt.legend()
$ @+ K' ^7 y3 d; y7 k; V plt.show()
% c+ {4 y. u. `2 s' _ plt.pause(0.01)
' F+ r& Z9 R) z; p5 P- y# Z0 U( E! Y _/ p/ \% {8 |& `
0 u6 E8 B5 N& {2 f8 }8 b2 jmatplotlib 多圖表顯示
7 Q$ K) A6 X* `$ y" N3 y- q" d0 ~6 c
1 i( e# s! ~# y6 \from matplotlib import pyplot as plt
0 u1 F' }% R/ e) J, Oimport time4 G1 ]; `+ ]+ p5 g
import cyberpi8 P* f' H( `% y2 {8 e/ O
6 w7 x) A. e3 Q" S% J3 I, T
loud_list = []# |6 r1 o m1 q2 d% ?) g6 T
bri_list = []7 h0 U: ^3 W4 E8 ], f- v9 c. T; Q5 ~
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體
; m. z4 W! R6 M& vplt.ion(); P) v2 p4 q) w" U3 P7 T
plt.figure(figsize=(10,10))/ u7 O9 d8 o1 H) j/ a
plt.figure(1)
! v }! f9 ~2 E: J$ |x_locator = plt.MultipleLocator(5)
5 N: R( H& l% C$ k5 Q! {6 i: t: B2 z- Sy_locator = plt.MultipleLocator(5)
$ f7 `% ?- P% }6 A/ Z, a4 U+ Swhile True:5 u( E1 b5 c) ~" E( w3 a
loud = cyberpi.get_loudness(): D/ L8 [6 s- ^4 K9 B6 g( T
bri = cyberpi.get_bri()
6 q% k5 e1 y; V loud_list.append(loud). @' Y& }' n8 j
bri_list.append(bri)
* o. H/ L% n% s& w' f battery = cyberpi.get_battery()4 |: U' s( V7 [0 Z+ [
size = [battery, 100-battery]2 c& k* P2 X8 ]" X8 ?5 M" ~, D
status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']3 h7 J' ` w+ ~
ax1 = plt.subplot(221)
! p% v7 u; J i7 p3 n& J4 ? plt.title('光線折線圖')3 M5 z; X" \8 @( v; S' J
ax1.plot(bri_list)3 ^3 L0 E% C% D6 l
ax2 = plt.subplot(222)
) j/ F, r: ?6 m0 ?7 M8 a0 N5 T plt.title('聲音柱狀圖')
( } Q R, }! P/ I0 C ax2.xaxis.set_major_locator(x_locator)
0 _" Q! `$ |4 f4 T- o ax2.yaxis.set_major_locator(y_locator)! h1 ]+ B. ~# ?) x! Y+ j) g
plt.ylim(0,100)
. R* I* g# z8 {+ L( Z0 v ax2.bar('sound', loud)% }7 T0 U' r/ C O! j, B
ax3 = plt.subplot(223)* `/ z1 `3 p1 m4 K2 X0 r, j: d7 f5 ~
ax3.xaxis.set_major_locator(x_locator)
- R) K6 h0 H2 J# j$ i ax3.yaxis.set_major_locator(y_locator)0 i C1 A- R: X+ x9 T3 R8 e
plt.xlim(0,100)6 {- P; M0 }6 `9 ?& P& k5 C; J
plt.ylim(0,100)8 V& m6 c" m/ R# S/ a' l5 m
plt.title('聲音、音量散點圖') c" [; v. e, v
ax3.scatter(loud_list,bri_list)
# k+ ~: _- b3 K/ I; K! C9 [ ax4 = plt.subplot(224)
$ m f" N; n8 G# }' |- f ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
' m* a2 m; s: y( Y8 K) d$ @' K plt.title('童芯派電量')% }9 n3 L5 V% Z, u5 N
plt.pause(0.2)
2 @$ F! h" e6 o! |7 w1 I9 ^/ [ plt.clf()
/ j! R% | ?# {8 _" Y& ` if cyberpi.controller.is_press('a'):
& g2 ^8 T1 \& F4 i break
9 i9 n; w, K z) g+ S if len(bri_list) > 500:
' A+ M [, r* C- ~! ^ bri_list = []
; Q- q5 j: H* A# e loud_list = []
6 K' u G1 Q$ h0 R' x' V, a0 \
" C: w" D# N0 { |