本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi
! O/ O! S" i. b1 A" x* f0 y6 u% Y7 C1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
# } I" x6 p- i$ R5 }% {2 I/ s
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載 % i1 q9 U. V/ P
- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。8 ^3 s! m8 a& i7 ]
2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
/ e% h- F3 m2 ^& d) X( u* A
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。" T; W, W5 g( V4 q0 u3 n
- Z N( C, {: b3 V* }2 X8 `- r- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
; P6 ^ x: x U4 _1 X8 j
9 X/ O' e# t# |# L3 _- D- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
1 P8 ?5 i1 G5 W; a* f 1 E# b4 Q* m% z6 }8 X/ O
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。) ]% m$ h/ F+ m/ b! O
8 T, z8 r+ ~1 _& q+ n" d0 p3.童芯派第三方編輯器程式設計準備9 y% ~$ ~5 W2 y8 x' U# H1 e
- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。
6 `8 E" i: u# n* I ! V& x8 T# s# X0 Y- t9 i' j, j# J3 N. O
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。3 \4 j) t' f# [! q5 G
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
z9 h2 ^2 S! U0 M- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。
* n3 D: A( b5 T, m+ A3 }
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 8 A, g: }4 A& E- F+ T! a8 l
8 }( K2 k! {4 I- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。
+ D6 u* q( x. f5 ]( P
& w# T7 _3 S5 \1 z+ D4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 F: N0 P, D0 t
5.一些程式設計案例- C6 w9 p( ?$ g3 \5 O
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput 9 ~1 F4 S, i0 F2 M: T0 |+ k
功能介紹:# ?9 H D. Q# w' N: y. Y
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。1 ]( V% F( i! w4 M* a1 o' _- b% ~
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。
+ P7 d. n6 M# X! n1 E結合藍牙模組可以實現無線滑鼠的功能。4 p. }! g/ m+ h; }* Z# H5 W$ Z
1 S3 _, g5 r' K3 { K) r
from pynput.mouse import Button,Controller" U5 T& E; x) ~
import cyberpi
' D3 ?- l, F& F# A6 Ximport time/ X# B( o( `" Z$ ]/ S- q# y- U( w
3 [+ y) `- B2 p$ w/ a
mouse = Controller()
4 E) a* G e3 V' K& }) _, a+ D % M3 S. p8 S1 {0 I4 J& |
while True:
% m ?0 S$ I" E if cyberpi.is_tiltback():" ]: E: ]* h2 Y/ p
mouse.move(-3, 0)
! @4 ?) `3 [& C2 I) u4 u/ @) C6 V; q print(mouse.position)
& l/ {6 i9 m/ r6 q) b" j if cyberpi.is_tiltforward():% x9 F, {+ J' p! g
mouse.move(3, 0)0 `4 t6 A/ y' y1 `0 h1 I. J- z
if cyberpi.is_tiltleft():
1 C2 C$ W; ^1 I mouse.move(0, -3); }, ^6 K- L3 \ n: c* H
if cyberpi.is_tiltright():9 \; i% t9 Y) S% \/ D+ H6 L; g
mouse.move(0, 3)
" i. T3 Y. z( O7 V if cyberpi.controller.is_press("b"):
+ c- I3 J9 T9 d: r! k$ u# s/ T mouse.press(Button.left)2 o" `: }, Q) j- T* l
mouse.release(Button.left)
. W9 K. W5 T' i, K0 x mouse.press(Button.left)* U$ E* ?+ ^4 e) Z0 D4 G6 k k
mouse.release(Button.left)
8 X' g* w4 p2 t( M" D if cyberpi.controller.is_press("a"):6 V$ F/ k+ n# G+ p" I6 N4 Y
mouse.press(Button.right)
$ p" |. E, k7 a" X4 @6 t, K: h mouse.release(Button.right)6 H% {7 J/ w) p4 I
time.sleep(0.01)# p1 ?* n1 i" i! \0 j
' K$ v4 f' y$ C3 `; d* a B$ C0 j( V
2 j# {4 @" Q( b! `$ b語音打字器 3 w3 Z, z8 R( P y
功能介紹:; \3 J3 f8 a# b$ m9 p4 X9 w
利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。8 f( Q2 t( U$ x4 m" K
將語音辨識的結果通過pynput在文檔中打出來。6 q$ A. d9 O9 m' }/ B R
該程式目前只能支援英文。
* h5 s6 m% k# L5 E0 S0 h& y
H' K* A, M0 P$ V2 V- `import cyberpi
& R: T4 ~6 W% [3 A" M/ @from pynput.keyboard import Key,Controller, O. ? ^1 ~: i$ g$ ]6 J+ z
import time) z2 |; L9 T2 ?; C- }1 @
9 a4 ?) d2 m7 E, m. k
keyboard = Controller()/ T0 m( s& l* G6 n4 v- S& a
cyberpi.console.clear()
' {+ ], L+ f9 E* }3 l7 U6 ]cyberpi.led.on(0, 0, 0)0 a4 B3 `' z0 n. v' j4 U
cyberpi.set_recognition_url()
9 l: _ I" |1 h8 Z" }cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得
9 i8 l3 H x1 E& w5 ncyberpi.wifi.connect("WIFI名稱", "WIFI密碼")% e4 P5 G4 r9 D# I
while not cyberpi.wifi.is_connect():
4 B/ K# h/ Q( h pass
4 P, y! ^+ n: t: ecyberpi.led.on(0,0,255)
3 b2 y; A- v' P% H% y% x8 ?1 hcyberpi.console.println("WIFI已連接")# U8 T; K+ Q1 b3 Y
cyberpi.console.println("--------------")
" {0 J' F- F. \8 \cyberpi.console.println("按下A鍵開始語音辨識")1 X+ A; G& M( K3 U& R; I0 L
while True:
! f, q/ J- E. ^# M/ }: r" i if cyberpi.controller.is_press('a'):
: e0 }. n1 } R( { ^ keyboard.press(Key.space)
7 M3 o }+ L2 g( e; {! \ cyberpi.console.clear()
4 X/ h8 e; F+ B- Y- K3 [* X. ?4 M cyberpi.led.on(100, 0, 0)
- z" g/ L- {* e$ E0 s) w | cyberpi.console.println("開始語音辨識")2 B: T3 w4 R' E
cyberpi.audio.play("switch")
6 t8 Q0 w$ [* _. x cyberpi.console.println("--------------")! S7 `, |5 a1 ]2 I) A- \
cyberpi.cloud.listen("english", 2)
% |# V& \ \/ F4 D cyberpi.led.on(0, 0, 0)1 i; G9 n2 a/ t+ }; x2 j
say = cyberpi.cloud.listen_result()
9 m; u' e$ M! ~; ?! c cyberpi.console.println(say)
4 `' c+ [% `8 V5 W) m- | cyberpi.console.println("--------------")
: E8 r$ J: v: _1 R0 N/ o2 e for i in say:
5 q9 }. G* m x4 X+ j6 b if i == '':
* L: O; Y3 g3 d+ X5 x* a2 Z- N keyboard.press(' ')3 L* d2 v+ o4 a% U" H" Z5 ]
else:1 |& x f' N- S6 ]3 @7 f
keyboard.press(str(i))2 `+ A: O: }7 x) F9 h1 ?; e
time.sleep(0.03)
" d1 O+ y, O! |1 y+ ]& J' u/ ]. W- [ {. _' t# W$ P0 _3 y
matplotlib音量柱狀圖
' T! V5 r' b' K7 {3 {! S8 @+ f7 Yimport cyberpi
4 I @" h. |; nimport time1 a1 h: B& f( _) Y0 O6 b
from matplotlib import pyplot as plt" t" T5 j* Z: j1 n) ^: B
! Y* p& ], q4 |) v" mplt.rcParams['font.sans-serif'] =['Microsoft YaHei']- z. ]3 M% @5 C/ N! e
plt.ion()
* b5 e4 w; G! a! I4 f" s7 x5 T1 n 3 n: U- ]. u8 S: s- k
while True:
! | H- T, j& ?1 S2 _# r loud = cyberpi.get_loudness()
( N/ } {& ]( S8 D plt.clf()% ^. v; M q2 N# P9 f
plt.xlabel("數據名稱")
; _( G! M6 M- P) P3 G plt.ylabel("音量讀值")
6 o3 f" T% O7 l4 R$ F) j& o' ] y_locator = plt.MultipleLocator(5)" x3 Q; {- @- g: x( Z
ax=plt.gca()
' p+ }" i! h& S* a$ [ ax.yaxis.set_major_locator(y_locator)
$ l. a$ s: R" }3 Z% P% B6 t! Q plt.ylim(0,100)' k9 S! I L- @- q
plt.bar('音量', loud, align='center',label=f'溫度{loud}') y$ S3 |, x! V6 ?# O
plt.title('童芯派聲音感測器讀值')7 q& H# |+ ]9 f3 F6 {) H. _0 V4 ~
plt.legend()
% _' N3 F$ N8 f8 a plt.show()
0 A2 ^" R) D/ U: j- X* `8 z plt.pause(0.01)
" I6 a! v" K3 X' N& l, [. Z8 T
, a0 o4 p7 Q. I2 |1 d
1 O5 M5 G! \! O# ?! amatplotlib 多圖表顯示
" d: r& H* E9 X: `
7 h6 B) p f2 Z" Q: ?6 e" hfrom matplotlib import pyplot as plt' j) D1 C0 V4 p( S
import time
5 q2 G) q" _0 T1 T% ^7 z! |1 bimport cyberpi
0 ?2 `9 \: Z! p" P1 }. ] ) P" d q( K* L! z) `/ P
loud_list = []
, ~. d6 W9 t( K# qbri_list = []
7 i9 C& O7 a$ q9 gplt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體5 ?' r& _0 @5 D- V, ^
plt.ion()
/ J* q7 y2 y0 J: ~) hplt.figure(figsize=(10,10))
! p9 m4 b9 p- Dplt.figure(1)
6 J. {% s# ]& |2 Z2 [: i* ]- Zx_locator = plt.MultipleLocator(5)
6 D+ H% H- @: C; V7 ly_locator = plt.MultipleLocator(5)* l6 j0 _" c; @! w; d+ ?
while True:0 P8 O+ L; b' }) W6 y4 L6 U3 l2 }
loud = cyberpi.get_loudness()
. X$ }; E+ X; Y4 R) i# N( O bri = cyberpi.get_bri()
) {% k( A- m! L3 a I0 ]1 r) L loud_list.append(loud)( W- J. _& L) T/ u
bri_list.append(bri), K) `! M5 V* T& ?$ a0 j* ~
battery = cyberpi.get_battery()
* t- _' F, l. n [+ S; v) V size = [battery, 100-battery]: t: }/ y/ a9 [' @+ K
status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']) ~ X3 W: v% ]6 {1 E3 a9 K
ax1 = plt.subplot(221); Q C" ^% U; |$ G9 |, a1 h0 x! d# @
plt.title('光線折線圖'): f6 ~& D7 ]6 c, j! R
ax1.plot(bri_list)
; f( C8 H* [" H9 J: y% E5 H ax2 = plt.subplot(222)" D% d5 Y+ |. f) t6 ?
plt.title('聲音柱狀圖')/ S: g' K- ~5 Y! u* l1 a
ax2.xaxis.set_major_locator(x_locator)' D" H8 i5 u9 p% V" g
ax2.yaxis.set_major_locator(y_locator)" D- p' ^+ |9 i; q2 ]1 B; G
plt.ylim(0,100)
2 C& K5 [& f' y# {* O9 O ax2.bar('sound', loud)
( Z8 K% z% `/ ] P6 @9 N J ax3 = plt.subplot(223)0 f9 u8 Z; W9 _+ j
ax3.xaxis.set_major_locator(x_locator)
; \' N: Q$ r+ Y+ I" X( F1 g ax3.yaxis.set_major_locator(y_locator)0 d) x% }) Y/ l) v9 g
plt.xlim(0,100)1 u- F. J3 _% o
plt.ylim(0,100)7 \1 z- A t6 E0 S
plt.title('聲音、音量散點圖')
. Q& X8 a: g, `; R" b. R, _ ax3.scatter(loud_list,bri_list)
: c! M# s9 F" c8 K/ T! T ax4 = plt.subplot(224)4 `2 U3 n; N0 K1 |! k
ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
8 d Z* b4 E5 `' m, _4 x( } plt.title('童芯派電量')( ^) }0 T, Z0 B4 L7 r; U8 H
plt.pause(0.2)* w: p' A3 F1 _7 E
plt.clf()4 v+ m3 P4 H$ G) Q9 [
if cyberpi.controller.is_press('a'):
% _4 |+ r! {0 [2 g' }8 t break2 o& ^% S0 O/ L4 _& n
if len(bri_list) > 500:
( C6 o) k) Z4 Q; l0 o R bri_list = []
7 k" f# U8 _: \ loud_list = []/ v M+ a: P+ d9 J t
* h: f6 P1 ]/ v' c: ]0 l |