本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi
4 ^, r+ q2 {8 |# `' Z1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。# \+ F" U( x- X8 k$ z2 Z: y
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載
) O6 S0 I: r# T" Z& G2 S- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。) v# i5 S& v- u& Q
2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
8 Y+ `! q1 G$ p3 k- _7 x+ m& y- n% w
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。4 A- E8 n8 U2 \( w0 k& I
/ h8 ]* c, c# P- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
/ A6 G, a+ v7 k# y, q6 [) e6 N0 f
7 a: }0 b& a) v @! r- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
C2 d' E+ X* \* E9 |6 K8 W
. p v9 y {* ~( c$ j# r& G4 a8 y- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。% z5 `) H4 @9 [& j( `3 {
/ w4 E8 V, J" X0 @" p0 F3.童芯派第三方編輯器程式設計準備: u) ^5 ^ J# ?+ \+ N0 u7 c
- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。! ^5 b8 M* B9 z- w' H" X" V
- Y9 l0 ]! f' S) h
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。. }3 ?2 D6 A+ j
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
( H1 e4 p/ R+ O3 W' ?- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。/ q6 g; r% x' j
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 5 g& ?9 c0 m- W# \! A) Z0 _6 d
8 D. X; [# B1 t* t9 G. }- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。
+ d. Y1 x, Q4 O2 _% O* K* ?
- j( ^: e+ l1 x# x; b4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。
% `+ Q2 J1 S4 H" Q5.一些程式設計案例) I8 {9 H# C9 v, c
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput 1 U) `5 Z2 z" \9 W% g8 G
功能介紹:. Q, y0 f N5 W! P" g' t
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。" q# J3 {. [6 W! R) A0 f
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。& O y$ `, l0 V4 y# A
結合藍牙模組可以實現無線滑鼠的功能。
1 B( f( t* S! Q
1 D' _. [3 X& [) A( ~" efrom pynput.mouse import Button,Controller; j% a) o3 P' G6 o
import cyberpi* A/ W& p8 Q' A+ [/ D, c. R# `/ c* j
import time
/ C- \+ k9 ^ O+ K" v. d; G G! V 6 x, u. T( D# w E& s4 |
mouse = Controller()
/ n9 q- |: ?8 f7 i& I% M% s 4 z* E: l7 W8 j
while True:
: a0 i/ {' j# G2 ? if cyberpi.is_tiltback():
' \( J# r# y( V K7 F7 y$ E/ S mouse.move(-3, 0)
: |. ?" e. X( G4 e+ D- r5 @ print(mouse.position)
2 W5 @: L) K& e2 n( h& T if cyberpi.is_tiltforward():# s+ d; j h: a D$ q! I
mouse.move(3, 0). j; B/ W/ ] |% Y: V5 S
if cyberpi.is_tiltleft():: b' r0 Z" i7 W( Q, p" e7 |
mouse.move(0, -3)
' ~3 {4 Z" W$ F) t4 S if cyberpi.is_tiltright():
6 h7 r7 T1 X6 q: B) U6 u, I mouse.move(0, 3)
) e A) i2 s+ i! [4 Y: s if cyberpi.controller.is_press("b"):7 i/ n9 Q( z! I, N7 C
mouse.press(Button.left)
" E% q8 H7 D. d9 l* d- | mouse.release(Button.left)
# a) d% D7 F) ] mouse.press(Button.left)
. p0 p, H! q" a' M5 v- W mouse.release(Button.left)
/ Q, |; H( k+ \2 k if cyberpi.controller.is_press("a"):3 E( \ [2 d3 A3 ^! ~
mouse.press(Button.right)
$ @ h2 R+ W; i! F# ^0 S mouse.release(Button.right)
9 F- x* ]$ n: r8 ?" i time.sleep(0.01)6 m/ a3 w# {5 x+ z2 g
* J% z' R- ^' M5 n# Z2 [3 \
- X0 m# E5 @$ o* V
語音打字器
+ y8 S2 J# L7 T& `' U: e: N/ u功能介紹:
' w; X P4 x3 O* d利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。2 _6 l+ S6 e2 ^9 t; }. }# V# \
將語音辨識的結果通過pynput在文檔中打出來。
, [1 F) z" _ ]5 E4 h" w: b該程式目前只能支援英文。
( X0 @ M: p7 |0 A! o% U4 [+ h3 f X
import cyberpi
3 f8 V8 {- f# W. @7 R( k5 zfrom pynput.keyboard import Key,Controller% P3 o1 R' \& n; J+ V4 v" R* }/ |4 v
import time
6 ~( m1 _/ w$ B4 G4 v3 C( ?- H8 M6 h , r$ `* x5 d9 y/ {. D
keyboard = Controller()
: j9 a, W9 R4 Q" C/ A+ l7 bcyberpi.console.clear()5 r6 u. \1 J, b) E; d) F' C* _( P" B
cyberpi.led.on(0, 0, 0)9 \; m. o! W1 Q5 c
cyberpi.set_recognition_url()$ ^5 g# ?9 B6 r: |$ w2 ^
cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得
5 p5 x5 ^0 j5 ?$ D8 ~: y; O3 J7 Ucyberpi.wifi.connect("WIFI名稱", "WIFI密碼")
& ]' j; _ M1 ]. V3 }8 c) R! Vwhile not cyberpi.wifi.is_connect():( m. Q' m- ]4 }9 W; i
pass
3 b I9 m. P- R1 y0 w+ d) Pcyberpi.led.on(0,0,255)
- s% ?3 R7 h( z+ kcyberpi.console.println("WIFI已連接")2 I5 u( k9 Q" k$ w) v1 K X R
cyberpi.console.println("--------------")6 x8 i+ P4 `6 T' m! `6 d" ~" w) f
cyberpi.console.println("按下A鍵開始語音辨識")
1 D% \3 ]& k3 x' twhile True:5 l6 `* D0 c0 I; l# r% {
if cyberpi.controller.is_press('a'):: ~( J5 r& e! R6 n0 v3 `- h& Y
keyboard.press(Key.space); j3 f2 z; I9 m* g- O& P6 I
cyberpi.console.clear()5 l9 O a' c+ Z; S" l* i( E2 ~
cyberpi.led.on(100, 0, 0)- }5 Y8 ?! U5 d, I) H1 \
cyberpi.console.println("開始語音辨識")
4 b) i! h& T# W2 x cyberpi.audio.play("switch")
/ X& O/ ~' h# D9 m; _, k8 y/ h cyberpi.console.println("--------------")
2 s l$ Z$ R; M cyberpi.cloud.listen("english", 2)+ D7 r3 x% u0 V
cyberpi.led.on(0, 0, 0)
4 r. b: I' O3 w! @( r. `5 q say = cyberpi.cloud.listen_result()
2 A4 \0 l# c3 F( d0 ~ cyberpi.console.println(say)5 x" q1 |- }/ \8 X) |4 D: a& W [. S
cyberpi.console.println("--------------")
9 U7 d- }8 ?# k6 O e& E6 i for i in say:
- D6 K9 F2 j, ~0 y8 l; Q if i == '':
5 \1 B3 k; [ c9 X [& d keyboard.press(' '). q1 a j8 }) O/ p6 m- C7 v
else:1 k* g, c0 x. _. B% x3 `
keyboard.press(str(i))2 ]7 r8 ^8 P! ]. N }
time.sleep(0.03)
$ q% C8 C8 \. i, ^3 g& }7 ?$ W' l% p3 |- Z
matplotlib音量柱狀圖
6 T* j0 h" n) e' Timport cyberpi6 j6 A' U8 d2 Z" G0 P2 i
import time, M! W9 I$ |; y3 g# ]4 b- _
from matplotlib import pyplot as plt
/ q% l0 M9 n6 p! D d+ L) Y
6 r8 H3 m6 y, I6 d( O. wplt.rcParams['font.sans-serif'] =['Microsoft YaHei']+ ~. ~- o$ d6 C* l
plt.ion()
: u$ X) o' f9 `! J$ K- }5 H
1 [+ O, c' h1 A: P+ Swhile True:+ D- p- U: ]" h4 d3 J5 {; P! |
loud = cyberpi.get_loudness() }1 b( t) z. Y" z
plt.clf()
- m4 L! `: B" o7 P plt.xlabel("數據名稱")* X7 z- g7 }( m- I
plt.ylabel("音量讀值")' _2 a w9 l9 V6 J3 E
y_locator = plt.MultipleLocator(5)
8 \6 E9 S4 c+ O) L/ X ax=plt.gca()( \0 b p+ u3 l" b
ax.yaxis.set_major_locator(y_locator)
, i# _5 Y: J( E# v- e plt.ylim(0,100)
2 h$ ^" M, \" }* L% d plt.bar('音量', loud, align='center',label=f'溫度{loud}')/ Z9 V' k& U# ]7 j' X# q
plt.title('童芯派聲音感測器讀值')! ?4 |5 u: t" P/ P* ^& S& t2 D
plt.legend()
2 J3 f3 m. Z$ t3 j+ o; D plt.show()/ u T2 I8 D4 X/ j7 L9 _
plt.pause(0.01)% X* I* W1 k v
1 l7 H* Z0 O* [7 ]5 [: h1 b
- S+ A( y: C, ~: {4 H; Qmatplotlib 多圖表顯示1 y: s- |- k- t G; x1 f) @6 f
/ G7 f5 u5 l: i: z" kfrom matplotlib import pyplot as plt4 w! w) D9 v" j* r* w7 ?& q
import time
9 r, Z, i: Y5 q2 k5 O: @& j. Fimport cyberpi4 k5 L0 f, d9 [5 l5 [
/ J" y$ V. Q/ Uloud_list = []
& {2 `8 X8 ^) z/ v, X( b- X* q b Wbri_list = []
- `# M# O" D) }6 k5 x6 B( `" dplt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體8 [: r( W$ y! C! T4 l
plt.ion()
4 u: g9 h, s% X% ~plt.figure(figsize=(10,10))
- m0 j9 F" H; z# t9 `# Hplt.figure(1)+ q1 z! O. G' s( i, q
x_locator = plt.MultipleLocator(5)( S8 A3 J6 K; L; }, I
y_locator = plt.MultipleLocator(5)
& L9 o9 X, W* ~8 H" Wwhile True:+ \; @+ D Q, K0 d! d3 e
loud = cyberpi.get_loudness()
& I0 j" c! E# e4 A+ [2 Y( u: n: U bri = cyberpi.get_bri()
) ~" F t5 j% w l) H, O loud_list.append(loud)
7 k4 l* f. Q- J. P- U bri_list.append(bri)+ q. \0 j0 H6 l1 n0 y; l
battery = cyberpi.get_battery()5 M7 d/ R$ A0 ^% k) X( f
size = [battery, 100-battery]4 A/ Q. o5 r8 q6 W
status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']( V6 H# o. P' Z) z. J o& M
ax1 = plt.subplot(221)
$ G3 e7 X% m' Z5 V# [/ g8 a* v plt.title('光線折線圖')! D$ f& f- B- m1 |
ax1.plot(bri_list)* }7 V1 A3 K; C9 V
ax2 = plt.subplot(222)
5 e/ j6 ^+ b( O4 } B+ [ plt.title('聲音柱狀圖')
G. Y% b8 J3 |5 d ax2.xaxis.set_major_locator(x_locator)
* F& d! _! t3 b0 U. n- Y ax2.yaxis.set_major_locator(y_locator)
% H6 U' Q& ^0 Q4 p" u% g# F plt.ylim(0,100)5 d7 {' b2 d6 E) y1 r" p
ax2.bar('sound', loud)
2 u. j9 O" W& c ax3 = plt.subplot(223)# Z# H' h6 b! |% |8 ]
ax3.xaxis.set_major_locator(x_locator)0 P* V7 g8 f. u) s8 U9 u; ~5 k
ax3.yaxis.set_major_locator(y_locator)
6 R0 D" i8 b. n5 F plt.xlim(0,100)0 M* I$ x9 B2 x; {7 ?) W- F
plt.ylim(0,100)
+ G- h7 ?) P$ E1 y! L& [ R+ u plt.title('聲音、音量散點圖')
2 T# b& _4 ?5 f6 ` ax3.scatter(loud_list,bri_list), @2 T4 I% t K. b7 M/ W+ P+ [
ax4 = plt.subplot(224)
' [; A3 d1 C) G9 p8 e( A) o6 y5 f! W ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
2 }- k8 M: N+ y% V+ e plt.title('童芯派電量')* o$ o3 f' i/ z0 H3 r5 ^( g
plt.pause(0.2)
5 p6 R* n" Y- a8 k% f1 }- ^ plt.clf()
, q: o4 P) s/ J7 [) J if cyberpi.controller.is_press('a'):
" c2 K; e1 i g9 l4 J, p break
3 m5 g( n$ r, Q+ }% D% m) b if len(bri_list) > 500:
6 Z. f3 c' [9 z5 @8 {* R bri_list = []
& M, A S) ^2 q/ O0 I) I, A1 f5 R loud_list = []
2 @4 L, }3 r- h3 N$ U5 q( Q. u% c+ U3 n O
|