本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi 1 X* W) K" i9 B# [
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
T, a) E1 ^0 \2 s
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載 y n1 ^0 M) a$ r6 q
- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
, b& ^& c5 h. L) r 2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)) v- S r' c1 }. c% D
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
3 d: l5 T" i5 R6 w - q8 ^ [7 p: Z4 p
- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)+ u0 \$ I$ L4 U! O/ m$ G
. y% V/ n2 o' O, U1 H4 A" V- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。% I6 D# o" W. k
; \) K! z1 p8 D( j6 e& i- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。
7 K( Q' A: X4 v* F3 V1 P4 g
( t9 t3 `. M! a( D) O" s3.童芯派第三方編輯器程式設計準備; G. v" F* J0 W# S* D5 L& \5 F2 M
- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。
2 a8 m. K7 `1 R2 H
6 a& i, `' h) E2 c1 G- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。
) N* c6 i5 P5 k/ f" z/ A' M
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
! s8 K) O( s, r% V$ Q) X- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。
9 ^8 a. Y5 w% P$ h( {1 i
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 ' j8 V$ x5 ?# O) Q0 E9 b# q, R) o
+ F$ o& _- i( U3 \- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。
- _, M" a( L3 l% N! R" g5 _# w ! c, P3 N* M- y3 H% W. R+ a4 j2 i% R
4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。
7 N, c3 |$ C+ g- F5.一些程式設計案例
* n7 ^/ b6 Y: t8 I9 B- B: U3 X童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput
n X& N- }* r& Q: _功能介紹:
3 _ s R; q5 b" z+ h* G利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。. `' D/ t( z5 h; ^
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。
+ a$ @6 z$ A, m# a) f- D5 @結合藍牙模組可以實現無線滑鼠的功能。
5 b/ _1 A, w+ |( T5 L9 [ E; M- m& n1 R- y2 D$ D
from pynput.mouse import Button,Controller
; c3 \6 p9 B0 J, m" wimport cyberpi' r" s. S1 ^, D) J" ~# V" |
import time; d9 T J7 B4 b2 C8 G1 t2 S0 X: `. D
o5 z" P9 w! B3 A* x2 \* P" `mouse = Controller()2 R. G' B9 p- X ?) Y& G! f+ W
# T U3 d/ Z6 S9 {) Q& Q: M' S
while True:
! D1 {- C. \. f" ~ if cyberpi.is_tiltback():2 L3 U: |* Q. ^
mouse.move(-3, 0)
$ ^# q7 Q. ^; f( \8 n' [% ]5 T print(mouse.position)0 L6 S$ j0 c/ R7 ?1 r
if cyberpi.is_tiltforward():
$ o4 V. G/ P# W0 w mouse.move(3, 0)% Q8 N; e# A8 I* k
if cyberpi.is_tiltleft():( s2 k2 W* W: ]" V( u: X* x4 ?4 h" B
mouse.move(0, -3)
8 Y& d8 u$ `0 m' Y! y* [, H if cyberpi.is_tiltright():
, i: v- F; ~: {: X: _* i mouse.move(0, 3)7 o! }9 ~7 [! I
if cyberpi.controller.is_press("b"):
& F8 k; M* b- I. ~, m mouse.press(Button.left)( \9 a5 V- a. D) X
mouse.release(Button.left)* O7 r; \$ J* _# f% w
mouse.press(Button.left)
$ K6 D5 }( N; F. s; o, o mouse.release(Button.left), p/ h! i! I2 s: ~- p4 M3 @' w( M2 w
if cyberpi.controller.is_press("a"):0 Q/ h7 s5 y, n* m' @3 K$ r
mouse.press(Button.right)" E- b2 K' x- V1 j, L
mouse.release(Button.right) m" y) ?0 a# v' B( y
time.sleep(0.01). |) V: o, B$ u, w) @7 m: m
$ a" d! T& F+ k* n/ a
/ p/ q8 x$ X# t) p: d% i0 l8 g語音打字器
2 d( O2 u& l) s: z- x# V功能介紹:7 {7 V) {! ~4 E4 d6 g* C7 Q
利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。/ B% L, F. G. y2 N+ g- B+ A4 k
將語音辨識的結果通過pynput在文檔中打出來。' G3 _' K3 ~/ \! r
該程式目前只能支援英文。( D* c, w# w( ]4 P4 C3 T& k4 P8 X
7 F$ G$ p5 o5 D
import cyberpi9 T1 K" D# P+ w+ n
from pynput.keyboard import Key,Controller& H2 {: R6 O1 B( Y
import time9 i& ~( n* x0 R' h2 [7 ~* P4 J
. }% F; J* q+ u2 q6 \+ Z8 Qkeyboard = Controller()/ m4 }- J) v* V2 R: o9 r
cyberpi.console.clear()8 i$ o6 L. z0 _+ N3 p
cyberpi.led.on(0, 0, 0)2 P7 ?8 B& X- W/ G* X
cyberpi.set_recognition_url(). n' e3 X: H) ]$ f3 u3 k' C7 @# f
cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得$ i, T8 s+ D. |+ o) {& ?
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼")
" B- ^& m! w. Pwhile not cyberpi.wifi.is_connect():
5 p7 L8 P, ?9 G4 _! E+ p pass
' z* A' C7 k3 P7 A; J. H5 kcyberpi.led.on(0,0,255)
' O$ N0 W% V' m8 mcyberpi.console.println("WIFI已連接")3 @2 l" ]0 H7 q8 w
cyberpi.console.println("--------------")
2 v2 }" `# q" k v3 T2 T7 Z$ F, ncyberpi.console.println("按下A鍵開始語音辨識")
/ Z6 k" u1 L8 r( mwhile True:
9 E) T8 f: g: q: { if cyberpi.controller.is_press('a'):5 N# U$ j- G% C
keyboard.press(Key.space)
0 x# c ]3 p3 ]0 | ^ cyberpi.console.clear()4 c8 e# O% g$ r: I4 X
cyberpi.led.on(100, 0, 0)
$ [; D2 Y* }* m! m$ h$ ~ cyberpi.console.println("開始語音辨識")% N3 X2 {: H* x& G2 U( L3 G
cyberpi.audio.play("switch")
7 R3 R- J4 e+ q) N9 O cyberpi.console.println("--------------")$ J `% S) l3 z7 P/ u
cyberpi.cloud.listen("english", 2)3 c- ~1 ^; @# c) F# x
cyberpi.led.on(0, 0, 0)- h2 l: s+ L& C. x8 j8 ~
say = cyberpi.cloud.listen_result()
3 c. M! p( h: {: [) w cyberpi.console.println(say)& \9 N [0 O0 K$ M. \6 ^
cyberpi.console.println("--------------")
% o1 K# X* h( R) n r+ o for i in say:
) T: f; f- w! U9 A7 L6 n" e; h if i == '':5 y3 b- m- ?7 M% C: g8 q( N$ {. ]
keyboard.press(' ')
9 B% u3 h/ A# r. k. c* j, M else:) x" }& y: b! @. o& ~ ~
keyboard.press(str(i))0 {' ^6 f8 Z9 K4 s7 l* I. m- X
time.sleep(0.03)0 F0 y) ^3 f( M9 G; y4 Q/ y- T% f
& d; g# ?" k% F# L$ l& O! k
matplotlib音量柱狀圖 4 W; g3 ]. v5 D* b# L
import cyberpi
5 b" I w9 B. M4 H2 Z( Oimport time
8 f8 i4 W1 d" p9 r1 a5 K ^from matplotlib import pyplot as plt; G7 o. h5 i" `
( ]( f' E$ J7 E7 l" xplt.rcParams['font.sans-serif'] =['Microsoft YaHei']
7 H( @% B/ z- rplt.ion()
% {1 k4 X/ e) ] v! A/ n7 E& x 6 H6 ]& X" Q9 t- f4 _5 x; g% G
while True:
9 ?) f3 |0 m* I; H( x& a loud = cyberpi.get_loudness(), `2 u8 l6 o+ q. @
plt.clf()
# Y) M. g, R/ t% R9 J1 B# o. E plt.xlabel("數據名稱") V' q* p8 ^4 @- }
plt.ylabel("音量讀值")
) F4 S5 }% K T# F/ C4 A y_locator = plt.MultipleLocator(5)
[* U* I# r) x3 `8 E$ o ax=plt.gca()
: P+ i' n5 d8 G ax.yaxis.set_major_locator(y_locator)
0 O7 [% Z. |. n) `! H" A/ q plt.ylim(0,100)
2 y. e4 E9 x" ` b; `+ V plt.bar('音量', loud, align='center',label=f'溫度{loud}') x* }: `# t# j Q
plt.title('童芯派聲音感測器讀值')5 X- }* L7 k& W# D
plt.legend()# `/ D; W7 ~8 {- |+ ~: [3 b; t
plt.show()
1 C/ c( @+ {. n( ~5 p4 K5 y4 y plt.pause(0.01)
3 H. h8 c# Y5 ?
% l7 E& U' U- J" R
0 ]6 z+ \& [% |7 p# [. {" zmatplotlib 多圖表顯示
* c4 z- |) E4 `! x0 Y# \+ H2 @6 Y2 n. w. K
from matplotlib import pyplot as plt! ~# Z# q0 N/ h3 Y
import time
Q, L7 p* ~ Mimport cyberpi
4 D: R8 n' H2 S& o - Q4 d y$ o1 i* ~+ q: h, K0 a
loud_list = []
/ h1 U( f. p2 M- L( [bri_list = []# `& y3 W6 {3 j/ s
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體
5 V6 u, K# F5 e# f' n9 `2 e7 \3 Oplt.ion()
8 ^, p5 f- ~0 d7 J2 m1 b; f) Wplt.figure(figsize=(10,10)) I2 b1 v6 _) Q9 {5 c) ~
plt.figure(1)
- L/ G" F- E- m; l& Px_locator = plt.MultipleLocator(5)$ i$ i0 g [; O2 }6 z
y_locator = plt.MultipleLocator(5); Q L% H) A2 R" ~3 ?: T$ r5 k% O$ O' R3 U
while True:5 X4 M f" l* D P' A
loud = cyberpi.get_loudness()
6 E. J5 ` A5 D bri = cyberpi.get_bri()! z7 R4 ~8 D, [0 J1 z' d. t
loud_list.append(loud)
2 E" T$ V H* k6 H8 _ bri_list.append(bri)
5 T1 A& F9 F V* f# x. s battery = cyberpi.get_battery()
: ] e: w4 {4 J* m1 @6 t size = [battery, 100-battery]$ p2 s6 L& a/ ~6 I
status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']1 J; [( _" `' D5 ~9 _* w. D
ax1 = plt.subplot(221)
3 q% J5 L: ~$ d. ?/ {3 R plt.title('光線折線圖')
7 K4 n& G( N$ q3 J ax1.plot(bri_list)
! H: @# T! S( [ Q4 J ax2 = plt.subplot(222)
* M7 q: K2 n1 D# o) e$ ?3 \4 L plt.title('聲音柱狀圖')
6 e E v( A" c' W ax2.xaxis.set_major_locator(x_locator)
- v3 i+ M: P$ [: n. O3 @+ z ax2.yaxis.set_major_locator(y_locator)2 D; H9 Z2 k1 J& z
plt.ylim(0,100)
) d, d/ f& N' B8 x ax2.bar('sound', loud)
( j6 ~4 |/ i( g6 I8 ^+ u8 t$ Q ax3 = plt.subplot(223)$ |$ r+ M% `+ r6 Y& F
ax3.xaxis.set_major_locator(x_locator)
: E3 S$ M7 B1 o, A- k ax3.yaxis.set_major_locator(y_locator)
9 t; r8 r' P0 m4 b plt.xlim(0,100)
; O" p# }* l$ u& P plt.ylim(0,100)6 y- E" }4 z) Q- V# [1 c2 v
plt.title('聲音、音量散點圖')
" |* ?. |, @! J ax3.scatter(loud_list,bri_list)& e8 h! H1 s- H2 y. {
ax4 = plt.subplot(224)
, Z; l4 F3 @' G- k/ J) { ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
+ Q" D1 i3 Y+ f" A! _" R plt.title('童芯派電量')
6 n, v) E) S9 S: i$ O1 ` plt.pause(0.2)
) {( \' A4 B9 R/ j5 e: X5 `" X plt.clf()% [: ?3 j. q G( a4 t
if cyberpi.controller.is_press('a'):, K% F" H. s r0 d! w7 U( p
break
9 N) g: w, n4 a. l9 H F if len(bri_list) > 500:
# H5 [8 j) M/ A1 R t bri_list = []. E" n* u7 F; m
loud_list = []
! T8 m1 _- V6 C& r k
- z2 M2 C1 }. A9 k z |