本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi 9 U# \" i# m/ ?/ g$ r5 e2 j1 C
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
0 e2 _5 [# H; D
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載
: r% y7 n. H0 e- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
# X! w. ~( A2 u k; y, x 2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可) x9 P/ o( R. @1 U' a: W" b2 A' O" c
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
G5 q. J0 F) y9 ` - M6 r* z( K( U2 i/ g
- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)% e K0 ^+ s6 W3 q E
& K6 c' H3 Z# d' w
- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。9 U- ?5 I" X4 e1 ]
1 l. C5 ^6 r* D, _
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。
+ i4 {5 V+ q/ R5 K a( k& r% m 4 b- `1 F- `5 ?( ~# [& y% V/ v
3.童芯派第三方編輯器程式設計準備' `1 V$ U- A& ~& }
- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。3 F2 q2 w* w/ t2 A* A
0 t6 h; y, L' R( j8 E S- c
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。7 ]# n$ X' j) p7 M- S
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
# v( j: F( { Q* R- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。
( h; K4 `7 G, C: m O$ k3 u
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 $ [' l0 E [- L
! W6 Q0 \* @ {) i/ u: @
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。
! b" {% m9 n0 d9 Z
" D) S4 D* C, P2 o, n9 @/ I4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。
4 l' c4 C& {$ r: h, b% B5.一些程式設計案例
5 I& X) Q, r7 Z# d7 J- X* X7 l" X童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput
9 P( f0 V4 E* `# S* P0 L$ D+ p功能介紹:
' j+ A8 s; _ w! c6 }5 {, a利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。/ _2 u" H% F$ z: ?1 R% E
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。7 g6 \1 c) G: b# }9 ~, F9 H1 u7 I
結合藍牙模組可以實現無線滑鼠的功能。( C& B2 Q& }# w8 X+ ^
% G* c; [* U: L( o6 M+ y$ Y: \9 t( F
from pynput.mouse import Button,Controller
8 X" x4 u" v2 mimport cyberpi5 \" u" n8 Z; l; v: v
import time
- X1 i+ G8 q0 z , S/ E! I' P$ }) ?/ X! \$ L
mouse = Controller()
* {2 W0 n m# ~ + P& U; D- B6 K2 G
while True:
5 z. L+ d) ? d if cyberpi.is_tiltback():% |* b- m' j- A; u n1 o- O7 C
mouse.move(-3, 0)
4 B6 f" `2 M2 C9 R/ d print(mouse.position)
) h$ e- m$ |( T1 L( g. l& v- T if cyberpi.is_tiltforward():! w9 G$ T" u. ]
mouse.move(3, 0)
3 G. z( y1 l& {+ \ if cyberpi.is_tiltleft():
. J) U O- D0 g) E; j( X mouse.move(0, -3)2 `- M0 k' o) Q `! [; U( Y
if cyberpi.is_tiltright():% _" h8 w o; ?7 r* V8 H8 \3 L
mouse.move(0, 3)
! w5 Z4 i0 \* D0 P if cyberpi.controller.is_press("b"):$ m1 P2 `0 p1 G0 u6 y
mouse.press(Button.left)8 a2 e- d2 E0 J! X r$ j+ Z
mouse.release(Button.left)7 k. I0 @9 g m( m
mouse.press(Button.left)
) c F5 E7 Q% H% i4 P8 I2 d9 Y5 N1 {5 y mouse.release(Button.left)
# p+ |. o4 o( N$ {% j. r F3 ] if cyberpi.controller.is_press("a"):" g: l% N* z! v" i2 D; O8 p+ Q
mouse.press(Button.right)) b9 u8 }' E. q5 U6 A
mouse.release(Button.right)2 Z2 K& R3 P! k+ a# o: I5 k
time.sleep(0.01)
9 ?( D) a5 X# X7 `- f1 s
$ t" U, Q1 E, A4 c; y x9 X- d { h
語音打字器
+ X( i2 \4 O1 R8 y- G0 I! k5 g功能介紹:
( `! s5 k. e/ q9 R利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
9 y7 }" U- |2 z2 k6 q& ^/ b將語音辨識的結果通過pynput在文檔中打出來。; }, o& ~6 E9 P6 _. k/ W L
該程式目前只能支援英文。
* E5 x" i- R& }5 W% e
9 V/ D6 l3 I7 a% ~* ~! w7 \import cyberpi
1 _, h" A- p4 M" [3 n% Hfrom pynput.keyboard import Key,Controller
8 ^( Y8 f$ I4 Nimport time
1 j; V- C$ i3 {+ |( ^/ ^9 z2 P
/ X. k$ j1 m$ Z C' I7 c0 qkeyboard = Controller()7 _- d: C. I/ |: [
cyberpi.console.clear()
' Q9 \5 h4 o& xcyberpi.led.on(0, 0, 0)
3 E6 I0 f6 y6 Q6 scyberpi.set_recognition_url()
! [2 ]" F% ^9 Acyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得
% `2 m) @4 j7 B% l4 X/ wcyberpi.wifi.connect("WIFI名稱", "WIFI密碼")
6 P: Z7 `( u3 S% B' Q& L8 Swhile not cyberpi.wifi.is_connect():* M# W! l% W* K: C
pass3 s) p! l' B- Z9 {2 i- l J* D
cyberpi.led.on(0,0,255)
0 c& }9 {: b/ O; n z+ }) Jcyberpi.console.println("WIFI已連接"): [' j4 C3 p. _1 _7 Z0 \" r, W
cyberpi.console.println("--------------")
; S' B2 v, ]" Z, B& B: _. D9 y. k9 kcyberpi.console.println("按下A鍵開始語音辨識")2 C) l8 ?# n) ?8 @4 V
while True:& F* B6 G% L- ?: D; O9 q$ P6 L8 v* `
if cyberpi.controller.is_press('a'):
1 P4 Y7 [' o9 y4 u* x keyboard.press(Key.space)
- `0 ]4 W* ]; W& q7 `( \8 m6 M cyberpi.console.clear()9 v g9 Q9 s* j/ M/ A# } v2 z: N
cyberpi.led.on(100, 0, 0)
; J6 y! W ^' L- w. e cyberpi.console.println("開始語音辨識")0 m! A: U% q9 |
cyberpi.audio.play("switch")
0 w! E3 \4 x( r- o3 Q cyberpi.console.println("--------------")# c+ _1 W2 [5 w
cyberpi.cloud.listen("english", 2)- K" q& n( ~9 [$ P
cyberpi.led.on(0, 0, 0): G- R: F* A u' q
say = cyberpi.cloud.listen_result()
/ o* H8 t) \1 I) H8 F5 v' i( c* @ cyberpi.console.println(say)7 s7 g0 ` [9 [4 }9 f" t
cyberpi.console.println("--------------")
1 [8 N, v1 N$ `0 o' N% m for i in say:
2 h) I9 G( G% D7 I9 z if i == '':
* K% j7 j8 x. o$ { keyboard.press(' ')
& E- k4 p7 o& u6 x: Q. v7 n5 _# C else:; \( S/ _& s0 T9 N3 H4 j% m3 G/ i
keyboard.press(str(i))& Q8 U/ F. V. t4 K5 F
time.sleep(0.03)
# t& f6 G1 j. O; I% i+ y
1 |8 K! d; x& @0 k3 M( c. P8 x- ]matplotlib音量柱狀圖 5 I, U4 L% F$ J% _# E. X' w# l1 {
import cyberpi
0 j" } a3 ~& Q* q# x% A8 pimport time/ I. L4 H! m0 j/ S
from matplotlib import pyplot as plt
& j9 o6 ?' s9 \: K
; T& e' o J4 H1 w3 `0 Tplt.rcParams['font.sans-serif'] =['Microsoft YaHei']! R; D4 _7 v6 v/ @
plt.ion()
7 Z) e6 n4 M7 e m% u2 x7 A' o " i) j6 x" A0 h; P/ H8 Q
while True:0 ]- j* [$ }" W- g# d. C0 a
loud = cyberpi.get_loudness()7 G5 q/ H* |9 k
plt.clf()
' r3 |) U6 N! N- s8 ~& e( b! B plt.xlabel("數據名稱")
9 C! k/ o9 f) G6 k# A) B7 z$ E plt.ylabel("音量讀值")
% k9 ^/ ~- l2 h! H3 A/ `& x9 _# ~% P y_locator = plt.MultipleLocator(5)
; z' @5 c% l, l ax=plt.gca()
+ n% C/ o$ ~$ J( B ax.yaxis.set_major_locator(y_locator)* s- D* m# @9 R: X G0 z" u
plt.ylim(0,100); m7 e" V$ l9 `: O
plt.bar('音量', loud, align='center',label=f'溫度{loud}')
3 w/ C3 u. M3 j0 G plt.title('童芯派聲音感測器讀值')* I2 o- D. t: P. N
plt.legend()
W4 m$ r& S& P. K0 J0 a7 }8 J- N plt.show()
0 Y2 g& B: \6 v- w0 D plt.pause(0.01)& |& N5 m2 @! S+ L$ Y" O5 o
1 n4 [7 J0 V. F/ q: C! D9 B' h4 F' I T
/ o. e ~% ]' ~9 v0 m3 zmatplotlib 多圖表顯示
4 N3 h9 `* d$ Y7 I( M
9 j7 m: ]3 H8 _, }: Q# N; ~/ Sfrom matplotlib import pyplot as plt- X* P$ f7 |6 n0 u/ [$ X+ Y4 ?+ e
import time
9 D& S, k, ^8 e O: Bimport cyberpi
$ n* O7 e! {. | ) N( N5 T2 D! p* `7 y
loud_list = []
$ N$ b5 Y% G: B/ Hbri_list = []
' I" Z1 t2 O9 A4 v0 \. \plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體
' s$ U6 b' m1 Kplt.ion()# I1 T. B0 v# H1 g+ n
plt.figure(figsize=(10,10)), f( A1 O( A' N) ~1 a
plt.figure(1)
) e% n6 I2 x& B# S) _, P7 s1 mx_locator = plt.MultipleLocator(5)
3 M. X4 ?2 l9 l3 Sy_locator = plt.MultipleLocator(5)
C" ~. A1 j( M# a& V6 Fwhile True:
* _: f: y4 K! z loud = cyberpi.get_loudness()7 T: }) F3 d( `* B/ o" R* o$ H
bri = cyberpi.get_bri()
: [! u% g) E$ L( K: c" R' h loud_list.append(loud)) z8 ^6 Q; h: d t
bri_list.append(bri)
I8 G- u5 I5 p' a) _8 }* M9 k battery = cyberpi.get_battery()
0 I( p2 M. S( o3 A1 F" e! M size = [battery, 100-battery]
5 i$ t9 K: ^1 D% |% Q0 J. K9 D status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']
- y/ X' r: `" Z$ |5 [9 ]* u7 i7 y* B ax1 = plt.subplot(221)* Z8 ^1 h8 p0 u1 w8 _2 _ v
plt.title('光線折線圖') W1 R. H( W) k- \, {, `
ax1.plot(bri_list)8 X6 D- m! v: \$ z! x Z
ax2 = plt.subplot(222)" [/ `' d. X! r, k( y) i7 I7 \: |
plt.title('聲音柱狀圖')
# U& t) O a) k8 T) | ax2.xaxis.set_major_locator(x_locator)
2 r% [1 g' @) F# ?; ?+ _ ax2.yaxis.set_major_locator(y_locator)+ {8 i \% h; o/ G
plt.ylim(0,100)
* U1 O2 ~1 ^/ q' i% t T ax2.bar('sound', loud)
+ {; N; P: ^* j( Z7 h* | ax3 = plt.subplot(223)
) [9 M" W, G2 w% E, n7 b ax3.xaxis.set_major_locator(x_locator)1 H6 H! A; [3 `/ ?* C) F$ E
ax3.yaxis.set_major_locator(y_locator)
K k0 y6 k. F- D1 V$ [$ a( _ plt.xlim(0,100)* f& [) R) p( L
plt.ylim(0,100)
1 w! Y( M6 ]& t plt.title('聲音、音量散點圖')
8 K9 a! D: ~9 o( W: L4 U ax3.scatter(loud_list,bri_list)
. u" S6 q g2 a9 P% w3 l ax4 = plt.subplot(224)( ]. T$ c4 }$ C* X' M; z+ _# G3 C
ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
3 [- E6 _: X* i! z l( h' E' Y3 @ plt.title('童芯派電量')* o1 B0 Y$ G, }) E* V. N+ X
plt.pause(0.2)) N5 y9 m* F( ^0 G9 B: [; X% H& N
plt.clf() j: Y- ~% r/ H% l1 J% h$ z
if cyberpi.controller.is_press('a'):% j T0 K9 `) u) ^
break% m, n/ A5 u7 |9 I- j
if len(bri_list) > 500:
- P& w9 b0 H' T! c9 E1 C$ {1 ?* Z/ }, B( z bri_list = []; b/ Q7 P6 ^$ j- R+ U
loud_list = []3 Y8 E; c" K+ d! S) t
1 j% k8 C1 Y" x" J# t* ~- l" t# H |