本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi
, e5 M5 N; `/ v! { M9 f( r1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
6 R$ O; N/ g0 N" @
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載
6 h. ]8 e2 d/ P, |- \- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。, I, p4 K; a4 }* ^# o$ Y) I
2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)( P' x; I9 {4 _- b
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。+ b$ }! z6 _0 k: R
$ r8 T: J; f* I, ?7 ~- A- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
; n5 G( l6 G. t6 u1 {# S- @
, w7 |2 Y7 E! E/ k4 `- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。7 W. Z8 G, \& i* Q* K$ R+ B3 c
9 f7 q/ C) U& C, t4 g) S2 {. t& P0 }- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。4 q; R; O% q$ m$ D2 s
1 ?7 b5 G h- D/ D- n3.童芯派第三方編輯器程式設計準備 [3 |# Q( ?2 \- t) N5 t& B
- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。- u l' c% U1 x- X
( C4 Z7 }6 Y) H, U
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。
6 O5 q( Z! I6 J
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
+ p, \8 X: ?, A. o' |- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。 O% |; R8 o3 y$ B
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。
+ a6 P+ }+ S6 F) c' J" O: P
`. t1 B* x. C1 r9 R- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。
; y r% B3 a- c: k
, X3 C# w1 i! Z4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 3 p% x% _& D0 C [" c
5.一些程式設計案例4 B; {8 C) y& F( Y- J" w# t/ v
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput 9 u: s# k/ r3 }
功能介紹:7 O0 Q2 A9 J' |/ r; b
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。
/ ~. z1 l" P1 T通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。3 J8 f- z5 Y% g' ]! c
結合藍牙模組可以實現無線滑鼠的功能。2 o: j3 q$ ?3 |
% j i, t+ I$ \, S
from pynput.mouse import Button,Controller
. S9 \( {4 b/ fimport cyberpi
, c8 P. R! G9 rimport time; Y& m4 L, G" y+ w U3 c& M
* u. }6 m" Z! Q/ l! q7 T, rmouse = Controller()
6 O" c6 X# G9 |3 [& | 7 V& g1 k1 u+ n1 r" ^, `8 [$ a6 k
while True:
. K' p3 W/ c4 w- s7 l6 g# {4 s if cyberpi.is_tiltback():
: C5 a9 h/ e$ v2 l/ b8 ] mouse.move(-3, 0)
3 \( |: L9 U$ E. a$ _; S b print(mouse.position)6 @% A. i% L) }6 t( C/ x9 R
if cyberpi.is_tiltforward():7 S8 i) y3 B. P0 y+ G5 P
mouse.move(3, 0)
- f' a& k2 ]$ Z0 } if cyberpi.is_tiltleft():" C+ e T/ x" R P6 _( N6 x2 ~
mouse.move(0, -3)
+ t% b$ R/ f# E( x2 s) D$ k8 K3 S4 x. P if cyberpi.is_tiltright():; A+ X+ s2 L. B# z% N9 j
mouse.move(0, 3)
9 t. z, @7 x! C3 L3 I if cyberpi.controller.is_press("b"):
# H! |; _1 j: z mouse.press(Button.left)
0 |& C# N6 v# n mouse.release(Button.left)2 o6 P$ p; s. k* G3 X9 p
mouse.press(Button.left)( g) Q" D& C: }. }$ Z
mouse.release(Button.left)
, e$ ?; G& ~, h1 d* P2 I d I if cyberpi.controller.is_press("a"):
# s- ^0 }4 |" n; j/ Y mouse.press(Button.right)
% s& }7 U% a, k mouse.release(Button.right)$ q) H( N" s8 T
time.sleep(0.01)7 ~. K; b& v; J2 P4 G
: U& f8 d( ~( k4 X; \" T
7 }# L4 h) d/ l4 Z
語音打字器 ( E- e! { S( F0 s7 B- v! e
功能介紹:
) T9 v0 A- b! P1 E利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
+ l* y) u6 ~6 F; G9 r6 n9 Q7 [將語音辨識的結果通過pynput在文檔中打出來。
6 p% z. k8 d- _1 X3 r* F& }該程式目前只能支援英文。/ O4 P3 i1 b. l* r6 ]5 a# \
v5 ]$ i2 m2 ^5 F9 |import cyberpi
& ^8 k6 E) T& S- d6 t# r" x4 n" hfrom pynput.keyboard import Key,Controller. ~, a2 E8 S3 k) {
import time6 `% C/ m4 ?5 A) w6 y& ]
% T6 M( X6 N, J+ L7 {& p9 A3 \
keyboard = Controller()+ H0 n& W, _; p
cyberpi.console.clear() i1 F& Y( X2 c, l, p
cyberpi.led.on(0, 0, 0)
! m" ]; r4 S. T, M7 |4 m5 @9 h2 p; ccyberpi.set_recognition_url()" r. B1 Z# V7 Y4 \- t/ u6 a& T
cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得
- |& ^3 {# d1 _, m* |. H) @1 acyberpi.wifi.connect("WIFI名稱", "WIFI密碼")- |1 l0 c" N2 e2 M$ x# J# k
while not cyberpi.wifi.is_connect():
. a$ [$ S! A; ~( W3 ~9 B( K/ ]0 ?* r pass6 x1 o* F5 r$ A4 w, K3 V+ b% p
cyberpi.led.on(0,0,255)/ {# R# V' I4 K0 u
cyberpi.console.println("WIFI已連接")& ^% F; H3 h+ \5 R0 Z# h
cyberpi.console.println("--------------")
7 y9 J1 p, J0 t8 ]2 v: F/ A& c* Zcyberpi.console.println("按下A鍵開始語音辨識")
! m% F6 `/ C0 W, swhile True:
0 E2 z/ l( D8 Y if cyberpi.controller.is_press('a'):& e+ }9 I0 x# E2 E8 i( d( e
keyboard.press(Key.space)$ I2 ?% H: x1 A7 I" I2 B' t
cyberpi.console.clear()$ ] n- |1 } q% ~5 q9 l
cyberpi.led.on(100, 0, 0). U; f; w5 [ \/ F; J
cyberpi.console.println("開始語音辨識")6 O9 d/ V7 ~: G; Z, Q
cyberpi.audio.play("switch")0 u" o) _7 n5 H5 @5 Z
cyberpi.console.println("--------------")" e8 S2 X3 |* M+ p) p
cyberpi.cloud.listen("english", 2)
9 f. D9 h7 u J% N" S cyberpi.led.on(0, 0, 0)
8 n; W4 ], {1 I% s, e+ b say = cyberpi.cloud.listen_result()
7 E$ F1 w* B% P( n. J cyberpi.console.println(say); ~ T; H2 P7 u/ j
cyberpi.console.println("--------------")
! P2 N% s! [1 H! j0 m: H+ Z! S W5 { for i in say:
5 P6 e8 j2 }. z3 x if i == '':
, ^0 p. H" I: E keyboard.press(' ')+ [/ N- d, X7 n, O" [3 F
else:7 [4 w/ U/ ~9 w* q
keyboard.press(str(i))
1 K3 |) } m V, k- j4 W time.sleep(0.03)
B4 r0 Y/ I( Y+ ?/ w" k# \' L, u: }. I! j/ Z4 c. Y% o
matplotlib音量柱狀圖
* W4 s7 f, S, X' |5 b' [' rimport cyberpi
4 J$ W+ g: G( s3 f( e( }import time" c" ^: G( k W
from matplotlib import pyplot as plt; n9 q" j0 i: G" x1 y0 s
5 S6 a* J5 w( d; N5 ~$ E k& T
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']4 Y8 I/ s& N. ~$ I9 ~' o. H0 q
plt.ion(); h) P; O' p0 a
4 ]) s8 i/ B3 b1 Q7 A# K
while True:
0 |! I2 {/ y( y) G& w loud = cyberpi.get_loudness()
1 w1 K8 w8 y, l plt.clf()3 x2 B/ T6 n; d
plt.xlabel("數據名稱")7 A4 M' }! y3 f
plt.ylabel("音量讀值")& d( Z2 @" b1 I% Y% o. h* G y' u
y_locator = plt.MultipleLocator(5)
8 ~; e0 g" k" y ax=plt.gca()
; V( D) `! h+ v2 y2 {$ ^9 l8 G ax.yaxis.set_major_locator(y_locator), n+ s4 \" A0 Z2 |, j5 W
plt.ylim(0,100)
* A' O* J9 ?: T6 B) h$ C! ^ plt.bar('音量', loud, align='center',label=f'溫度{loud}')( I. \8 j+ u% ]+ v9 j
plt.title('童芯派聲音感測器讀值')0 u0 r X5 h7 ?- `
plt.legend()& Y: t: _5 c' H) g% M) Y% A
plt.show()
) _4 [. B8 _, Y: Y9 }. C plt.pause(0.01)) i. J( m3 P0 I0 ?" N
+ p9 e$ {$ C+ J1 c; K7 |( X8 @
2 l& V7 R2 B; q
matplotlib 多圖表顯示
5 i1 I% d5 t5 [1 I* v- v: U! N+ _1 w3 m S
from matplotlib import pyplot as plt
7 ?' u2 T+ { t" k- P; Z& Zimport time! K$ Q$ i" c. e$ w% y
import cyberpi
) @* y; y& \, y/ C / o- c; _8 ]/ a6 m- ]1 k6 v
loud_list = []
, |& @- a- i1 x) bbri_list = []2 q4 ^' u2 Q w, h
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體/ |3 f- U7 `0 T* B2 h2 n
plt.ion()% ^% t2 @8 W) g# i# i7 _) ?
plt.figure(figsize=(10,10))
! W4 Y. J- n+ Q2 y( @( ]plt.figure(1)+ L& D8 X$ {' p7 t/ |# t3 S; ?
x_locator = plt.MultipleLocator(5)$ v E1 i" }4 T: {) P
y_locator = plt.MultipleLocator(5)
) T$ m- p) y8 L5 q3 iwhile True:( u: S) n: U7 N' W5 }6 n
loud = cyberpi.get_loudness()& L. ~; H4 _# d2 [7 s3 w5 W
bri = cyberpi.get_bri()" y# I( y! P. |! Y* y4 n
loud_list.append(loud)) Y" U8 Z6 N: p5 ~0 p' P" {1 B
bri_list.append(bri)
8 u( v0 j6 c$ p/ X battery = cyberpi.get_battery()' |1 s1 a& K+ B+ F( @
size = [battery, 100-battery]
# n0 D# C" U1 v% p status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']
* I9 }/ n& h/ ]" `: m ax1 = plt.subplot(221)* d; |& n# T6 n$ y/ r4 E2 _
plt.title('光線折線圖')4 V0 V* D! l, l
ax1.plot(bri_list)
; p* q' s4 I; f; i3 | ax2 = plt.subplot(222)) {& K; @6 w* J9 f
plt.title('聲音柱狀圖'); _2 O' j: B1 a0 e3 I4 M
ax2.xaxis.set_major_locator(x_locator)) W6 Z8 G+ F" h& l) C
ax2.yaxis.set_major_locator(y_locator)
9 \& |$ Q5 K! ~ plt.ylim(0,100)" J4 k' s0 h7 r
ax2.bar('sound', loud)
* @. ~: x0 s; Z$ B5 l0 w" K4 d ax3 = plt.subplot(223)' d* U9 H S2 r% L
ax3.xaxis.set_major_locator(x_locator)$ @0 l- b" j/ d* K
ax3.yaxis.set_major_locator(y_locator)
8 }) l* H# }; H5 N plt.xlim(0,100)- \1 v3 S' g1 \& I- R3 m
plt.ylim(0,100)
. [# n8 O& N4 K% N% T, ~! K+ k2 o plt.title('聲音、音量散點圖')
S3 q0 W/ w! u ax3.scatter(loud_list,bri_list)
* r- m+ u. h: ~- G4 z, @ ax4 = plt.subplot(224)
, x0 X7 {( Q3 ~3 P# U; _ ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
& k1 t0 o" V- F( h4 m T plt.title('童芯派電量')( K8 T" g$ L6 i- M* R
plt.pause(0.2)% K" M }9 s2 Z% O" F
plt.clf()
5 A k" n4 a7 @1 V if cyberpi.controller.is_press('a'):# X0 d4 ?! t) b0 S7 @4 I) d) n
break; U/ N e* |$ |# d
if len(bri_list) > 500:* @ f1 `: w& Z6 c* u) X/ O) \
bri_list = []
" G' ~7 H3 o7 b# X5 L1 P" V loud_list = []3 ~5 i1 G. V: v- K
! K1 l( U* ~8 G+ O' N |