本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi / @; F/ M' t8 h: H6 H
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
, a3 _8 j+ ?8 D, q8 H! Y
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載
2 N+ S" l9 ^" [1 m/ M' g; |- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。8 j# ^6 B! Y1 x& ~: |" D' Q
2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)* H: J: C; `) \+ @$ q
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
, h5 M2 d/ H4 Q5 k4 r 8 t$ z# ~ o& d; n1 S6 \& u/ a
- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)7 I% N' H" m5 i5 i
% I* q, ?# u! u- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
9 J. F8 H4 a( h! n/ N
+ m+ n! F! f! I4 ^2 c$ ?0 b! z- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。
; `# _; @. t3 C/ e # ^/ F2 v1 O5 u4 {, S0 w8 F5 t
3.童芯派第三方編輯器程式設計準備0 i6 {3 y7 p8 i% U+ v
- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。8 g: ]# G2 B" V' e% C0 ]8 V* s
7 `: Y3 ]" W% q* J+ X# M5 T
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。: I8 q2 w( k0 S+ l4 e" A7 A0 }6 @) r+ |8 ^
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
. Y7 m- a8 l0 t' G' K( [- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。
2 i+ D' A" v6 C& e
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 @3 F" u) Y) I8 p3 N3 y
* G; |% W/ }0 n& y* p, G- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。( o1 Q; y8 p/ W. J5 x; h
) p) }% W0 O* `) M6 m! d
4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。
$ i" l4 r( q6 v& z5.一些程式設計案例" U$ H, x1 n' D/ }/ f1 K2 ?) T
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput & M+ ~! Y& G, r& l
功能介紹:
' B. q& m0 B; g0 r# o6 O( Y6 h( V2 J利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。
2 D$ u) e" U1 B0 l9 _7 i通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。
" t5 {1 V/ N( `: p9 j: _: ~結合藍牙模組可以實現無線滑鼠的功能。
% B9 E7 n$ L. O1 w8 M, o4 G' N) Z, Z4 \
from pynput.mouse import Button,Controller
% ]: B2 r4 S5 O+ Eimport cyberpi
$ o2 m8 k, p% H- y, w/ b& i# H: Rimport time
6 O" k* w1 f" g# o
6 q; R3 V4 e3 J0 B- r' Y0 Emouse = Controller()# h+ w; R& t6 L6 U! o
. X3 J M9 Y- Q2 v9 r, l+ @) Gwhile True:
* }% ~9 X% v. i4 Y2 ?: R if cyberpi.is_tiltback():3 G, b7 G, Z5 X/ `4 h
mouse.move(-3, 0)# y6 V: G S5 ` ~: v
print(mouse.position)
( W6 a: @( u+ K" ]% @ }* D if cyberpi.is_tiltforward():
S! v0 f3 X! M: T mouse.move(3, 0) l3 K& D' P+ c$ o6 ~2 E
if cyberpi.is_tiltleft():; H+ N3 R' D- D9 u* r0 k
mouse.move(0, -3)5 ?8 a9 j) L9 v/ Y# h: V( H
if cyberpi.is_tiltright():" d Y4 c h) w% j1 }
mouse.move(0, 3)' o% o6 `4 E, b" u6 r! n! t
if cyberpi.controller.is_press("b"):, i3 S6 G! x9 {5 D0 _
mouse.press(Button.left)
; k6 u; L' U3 W mouse.release(Button.left)9 P& T7 r: r, c
mouse.press(Button.left), _. C) v8 t" C* q0 L+ [! @
mouse.release(Button.left)
: X$ M: L$ p) p4 m if cyberpi.controller.is_press("a"):( x7 E0 \. x; k& G5 E0 T
mouse.press(Button.right)/ X6 a2 G, U/ I9 u9 y2 U# L
mouse.release(Button.right)
* I8 K, P( x3 l" ~ time.sleep(0.01)
% U% T: j" r9 \) Z& {2 H+ w# A7 W# k" O6 j8 X% g/ X
0 @ |7 d4 X: k4 r( K/ F& |& ?0 J語音打字器
) [2 S! z% ]/ y9 X& N" w功能介紹:
* o. X8 ~/ R' Z, S9 x2 ]; A利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
8 y* H' \. D2 Q$ [9 T' z. N7 U將語音辨識的結果通過pynput在文檔中打出來。$ J6 f9 }% p. s
該程式目前只能支援英文。
3 ~' h k+ Q. ^! I4 [9 _+ v& d2 k2 v c6 k0 t
import cyberpi
) G* }3 [- |, {0 E z+ t, |from pynput.keyboard import Key,Controller
) L- u& q9 R4 B. {; ximport time
) F3 l* Y, g& x0 C- _+ {& X) T2 {6 ~ ! B! V$ o8 _+ \3 ~/ h
keyboard = Controller()3 Y) e$ v4 g d$ U& T% V
cyberpi.console.clear()* E1 L" M! f3 _
cyberpi.led.on(0, 0, 0)
- j! @ h- ?7 H9 O. Zcyberpi.set_recognition_url()
9 X) f) D# P( s. X- Ycyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得! c; T5 E/ v4 s- O
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼")
/ Q# h; O! e0 U* ^while not cyberpi.wifi.is_connect():0 T( n% l; |& C" ?' @& l
pass. C* J2 x( I) X: }# r
cyberpi.led.on(0,0,255)5 v% k" S6 f* R7 b1 d5 P4 o' ^2 n
cyberpi.console.println("WIFI已連接")
- F+ s7 C% d3 H& ?* Z' i& wcyberpi.console.println("--------------")
3 I/ r# V2 g; z0 t1 o! E6 H. Tcyberpi.console.println("按下A鍵開始語音辨識")9 T8 F, {8 Z) P7 F: l
while True:# Y2 i6 c$ o+ I6 c$ j2 |
if cyberpi.controller.is_press('a'):
5 O% g+ p! j) D2 ]: \) z2 c keyboard.press(Key.space)2 f2 T. j# Z c; t0 h
cyberpi.console.clear()
7 c! @# ?! F8 K. \ cyberpi.led.on(100, 0, 0)
' p% V/ D7 R. H/ t1 p' \ cyberpi.console.println("開始語音辨識")
/ z! \* G$ Z: u' [2 d0 c" t cyberpi.audio.play("switch")4 C/ U: O! n, o) }# N6 l
cyberpi.console.println("--------------")
- K! ]' u2 A7 W2 s cyberpi.cloud.listen("english", 2)
: N7 T! O7 J+ l8 [ cyberpi.led.on(0, 0, 0)3 M& N( K2 l' J% q
say = cyberpi.cloud.listen_result()% d8 c9 }. H: ^
cyberpi.console.println(say)
9 A3 ]1 }7 X4 o, V# Y7 Y- I" ~' j cyberpi.console.println("--------------")
* S) G$ \5 D5 g* N for i in say:7 W9 E6 I$ y$ f( e) @
if i == '':
! c" ?# G* E6 s e, A& ?% ~ keyboard.press(' ')
/ u+ b& \8 F" h& `4 Y else:
# |2 D7 @/ z3 d5 P5 c keyboard.press(str(i))4 b2 c4 |. W. C9 {! U9 q
time.sleep(0.03)5 U9 D# ^$ _' T7 d3 b# n
* T+ c* U: \4 k
matplotlib音量柱狀圖
, F6 |" v7 K* ?0 A$ Oimport cyberpi9 g' c8 ^) c7 d- _
import time2 v$ o. P2 L3 o0 X
from matplotlib import pyplot as plt# d+ I% b+ e- L2 H# \
# _7 q6 c L2 I2 n
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']
+ V3 m8 v8 I1 F g4 z Mplt.ion()
5 z9 z* g0 D% m- K: @ E; j % i: u! I& x( [( j( c
while True:; e, B9 ~3 l2 K- N8 M
loud = cyberpi.get_loudness()4 q7 R+ O2 v/ H* E
plt.clf()* B( V0 m8 Y6 k2 L1 [9 g" M
plt.xlabel("數據名稱")
- y7 A5 D r1 e3 }6 j plt.ylabel("音量讀值")
4 {% q! Q2 r; v0 \4 @ y_locator = plt.MultipleLocator(5)
: |# Y8 i- f8 c& T7 y: c ax=plt.gca()
; H0 E7 W8 o5 j+ t+ `1 T ax.yaxis.set_major_locator(y_locator)9 [' I: T9 _( A- Z
plt.ylim(0,100)
7 t2 v/ F- E* Y2 l: m: Q plt.bar('音量', loud, align='center',label=f'溫度{loud}')5 w3 N1 H! x9 @
plt.title('童芯派聲音感測器讀值'): y. k; ~" ]0 _3 N. l! b
plt.legend()
7 l3 {, b) v' i5 M0 _, d. ^: L% z( j plt.show()6 Y) B& D# ]6 r; f* C3 Z6 k& i
plt.pause(0.01)7 R( {/ Q4 }- A8 i4 U
: k, K ?$ x. A8 A% j
4 }' U) Q. Q4 k ~+ [) lmatplotlib 多圖表顯示' e7 u4 l8 U' Q5 l. E
: v0 z: O% a1 W6 Q, p y" j1 M6 l
from matplotlib import pyplot as plt
+ B* @0 A1 @! f p+ n+ N; u# p7 qimport time
: M0 @6 P) D! H, y M6 Y0 jimport cyberpi! N }+ w4 S4 q4 p! J1 c
" k# {0 j" s% b8 t; e* \% _
loud_list = []! x; _* e$ [& W9 q0 W& }6 j8 Z; r& J
bri_list = []; X. e/ m% `. x: V
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體
, `1 b1 P6 z3 a! Cplt.ion()
! d: c; e; \% a7 p, C/ h% h1 Uplt.figure(figsize=(10,10))
# H) [. F0 H9 D; Q- L, M H7 Tplt.figure(1)1 S3 X! d( `4 H2 ?, d& f
x_locator = plt.MultipleLocator(5)
3 }+ L, a0 T+ j' }% {y_locator = plt.MultipleLocator(5)
3 O0 V* Z) P0 }; @( b4 d! C. |while True:
1 \+ N' D n8 y1 U loud = cyberpi.get_loudness()* u2 Z/ V q" W s
bri = cyberpi.get_bri()
/ h0 j* v6 K, K0 L0 | loud_list.append(loud) _. |! t/ U+ y
bri_list.append(bri)6 ~# u& N! U/ _5 v% i) a5 k) t* B
battery = cyberpi.get_battery()
8 v$ {* Y5 G T& y size = [battery, 100-battery]! ~$ C. `' G4 s8 }6 T" d: Y q
status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']
! d9 P7 f4 ]" B2 _( n8 c7 f: Y ax1 = plt.subplot(221)
- i8 z) F# H& d }' M plt.title('光線折線圖'), }" N& Q5 a/ {* q' I$ X
ax1.plot(bri_list)) ^" a3 r$ R% m2 o( `( ~) j0 w
ax2 = plt.subplot(222)
+ |. T5 U; z' M0 i9 `9 d plt.title('聲音柱狀圖')
4 A/ H& s' I9 t; q: W: o ax2.xaxis.set_major_locator(x_locator)
% a; k5 u4 S) X/ y ax2.yaxis.set_major_locator(y_locator)! V8 ~1 {# M- t5 }5 N
plt.ylim(0,100)
9 x! Y1 G1 u3 n4 E+ D ax2.bar('sound', loud)
0 K7 p6 f& A, d. c, _% p6 Q# i- p ax3 = plt.subplot(223)
7 ^1 v! _1 `; v7 X1 z ax3.xaxis.set_major_locator(x_locator)/ K" r4 E, ]3 c. L
ax3.yaxis.set_major_locator(y_locator): {2 P; K# c5 {7 g8 ~8 z: e9 |; d( r
plt.xlim(0,100)
/ b* _* Q8 `* e plt.ylim(0,100)
1 D1 _7 ]4 J# v4 o plt.title('聲音、音量散點圖')
5 Y- a4 _! L, ?2 P& Y ax3.scatter(loud_list,bri_list)% G3 T+ X; B) k# O
ax4 = plt.subplot(224)
! C5 z4 ]4 A3 }7 v3 U- z ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
, {/ L _/ `) E- u/ @ plt.title('童芯派電量')9 W- X% S. N% B- h
plt.pause(0.2). `) x3 V! Z6 _/ W c6 K. b
plt.clf()
+ d* J+ C4 l8 u- l4 D: P" N if cyberpi.controller.is_press('a'):
) L- ?* r3 z& J; P/ q' f break
8 n; P/ r1 f9 H; g5 k4 y if len(bri_list) > 500:
7 X0 }- i$ e ~$ {, @ bri_list = []
{. ]' W3 ~/ p9 s$ _; k) F0 k loud_list = []
0 d: u- O6 @1 N( t0 h
: X% h& ` [3 ]+ A1 H* j, J* v' T. z |