本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi 3 ?" m- A: a. ~2 Z% Z+ E
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
7 h8 L2 G: O% n- w1 ?
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載
: ~6 X2 f& a! x# i' u& E6 A- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。2 w- r6 o: u/ v) k
2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
( _: d d# F# r. p. w
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
/ z2 ^0 A7 s; r 5 H& [: }# P7 |' d; Z6 n
- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟), h) Y' n9 P2 K
7 f9 L& P5 \9 r: \- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。/ E1 c) B7 F" s% u S
: R4 y: V4 d* E/ @. ]- w: E9 H8 q
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。& X4 r% B F, E) p3 `
( j9 V/ H- C- u5 g" h- Y
3.童芯派第三方編輯器程式設計準備
; g9 ]5 j9 j) Z' o0 I- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。
( z5 T! m- ~, E( [ 7 h) ^1 h" U8 b
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。
! v+ s' K' K1 i9 M. u
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
! o, R; N' F) h" m' t" G- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。6 p3 k; V L# V) C% Z
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 0 F! w( t4 f; a6 k2 r i! |6 _. \: [
V. f4 [8 T: H6 M- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。; q+ T% g4 w& r. W3 O4 @ u
+ E. w) G+ W8 x7 M
4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。
# F# e S+ u* M( Y& j$ \0 t2 g5.一些程式設計案例
" P* U. r# ?5 r6 k5 X+ @2 h3 D! }& u* v童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput ( e) c, z. d- }( b! ?* y
功能介紹:6 M0 O F" z! r$ y
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。
9 u. ^; ^& t! `3 ]8 {通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。
0 }* a7 ?2 m' |3 l8 x) o' v結合藍牙模組可以實現無線滑鼠的功能。
4 _ ^- U" R! a) ]1 Q6 @1 j6 O8 b+ t2 V: P! A! u+ i# ?
from pynput.mouse import Button,Controller; _5 F3 d/ t: |$ z1 g. s
import cyberpi
% X0 `: K. J' nimport time* \3 D5 F% k v& m# a! y
8 m3 y" z- Z0 F5 n+ V3 jmouse = Controller()5 d! V+ ^, |& [) u
8 M- p5 d S0 g( O' L0 J
while True:
* q4 L. @+ K, @8 q if cyberpi.is_tiltback():1 ~+ u, f& O; ?: u9 g( \
mouse.move(-3, 0)
( ~* F& {- x% h* K/ |! x0 ~ print(mouse.position)
2 m1 e& i* y+ V$ L6 G7 c if cyberpi.is_tiltforward():+ D( ^0 u) x" V/ I8 |
mouse.move(3, 0)5 E5 m# G4 ^& W0 F: v, y# C: Q( m
if cyberpi.is_tiltleft():7 d2 b# Q9 l0 v9 u: R. s0 H
mouse.move(0, -3)
( e. Q+ ] x4 X1 u if cyberpi.is_tiltright():' M; E* X6 Q) C8 _9 Y( x
mouse.move(0, 3)3 x- ~! g# r- n" l s
if cyberpi.controller.is_press("b"):( f1 I: K3 l# {, `
mouse.press(Button.left)
" y, w7 o& I( U mouse.release(Button.left)
+ [& n1 P) C/ h/ W mouse.press(Button.left)6 r4 ]2 t! c$ w4 F
mouse.release(Button.left)2 w1 \' l9 B7 p# x8 k* {; u- ?9 W
if cyberpi.controller.is_press("a"):3 [1 E& i; z% n
mouse.press(Button.right)
( L8 o7 r& F) E0 h mouse.release(Button.right)- l, G- X8 e/ l J% e: ~8 J7 M/ I
time.sleep(0.01)' `8 ^: G3 s8 n7 R1 ?, t; @# P
! o2 m( ~9 q8 Q# y! f4 q8 \
: b; |1 ?& ?* o4 Y" l8 m C9 t語音打字器 . p ?+ ^: }+ P
功能介紹:$ j- i# f! D9 P+ F& R; N0 Y
利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
2 ]6 S4 T: ]& K9 P s, B將語音辨識的結果通過pynput在文檔中打出來。
$ L! \1 W( ~9 I該程式目前只能支援英文。
5 r- t1 ?7 j2 i! `" t9 }+ X' |% b2 {) T( p
import cyberpi
! q: S8 ^. Y( ^% ffrom pynput.keyboard import Key,Controller7 y0 P! y- e4 E c& }
import time' [, J o' E, A! n- Y7 h/ p* \
3 E S2 _0 h3 j2 l: K
keyboard = Controller()
7 `; Q* Y) U3 G% p6 \, i; H; [4 gcyberpi.console.clear()$ R+ i# {! v- P$ G. \
cyberpi.led.on(0, 0, 0)
5 ]# |/ U" U1 C4 x5 z0 pcyberpi.set_recognition_url()
; ^8 U4 y% D6 ^cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得
( y0 ^# I8 H% b( K4 R) _! Ycyberpi.wifi.connect("WIFI名稱", "WIFI密碼")0 ~: P( {/ a, n+ Z
while not cyberpi.wifi.is_connect():8 a' W: C$ m% r, `
pass! p+ p+ O* R' Q/ O! g2 }) X
cyberpi.led.on(0,0,255)# g$ _) l" f) s3 {6 P) B; ~
cyberpi.console.println("WIFI已連接")
2 [4 J8 B" r/ F% f Qcyberpi.console.println("--------------")% t% F- r$ ?/ c8 _6 S1 n) r) @2 t
cyberpi.console.println("按下A鍵開始語音辨識")
/ p% u0 P1 B0 |/ Z8 Y1 U, cwhile True:
; C% }- |1 q0 U3 e0 u2 \0 J if cyberpi.controller.is_press('a'):& a( Q- N8 H; a; I1 [3 p
keyboard.press(Key.space)
2 n7 Z) U* z7 B. F& m- W* S5 S cyberpi.console.clear()- u9 O2 E/ l( c
cyberpi.led.on(100, 0, 0)0 W. F/ N) H8 M# ^; N) a
cyberpi.console.println("開始語音辨識")
* E$ F3 J2 W4 @ I) G$ s, \, z cyberpi.audio.play("switch")
( _2 K+ H+ B- H% D cyberpi.console.println("--------------")
/ D4 L' j, I, v9 h3 G" j cyberpi.cloud.listen("english", 2)* K, q$ Y1 a. V1 j7 y+ G
cyberpi.led.on(0, 0, 0)' [1 x# \) B% q6 z3 m, |- c
say = cyberpi.cloud.listen_result()
; C* M- j; w$ K cyberpi.console.println(say)2 ^. U$ j2 w8 q& S, D1 o+ j
cyberpi.console.println("--------------"). O$ ^8 N8 {2 S+ V$ [- |
for i in say:4 L# |( s# Y( {+ Y
if i == '':2 W8 b5 V. @9 D& I
keyboard.press(' '); n( A7 q. B6 a$ B$ [$ ^
else:
9 y5 n, R6 D6 u* t8 o8 b" T keyboard.press(str(i))9 J* ]/ z# d3 {! L( x! A+ r
time.sleep(0.03)
# B" S1 c; d3 C6 p6 ~! ^/ ^/ r! w2 e5 O9 H7 B2 v: `2 I
matplotlib音量柱狀圖 5 G, f1 c. j0 k& r% {
import cyberpi
- i# X, v' z& B9 m; U2 X0 _# N1 ^ @import time2 j( n( B% E" a5 V1 m4 J: H2 g
from matplotlib import pyplot as plt
- _ w( B7 G4 ?7 K+ |
$ r- u {- v) u( \! j- ^plt.rcParams['font.sans-serif'] =['Microsoft YaHei']# j* z/ m |/ Q' t7 b
plt.ion()
& g- O% ~( v0 @( k7 n
8 i: } I& ?9 T) Cwhile True:! b: V- i) b: K
loud = cyberpi.get_loudness()
+ D0 n* |: f$ o% M6 [8 L K! a. [; I plt.clf()$ c! L3 U0 @2 [ I/ z! H0 k& y
plt.xlabel("數據名稱"), }5 u- U8 g. U2 D% f
plt.ylabel("音量讀值")8 a3 [% G! r$ b- E s. [
y_locator = plt.MultipleLocator(5)5 ~& k$ @ B8 s o y: f
ax=plt.gca()/ a# V! }1 Z; p5 E2 F. J. r
ax.yaxis.set_major_locator(y_locator)
5 A1 c7 _# o7 q! z2 e1 a plt.ylim(0,100)$ h2 y3 z! l5 ]" P j
plt.bar('音量', loud, align='center',label=f'溫度{loud}')
3 n" I9 X' s; i plt.title('童芯派聲音感測器讀值'), ^) @4 q/ e1 U& q
plt.legend()
) [& G" ]( z* t6 R plt.show()
; S8 A$ |# n4 U6 d& D2 H. x( u9 \, f: P% X plt.pause(0.01)4 F! x6 F' L5 G+ U& c O+ N
/ H8 P9 [1 _6 P: R7 G6 A: r9 P7 W/ s0 | C+ N' f
matplotlib 多圖表顯示3 C8 P+ ?9 M! a% L9 Y8 w
; b7 s/ [6 s* v) j+ H1 A- ?
from matplotlib import pyplot as plt
2 d( y& m$ y" ?3 M" b! l3 F& yimport time/ m- \3 e3 I7 M* W5 T9 a+ M
import cyberpi3 |% j# h: `( t, X
3 m# U, S3 c' ?; x, ?loud_list = []
# J1 T2 s9 O+ v: w* Q# n; m& Sbri_list = []8 y M4 K+ `4 K- F$ p
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體0 F' J% ?/ o; }) v
plt.ion()
8 Z) Y4 K, ? Vplt.figure(figsize=(10,10))% e2 S& B$ j1 s
plt.figure(1)8 c7 C8 |# f8 [ m) R9 i
x_locator = plt.MultipleLocator(5)
: i( j: b+ D9 |y_locator = plt.MultipleLocator(5)
" O: f8 h/ q/ A- c, E5 n: nwhile True:8 P4 P0 Q# X J; p% ^8 c
loud = cyberpi.get_loudness()
2 z& ]* s: z3 s6 L5 h6 d bri = cyberpi.get_bri() \0 _3 Q# z4 E4 S
loud_list.append(loud)
R3 `+ u- {( Z( Q& D bri_list.append(bri)
5 R# X5 c2 k5 P+ k" ~# [' D battery = cyberpi.get_battery()
0 c* L+ J, R& P8 J" }1 ~3 P- F size = [battery, 100-battery]
+ n( \2 C8 e$ V9 Y* H J/ \. g status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']
" C9 X* H- X* m4 z: l1 p8 v* ^ ax1 = plt.subplot(221)
8 v" f" I, [* I+ \/ L: d* u1 ? plt.title('光線折線圖')2 h5 {8 V+ S1 A+ h" N
ax1.plot(bri_list)
! q" O! E; w' @' H( h- M ax2 = plt.subplot(222)8 }& L! ~2 S3 ~+ D' |
plt.title('聲音柱狀圖')
$ D+ g! t X; i( d) G ax2.xaxis.set_major_locator(x_locator)5 C. E! |& {& G4 j% V2 Y/ A
ax2.yaxis.set_major_locator(y_locator)& O6 D: J/ E' g' i
plt.ylim(0,100)
" F$ i, ^ b9 ~: ]) G ax2.bar('sound', loud)
: c; ]+ c5 B! e6 u2 E y ax3 = plt.subplot(223)% t. f% j' J4 g" d* j s5 i
ax3.xaxis.set_major_locator(x_locator)! h2 y3 u3 l: }. j* W$ \/ ?
ax3.yaxis.set_major_locator(y_locator): S8 H2 V1 p1 o7 ~% c
plt.xlim(0,100)
+ C! F. J3 v" z4 B" u4 e3 ^5 t4 h plt.ylim(0,100)
/ d) L. M, j7 e% R @ plt.title('聲音、音量散點圖')) t( s q) Z6 J9 |8 M
ax3.scatter(loud_list,bri_list)( k9 R. J v# M: S% |% Q) }3 x
ax4 = plt.subplot(224)
1 V$ @2 s* i% E* E ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
9 q8 C0 B8 ?8 g5 b plt.title('童芯派電量')
' L' L/ _. @6 z5 V( `) r- ~& P plt.pause(0.2)
4 c8 f& K; r0 \5 r plt.clf()
. z( [6 i! {. G1 Y5 t% J if cyberpi.controller.is_press('a'):' a) o, Q/ A% R
break
* Q1 r/ `1 j* D0 ? if len(bri_list) > 500:
( b& j! \% j& k5 N1 B: b% a% ` bri_list = []
) ~ Y! h; m! |! C3 x loud_list = []
; y4 `: V, H, e, \
9 V6 \. L; p0 n |