本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi - q% |- C7 T$ s9 n
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
- o, v; _, h2 |
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載
& G0 A7 N, n+ B" |5 @& j0 Q- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。$ {" j* @2 r% r/ K, x% s
2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)) L9 ^, U% @5 i5 O1 j9 J
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
5 X0 P! f& Y$ E) }. S7 [$ W, X# Q8 Q
. A& ^3 k4 h6 E c( E1 _- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
0 \! V4 w, Z. G
3 L7 v3 \) y7 r4 ]9 X- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。$ A) ?% l/ r! s8 x1 R
5 k8 E/ [' A W6 e1 F7 T [2 w' n
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。) r& W% u/ a) V: E
1 F4 J e* k2 c" V
3.童芯派第三方編輯器程式設計準備
/ ~1 K9 M1 d6 E+ C, Q- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。
& O' s" }. y; U. _
% L O. _" f+ @' G- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。
- L7 Q& g2 s) r5 @6 V
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
, Z! G7 X8 b8 v7 s- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。. a/ X l V7 \) z* I
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 6 t$ P/ ~+ v D. Z' i
& M2 h: ~' p) d8 C. u- k3 e
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。
7 w4 N/ _: ^9 c! g! I f2 ?
3 x s( D. I- u% H# F: W3 y4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 s6 o% ^' }% `1 W
5.一些程式設計案例7 d/ A* e' v$ B: Y
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput
" ]% h M0 ^* I) g功能介紹:
. ?" P/ g2 J7 Z+ n8 V8 e( l利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。
5 o. @" H3 K: p8 g$ y通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。$ U% p0 l5 [7 I E; L/ \) u1 t
結合藍牙模組可以實現無線滑鼠的功能。
3 s" U* B6 D n8 e7 c' Q& d4 Q8 y+ d1 y
from pynput.mouse import Button,Controller
2 d. l% @- h% h$ u: Limport cyberpi$ y- P: M+ A6 }3 J- e! I) [# B
import time3 x [% o: m% {8 Y% L% x
$ Y T; g, ~$ @
mouse = Controller()
7 ]+ F8 F* ~( o k) R5 F" M
2 W$ `0 O& v4 D3 p6 ewhile True:3 I# G1 k% @4 e2 s' d: C
if cyberpi.is_tiltback():5 ^ T* t/ r/ R0 h; G7 S* X) B
mouse.move(-3, 0)' _% s7 s0 ?+ X% L$ q# ~; T
print(mouse.position)
$ r/ [. A& t0 Z& y% J7 U5 g. | if cyberpi.is_tiltforward():: }4 Z6 G* y7 {% [% B) N
mouse.move(3, 0)
' ~% A* m. R/ b7 S4 } if cyberpi.is_tiltleft():# V, n' ?( |! o) }! }
mouse.move(0, -3)
% \+ f3 E$ ?0 e if cyberpi.is_tiltright():$ ]( {( q8 P; r/ h
mouse.move(0, 3): ~/ x/ g( x6 E7 S: ?( N
if cyberpi.controller.is_press("b"):- x1 w U9 W# T; Q! @% `- S
mouse.press(Button.left)9 r0 u8 |1 z. w( }! d- ? R7 `
mouse.release(Button.left)
3 C: M) K7 Q# a+ C7 ^% s& g0 p mouse.press(Button.left)5 ]" q" f9 m, \. y- _2 q; A4 e
mouse.release(Button.left)
) S( O& Z U" ^2 o2 x if cyberpi.controller.is_press("a"):
9 ^2 X9 K" V3 [- y0 a8 @9 `/ f mouse.press(Button.right)
3 M8 W: {7 R/ Q6 d: a2 J3 B/ b2 x1 k% D mouse.release(Button.right)7 \: ~) K; W! u, S
time.sleep(0.01)
7 _& q$ A5 }; Z8 C9 Y/ o% s/ `1 L7 @% p3 J" F. k3 W
' l' y) O8 h8 j( Q語音打字器
) V* f: i0 R2 ^4 W功能介紹:
$ h! A) [6 n$ F ~利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。( L. L V; f- \/ z) |! o
將語音辨識的結果通過pynput在文檔中打出來。+ z# `# \2 m( p% q
該程式目前只能支援英文。8 r! U' J- ?3 M6 P% [
b9 ~, e2 R0 R
import cyberpi+ u6 a; `4 E: q& R4 G
from pynput.keyboard import Key,Controller
4 T U+ o& W( J! n7 z! w1 ~import time1 ?# t. n8 }" E
9 Q! f& f# O5 c" K" |& I5 _keyboard = Controller()% J, C5 B% g" |; T" M/ C. Z7 l
cyberpi.console.clear()
0 _* F# ?( W+ d% F3 {2 zcyberpi.led.on(0, 0, 0)
7 q9 i+ \: ~0 d4 u) |; Gcyberpi.set_recognition_url()
: t" @( p5 K0 fcyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得: J# ?4 J h% Q9 X
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼")
7 g/ D' I/ m$ c( @. G. Cwhile not cyberpi.wifi.is_connect():
6 Y5 t2 `0 e" a: s' B pass) A9 y7 i6 |* s2 u q
cyberpi.led.on(0,0,255)
" r: i' K# _9 K+ _8 bcyberpi.console.println("WIFI已連接")2 O# e; S! @0 @1 f. S, A
cyberpi.console.println("--------------")# e. g4 I/ U6 K1 y1 ]& R
cyberpi.console.println("按下A鍵開始語音辨識")
+ o" B3 H' `/ Gwhile True:9 ]6 e( {% }: w
if cyberpi.controller.is_press('a'):
/ J. A& T$ v4 s keyboard.press(Key.space)" w% V# X- ~" j+ |
cyberpi.console.clear()
" E! E) q4 v; R1 N' V cyberpi.led.on(100, 0, 0)
' J# K4 f+ T. K2 b. i cyberpi.console.println("開始語音辨識")
1 T$ S6 Y9 Q' g# S4 d! v2 c/ j5 x+ {4 f cyberpi.audio.play("switch")3 s% c9 j0 z9 b- z* z: ?+ i
cyberpi.console.println("--------------")
& C: S, ^2 ?# j! N" M% s _# C cyberpi.cloud.listen("english", 2)) L( l: ]# n! v3 p* P/ J! N
cyberpi.led.on(0, 0, 0)
/ I! B& q/ X# U$ Z. U2 i( Q. Y/ y say = cyberpi.cloud.listen_result()2 t* `0 v9 z8 i* c1 H) r$ ^1 n
cyberpi.console.println(say)
, h# b2 \0 ~7 k. E/ ~+ z/ B cyberpi.console.println("--------------")' V- s6 s/ u+ y! Z$ p
for i in say:( d; P" ?$ u2 h: F* E, J1 ~( b4 `
if i == '':
! z" C3 v5 R1 B) f* Z7 s& }; e& q keyboard.press(' ')7 |* m/ D" N( P6 u6 X4 |
else:8 n) g1 z/ \2 i& S, t2 c1 X B5 U* U& w
keyboard.press(str(i))
6 k$ m% M8 Z) a @ time.sleep(0.03) v4 y6 B- E& M( A
, c- Z; {& s: t/ X; v4 |6 dmatplotlib音量柱狀圖 , T+ U3 F* G9 _! k7 n
import cyberpi# ?* j2 m: s: v: L
import time
. R* q6 p# {1 ?, ?3 U6 e ofrom matplotlib import pyplot as plt8 k' S0 c8 y: K& d
: d: [2 o, S) k+ ] U' `0 Vplt.rcParams['font.sans-serif'] =['Microsoft YaHei']" f& G' S6 m$ E7 }# A
plt.ion()# s4 D9 I7 `( P: V- j
8 L5 ^, H9 j1 w; b9 X4 B
while True:) S# {$ y6 _. Z9 \; j `
loud = cyberpi.get_loudness()
) s; ]/ h: E1 N; f1 a$ f plt.clf()7 ~/ q! s5 V" ^
plt.xlabel("數據名稱")( [+ @8 e3 l {( I: f
plt.ylabel("音量讀值")
/ _/ a; e: [5 P0 e3 _ D T y_locator = plt.MultipleLocator(5)1 y5 k) e+ [) C. _7 C) @. g% {
ax=plt.gca()4 N% t6 `- ^# i0 O# o: [
ax.yaxis.set_major_locator(y_locator)) D ~/ T( m- T& k
plt.ylim(0,100)% n* k. c/ ~. Q9 B! K3 G
plt.bar('音量', loud, align='center',label=f'溫度{loud}')0 U5 I1 j+ `' M5 F
plt.title('童芯派聲音感測器讀值')3 n e4 X2 B7 x- p, H
plt.legend()% j* V7 u" b% Q0 z6 O' O1 u
plt.show()
7 I4 @( c) t. `" H2 B" |3 s M plt.pause(0.01)
) q) ] |2 b: R; x+ V' [& L/ e& C4 i
" I' @; U& Y& _) Z" r, Ematplotlib 多圖表顯示4 z9 t. W- m5 q b
- o4 j2 }; I/ ~2 b3 t
from matplotlib import pyplot as plt6 n4 c+ F3 @( K, g4 }0 k; O2 G) I e3 A7 ~
import time' i# J! w+ o- J% |
import cyberpi
5 U! x8 u/ X0 q$ ?" K% H
# a3 N4 l0 B/ W; P- N' ^! }loud_list = []4 f, J: F- K2 H3 Q) x
bri_list = []
, V$ M* g3 k/ u. x" k, N& Aplt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體
8 j( t7 u6 S8 ?( zplt.ion() r: _, K# r8 T( ?# ?
plt.figure(figsize=(10,10))* @( i1 W) V _ V/ _; R6 Z) ^
plt.figure(1)3 b2 I: z% t, v* s: Q% v
x_locator = plt.MultipleLocator(5)5 l! K8 O8 a" w5 C6 L5 ^6 h# K- [
y_locator = plt.MultipleLocator(5)
7 }) r. v4 J# Z9 w" F& T5 qwhile True:% N" D" Q0 [. B- M
loud = cyberpi.get_loudness()
* G( U; n8 F: N/ X! `5 O bri = cyberpi.get_bri()# q! h6 O; c4 u2 x
loud_list.append(loud)
7 C! z& B; J& P* q$ ^5 n bri_list.append(bri)4 W ~: i$ d9 H) _2 j9 k- Y! b9 e
battery = cyberpi.get_battery()* }/ q8 Y v! _" V( l( |
size = [battery, 100-battery]4 L: L" o1 _* y: ?, w2 V
status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']+ H4 A1 C- D; b+ f5 c* p7 s
ax1 = plt.subplot(221)8 v" z( A [8 [3 I4 d- M
plt.title('光線折線圖'). ~, U" C9 Q4 [; [8 M
ax1.plot(bri_list)
4 s9 a# C3 C$ y! B0 [. c! r ax2 = plt.subplot(222)
# `- ]/ K: u1 w: m plt.title('聲音柱狀圖')
' X4 y7 W$ z5 J6 j) i ax2.xaxis.set_major_locator(x_locator)
3 p0 a8 G+ o/ y, c5 q9 D1 B ax2.yaxis.set_major_locator(y_locator)2 }2 `. F: T" A, q
plt.ylim(0,100)1 j8 }% n; G( k: V
ax2.bar('sound', loud)9 x9 s; Q, U% L$ M
ax3 = plt.subplot(223)
& H- H0 q/ k9 C8 O- q ax3.xaxis.set_major_locator(x_locator)7 H# X1 S& c W2 e. v; x2 k
ax3.yaxis.set_major_locator(y_locator), `+ w% f n8 G1 e! v9 ~& T
plt.xlim(0,100); f/ P2 Y) y' ~ V: o
plt.ylim(0,100)* H1 U0 f* c1 w
plt.title('聲音、音量散點圖')( R5 q* s0 p5 k+ K# h ?5 B
ax3.scatter(loud_list,bri_list)
& }4 I5 c( C* q0 h ax4 = plt.subplot(224)
0 h( B. J5 F( t- F% h9 a* { ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})9 P4 v0 q) ]+ K" }
plt.title('童芯派電量')! B, `- P. [2 M7 i5 l
plt.pause(0.2)
/ y% D: Z6 V- l. V1 M6 I- V plt.clf()# `" m/ B0 V, L" R
if cyberpi.controller.is_press('a'):
) H* Q( D5 ]. ~8 B; R7 J+ R break( x$ O5 e3 a* X) `1 y f7 L
if len(bri_list) > 500:( d1 h* ?+ J- _, L5 X7 ]
bri_list = []5 h8 O$ ? L" Q
loud_list = []2 C @1 F; A9 ?% I1 h" u
+ K) p& f/ v8 T" X! w5 R* M4 W
|