本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi
$ C" N' x5 d' |4 t1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。% x. K9 U, C2 g1 C: q) A
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載 4 J. H0 v1 i+ j: {- ~& j
- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
P# x" x: P, ]: H 2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
$ U% R1 U+ u: X
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
( O" ^* v6 }# ] D2 G- C9 C4 C5 {
- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)3 n+ \5 L: [% m$ W! G. G9 S' r
7 z( C" X/ _# u5 j
- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。9 ]6 X- J% U9 _8 Y) [# Z
/ ^; W( p3 r' S4 M0 t' a% P5 e
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。, N' b' Z. K4 F! A' [; @ p
9 [: c% r( C) d
3.童芯派第三方編輯器程式設計準備
% ]' ?$ X# J# H" N- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。4 A$ S# d8 o% {' J1 K
4 P0 d) V2 s' k7 Z
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。
0 x: Q* N$ L+ r6 v; @* a! g
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。 & G5 d9 J1 N& N1 x" J; q5 l- [7 @
- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。
/ C# p. X! r4 c3 {/ i5 K
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。
% }8 _$ C' e; C
! U L3 P& L; H1 Q5 m* ]- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。
7 D) T8 b7 f0 N: n* f . \# ]( L: L0 ^0 e( ?4 {: p) L! t
4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。
" G" E% m( x9 i& k$ X5.一些程式設計案例! l; O- A$ W8 f
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput 8 P! b& \: v, g5 s: s- X- E
功能介紹:
3 T5 C' b4 F' Z: f/ m利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。3 f9 ]4 l' m7 @. z; s4 s$ C) D/ K
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。
8 p5 [0 |: G6 K0 g/ s. ^- x4 p結合藍牙模組可以實現無線滑鼠的功能。/ E& P. Q: R8 c6 @+ W# D( {
. u. f1 j( O9 Z! M# D+ J8 [
from pynput.mouse import Button,Controller: S4 d; l# y, n& O# J& S4 E7 q
import cyberpi/ m; P: n) `- l% K7 k% O+ J" n
import time9 Q8 @) t( ]) T/ W. u' y1 B& G
_3 ^; T4 x7 H" i8 W1 Z3 T
mouse = Controller()
. f7 ]% r9 l" d# D 8 v2 P2 B; X2 I: n: n
while True:. `; `4 R! _* |" ?6 g* D+ B
if cyberpi.is_tiltback():6 C7 E: X( r. d: T7 }& K
mouse.move(-3, 0)3 Z' t: M2 h* }/ ?% B! r
print(mouse.position)5 a* W/ G* k3 {
if cyberpi.is_tiltforward():
/ T; O, I0 ?' d mouse.move(3, 0)
9 U- Q, y3 A& D0 x if cyberpi.is_tiltleft():
]0 h/ z# e2 c. Y$ _ mouse.move(0, -3)
$ C& p( ~* z2 x2 o( P if cyberpi.is_tiltright():3 p/ e% M. ?# B3 q: |: a* f/ W! j
mouse.move(0, 3)% ?6 g6 X2 i' ^6 s1 b; e
if cyberpi.controller.is_press("b"):
+ ~+ u1 U" F$ @# T0 X( ? mouse.press(Button.left)! \8 |* m1 |3 B# u
mouse.release(Button.left); x* l# O2 |% G" u. F+ j$ B# G( h
mouse.press(Button.left)3 p3 m, b* Q/ V2 ? W2 W
mouse.release(Button.left)/ x! j( d. v' g" t7 \& g- D8 U
if cyberpi.controller.is_press("a"):
1 f* `2 k1 i5 S1 e6 I ~2 C a6 q mouse.press(Button.right)
4 P; M4 h( |3 Z9 _6 r7 B, u; I mouse.release(Button.right)
& G) X) l! B' ] time.sleep(0.01)% x$ u) q+ h2 N, m' P M5 U- T
9 H1 X( h4 w* `( u+ G2 n% b
: D1 [# Y- G5 P4 Y5 o9 W1 [# @語音打字器
$ T G6 v0 |& B! a! s6 G7 ?# N/ u功能介紹:, h3 k7 I" W3 j
利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。& q" H7 u& R- h( _
將語音辨識的結果通過pynput在文檔中打出來。
6 f6 N8 ?3 [& K* Q該程式目前只能支援英文。
. u+ k: G6 a/ r1 s' ?" |7 d$ d7 @( g3 r# k* ^
import cyberpi
" t/ G! c7 B1 {! l6 g, g9 i- O! qfrom pynput.keyboard import Key,Controller6 P. r! G# O4 p6 I( _
import time( e5 ~2 H3 V5 T
( C# d/ S O6 l* h- l
keyboard = Controller()
% ^9 Y: Z4 o5 z/ ~cyberpi.console.clear()
" G9 n3 H1 O3 t0 V# zcyberpi.led.on(0, 0, 0)& W8 }" d* r& C" C* G& z4 o) |& P
cyberpi.set_recognition_url()" I9 M( ^7 ]$ j, t3 |- l
cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得
1 \% b5 V2 d! \$ ]# Fcyberpi.wifi.connect("WIFI名稱", "WIFI密碼")& w1 V) H5 `1 K7 s9 ]' m# B
while not cyberpi.wifi.is_connect():8 d9 J3 w( Q x5 ]; V' N+ i
pass
* |4 y9 i. u. |3 j- _! dcyberpi.led.on(0,0,255)+ K" H1 r6 }& O' h. b0 }
cyberpi.console.println("WIFI已連接")1 \) H$ D3 {/ }
cyberpi.console.println("--------------")
7 Q1 S) I7 Q! ~1 f( kcyberpi.console.println("按下A鍵開始語音辨識")
; w$ Y$ `+ z) H; S9 bwhile True:
+ `, w& r3 c+ j: D A% `5 j if cyberpi.controller.is_press('a'):
# ^9 M4 t+ {9 j1 r) f$ ? keyboard.press(Key.space)
: I; Y; E9 q# [, F; d cyberpi.console.clear()4 x J+ f. b/ {' r1 z3 y- @
cyberpi.led.on(100, 0, 0)
* H3 j0 c/ M* ?! Q! O cyberpi.console.println("開始語音辨識")
: E4 `' V- l/ k( Q& [: S cyberpi.audio.play("switch")# k5 ^+ I! F4 H1 j9 j* V" x
cyberpi.console.println("--------------")5 e4 f+ K. E3 |6 G
cyberpi.cloud.listen("english", 2)
( j2 F0 J: A1 j J t cyberpi.led.on(0, 0, 0) @# Q% Q. v/ b, ?2 @
say = cyberpi.cloud.listen_result()
6 t* X; r. G' n; c( b2 \9 i cyberpi.console.println(say)( b1 I& Z: D+ b b5 K
cyberpi.console.println("--------------")) p8 ^+ y i& G4 w
for i in say:
5 ^& J# R, r# w' h if i == '':
' m/ C% ~9 H: i: P3 k' v+ _ keyboard.press(' ')
2 f+ u! R: i' v( U4 L$ M else:* F: ?! w3 H# s* O5 c: e
keyboard.press(str(i))
0 l5 g- m: Z" {" w time.sleep(0.03)
6 r5 [, I. ~( K
7 A) B, \, A2 a1 Hmatplotlib音量柱狀圖 " l# L# x+ B% z5 G( m
import cyberpi5 m2 P) k& ]9 |" `- p
import time5 t/ s' }2 Y9 p+ }7 M
from matplotlib import pyplot as plt
( H" O- d. e1 t
) Z: C1 J% ]' x6 n, `6 ?4 G7 Lplt.rcParams['font.sans-serif'] =['Microsoft YaHei']
/ d/ }+ d- N/ G5 m) U, A3 ~; Pplt.ion()
& | b( B0 Q3 ^ t: L( ~* G - O$ T1 a {3 f, j! ?/ a
while True:' p! I7 g6 _" D& n; n
loud = cyberpi.get_loudness()
0 y, | J( z1 W: W plt.clf(); c2 C; T$ k3 \5 Z2 \8 |
plt.xlabel("數據名稱")' q( Y- @6 y! {! v3 ?
plt.ylabel("音量讀值")
, I9 n6 I- G: I' E& i2 | y_locator = plt.MultipleLocator(5)9 ?* D! A" `, I. c) f- a G. ~
ax=plt.gca()3 X7 G0 r, q; h. f
ax.yaxis.set_major_locator(y_locator)
9 {* Y- r1 a. A9 }/ d. E) ^; ^& H plt.ylim(0,100)9 x7 P b" S/ F$ z7 v
plt.bar('音量', loud, align='center',label=f'溫度{loud}')
! W F7 p( ~2 A# D* Q* t8 T' l plt.title('童芯派聲音感測器讀值')
1 C: a8 `* a) k plt.legend()
% Z! }2 V2 u8 K5 w0 W plt.show()/ @% k4 N3 J2 ^/ u U
plt.pause(0.01)' a6 t2 @, ?4 \# F0 G; {
0 a1 ?; Q1 A$ \; q: V3 |
7 Y5 W* T( e: T6 mmatplotlib 多圖表顯示
- E* B. @$ U$ H& l# d1 @: Q
, V' S G, q% [$ sfrom matplotlib import pyplot as plt
. [5 W$ ]3 F# o2 _5 t1 K; h, D& wimport time* U# O1 z' j% x! }
import cyberpi
9 t* n& C2 W4 [& f6 ~ 0 N, M8 S, W+ Z
loud_list = []4 }9 R& {3 ?/ c }6 Y
bri_list = []
4 E7 a) N! C8 K& Z1 y: cplt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體" D7 n: r! F5 N; s: k2 ?( ]1 I+ R
plt.ion()+ N R6 E- H" y' Z* {/ r6 @) i
plt.figure(figsize=(10,10))
. O3 y- Q1 L( f9 M) U/ z. z: l+ Qplt.figure(1)
- a+ \. p: B4 `0 b$ O/ Vx_locator = plt.MultipleLocator(5)
2 V. C( b0 R9 P/ X+ c# `: X& J5 Dy_locator = plt.MultipleLocator(5)" k$ E5 s& t0 n2 k8 B
while True:
; e" N0 | X( b+ G3 K8 q% h loud = cyberpi.get_loudness()! X u) J4 d q) m
bri = cyberpi.get_bri()
3 N; `) i4 H2 i4 c9 z. x. `3 Y loud_list.append(loud)( J, q8 B; N! d6 a4 v% O
bri_list.append(bri)4 `# } \7 n" W
battery = cyberpi.get_battery()+ {& f$ R" m/ u
size = [battery, 100-battery]
+ ^' C) z1 J8 F4 x H status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']. K( Z6 L$ ~+ |+ b* Z6 n' p& v
ax1 = plt.subplot(221)
' [1 E, A$ }" @5 E; P plt.title('光線折線圖')
1 |" D: w8 r% J* { ax1.plot(bri_list)% [- {" X( W: _: }+ [9 w
ax2 = plt.subplot(222)
0 w' c% q+ L5 C% d plt.title('聲音柱狀圖')9 M& l a& m3 s% h! q& `
ax2.xaxis.set_major_locator(x_locator)! ]2 c7 I" m0 @6 l
ax2.yaxis.set_major_locator(y_locator)
: m7 B9 H) ~& Y8 f2 V plt.ylim(0,100)# _2 D) ^: z' [. Q% g. Z
ax2.bar('sound', loud)
( s& T1 |0 T6 e- v8 H3 ~- } ax3 = plt.subplot(223)
' g' B" Q$ q. L3 {2 _ ax3.xaxis.set_major_locator(x_locator)
3 w4 t+ z* I+ u ax3.yaxis.set_major_locator(y_locator)
8 p# v, p, n2 s9 c2 _9 [- B i- W plt.xlim(0,100)
1 l4 s- _- m; E, d# B7 N' \ plt.ylim(0,100)
: R t! t. P) p" g) ^. n plt.title('聲音、音量散點圖')
$ C% G9 P9 a4 u) ~; ]7 | ax3.scatter(loud_list,bri_list)
7 N. z, r* ?- V% u+ n- y0 _. G- `' ~4 Q ax4 = plt.subplot(224)2 G8 j6 y, Z! s& u$ W. d
ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
6 O7 E- Y0 G2 }+ U% Z plt.title('童芯派電量')
( N" X1 L- u' B& l/ w4 c plt.pause(0.2)
- ]6 m, ?4 V4 `; ?1 ~/ `: E. i* } plt.clf()
( i2 c! F5 ~6 X if cyberpi.controller.is_press('a'):
z0 ^9 t$ _/ B/ L# f break
& @$ U( a4 Y$ E& { if len(bri_list) > 500:) b9 p U5 |, T$ ^2 q5 p, A
bri_list = []8 n+ K$ J# z+ U6 H# Q7 i" j
loud_list = []) z7 u; `2 K$ v
( x5 h, K {0 {3 Y- j3 D |