本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi 7 B% D' T& @: {0 m# z \6 ^2 \2 \
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
" r8 s5 k3 q8 K1 Q' E! G+ N- C$ Q
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載 $ L# L. q; r5 X, C; @. L
- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
! q. {, E2 D( U: O1 h3 z( Q 2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)! T/ k+ B1 q0 Y
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。* k d5 B. j: {8 ~' R' k
0 g ~; H1 Z, H6 _4 @9 Y+ F- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
/ L# v/ a. j: ?& {9 B# ]
( ]9 G3 ~- i( }- j9 | H- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。) F5 G. B( m) M' }4 K
, f8 Q5 U2 A- \+ x- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。4 h2 r4 j- C* ]
6 d( l( k0 a+ N5 i
3.童芯派第三方編輯器程式設計準備6 ~* `9 h4 s6 m
- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。9 `0 r! i% g+ q& g# o k4 X$ I
; J( `( w+ R5 K- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。1 P- e6 I# v- j& n6 B" O4 ?8 H! V) b5 C
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。 2 G f0 Q3 c3 q. q$ R
- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。
, ~2 S2 r) R" T% i; k
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 ) ~. o5 O2 `" P' X' B) r3 z
; N% N3 U& [- b$ M* V
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。
+ `" f6 K1 Q; W$ e7 I, ?/ V8 \ / n# m3 d: N; Y4 d5 H5 E
4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。
! T, e t$ T) _% @3 n5.一些程式設計案例% E. X* x J3 x& R. m
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput 7 n* N- f" D6 \& _! O# t& o3 J6 |
功能介紹:+ Y1 [% b" c. m0 p! \0 \
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。# [8 K6 }2 c1 ^/ c! E+ t' N
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。
( W' c% P; O. ^4 _" m3 E" B4 M5 ?# }結合藍牙模組可以實現無線滑鼠的功能。1 Y3 I* ]$ \. T9 m% _2 B9 D$ \
( p9 s# Y2 J ^0 v. R( e7 b5 a% |
from pynput.mouse import Button,Controller
0 ]7 l" B) r" \* t3 Jimport cyberpi
; f: \5 I# E0 Z: m; }+ yimport time
- u$ A; @+ a l5 v" G) f
3 Z+ ]: g( w0 d; Cmouse = Controller()$ ?$ D. b" M5 d( a
- c& C) @& e% n6 @$ Q) k1 F
while True:
% A6 @4 P8 X' q( [4 W+ ~0 ~ if cyberpi.is_tiltback():
% w* S, R6 U- [' |, y mouse.move(-3, 0)" K2 m) @4 H3 B" J# o
print(mouse.position)
0 m- y+ G% |. Z5 d x if cyberpi.is_tiltforward():+ V( z: j. o% i
mouse.move(3, 0)' @3 Z! z9 h1 N( w
if cyberpi.is_tiltleft():
+ P6 V* b1 y% S mouse.move(0, -3)
- s6 w; V, w6 q5 V if cyberpi.is_tiltright():" C9 O9 m) J3 s+ y% }- b
mouse.move(0, 3): G/ Z) a' o0 D
if cyberpi.controller.is_press("b"):
) p& m$ {# ^7 P mouse.press(Button.left)
( T8 b u0 C6 T0 ] mouse.release(Button.left)
x8 j7 ^0 _. m3 u) K mouse.press(Button.left)
, p7 S3 l. P6 u1 g" [& h mouse.release(Button.left)7 z! d+ M. A0 _; a; G
if cyberpi.controller.is_press("a"):) ]1 b: N% o8 P) L. W7 U3 I
mouse.press(Button.right)+ n: t1 J% U0 q% n3 O$ p
mouse.release(Button.right)
3 h- L5 Z. j! `5 |$ ]8 e7 C time.sleep(0.01)/ ~9 y, X F0 W2 \* w% g4 X; Q
* K! N b7 {; K5 e' j
. p! I0 p: z# B) ^, v; \4 }8 }
語音打字器 # A' H) g. m4 r# G7 b( c
功能介紹:
2 V7 E$ R9 `: F* _) G) S利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
% D% q. T6 u/ ~) Z, O" X+ G將語音辨識的結果通過pynput在文檔中打出來。
# U5 D$ o$ @( D" \1 j該程式目前只能支援英文。
. g4 E% n: q( y1 p, C6 b3 L) F2 e7 c h- U+ k6 B0 C* t
import cyberpi" z: `/ n3 j1 y' r, s$ l7 b
from pynput.keyboard import Key,Controller G) i% t; z2 |# U3 t, H
import time
; `5 I+ k6 X' _$ ?, e, V: y + I( |) `# s6 f/ C3 C/ P
keyboard = Controller()$ ]$ P: v5 ?* d6 ~3 g
cyberpi.console.clear()& s7 t9 L( j5 d0 {. B
cyberpi.led.on(0, 0, 0)4 f5 ?- E6 A! r8 |1 c5 L1 e2 W
cyberpi.set_recognition_url()/ X& a& `. A0 k3 m5 n7 b$ _2 [7 `
cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得
: U8 y D4 |2 H# ?9 Ecyberpi.wifi.connect("WIFI名稱", "WIFI密碼")
( w, ~2 g" f" j% Y* cwhile not cyberpi.wifi.is_connect():
, ?: ]& n2 t" k" P6 ?% ~4 G. r pass
0 _- |5 z6 m) v# Mcyberpi.led.on(0,0,255)
; f5 ^. o/ A4 c' w. ycyberpi.console.println("WIFI已連接")
, ~% d- Y& [& n8 B/ ?% I6 Qcyberpi.console.println("--------------")' c4 h5 B$ N$ j
cyberpi.console.println("按下A鍵開始語音辨識")
4 v e& [9 M6 L/ Vwhile True:7 ~/ U/ Q0 o7 l, i
if cyberpi.controller.is_press('a'):
; b' W) v0 H) W U/ t keyboard.press(Key.space)
0 M1 J ]) G! B1 b4 G! S; C5 q cyberpi.console.clear()4 D$ F9 a" s0 G( N9 K
cyberpi.led.on(100, 0, 0)
* `# |& ^" ^; W s2 C0 L5 P/ I1 h# x cyberpi.console.println("開始語音辨識")
: d! r, Z ]& \. B6 M cyberpi.audio.play("switch")( a ~- @; j2 V/ g% d J, W
cyberpi.console.println("--------------")
1 Z4 @" b# n, ? cyberpi.cloud.listen("english", 2)% ?/ {( b. {% M0 D: {
cyberpi.led.on(0, 0, 0)
; r: k+ h0 w5 q+ ?: \' H. p2 ~ say = cyberpi.cloud.listen_result()& {$ x n5 g% H" ]% ]
cyberpi.console.println(say)* y3 h; n7 {1 Q! t, R
cyberpi.console.println("--------------")
$ N& o; y0 m* X) r4 P; A for i in say:& a5 c( V3 ]5 r* a. \& V
if i == '':! j! @, F. E h
keyboard.press(' ')
! o9 G5 R* ~0 ~* D else:$ N& D S9 f9 w9 a8 X
keyboard.press(str(i)). J$ B& ]8 k# S/ x( n: y
time.sleep(0.03)
5 c. m# l: R- y8 K' a6 W' f
! I' r9 n+ `9 b3 v. |9 hmatplotlib音量柱狀圖 . g2 d" D. O( F6 Z+ j1 E0 x* o. i$ U
import cyberpi
4 X# M. w" [7 b6 [7 Uimport time
! a& K$ b: H1 P3 ~* h4 K9 R( \from matplotlib import pyplot as plt
4 h Y; e3 G- A4 ]4 \2 L. V % J* q' b7 S$ b/ x& M M9 S) K7 R
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']! x* w5 }6 v6 [
plt.ion()- f. p( H6 g. K& j4 H' q9 p% A# g
: S3 g6 E( x& n1 E& Swhile True:
) p3 |/ g8 C. ^0 v* g loud = cyberpi.get_loudness()
' B- m% x; q( A1 J- p/ G4 @/ D plt.clf()6 G6 L3 V H. ]+ [; i! \
plt.xlabel("數據名稱")
% F1 b6 J2 e5 Z plt.ylabel("音量讀值")
' r, G: X, D- \/ n; I' F1 v' | y_locator = plt.MultipleLocator(5) F+ l$ T W2 J @& c1 z6 Y
ax=plt.gca()
2 t, t# B" O6 h: @ ax.yaxis.set_major_locator(y_locator)
( Q, ~3 P* B9 W+ t$ p* y plt.ylim(0,100): t$ a3 p, Y; B8 G
plt.bar('音量', loud, align='center',label=f'溫度{loud}')( k" M" c1 ?- a; T0 O
plt.title('童芯派聲音感測器讀值')
5 D' M6 l2 b) D z plt.legend()
) L' {" b i6 S( n# {) ?6 | \ plt.show()
9 d" G7 o1 Q. [' I- X X( v plt.pause(0.01)# t9 P1 N1 i, t; s, A! |4 y
* k- S8 a% w" Y2 q8 i: J' e' I0 n' ?3 n
5 t l* @9 _: B% z
matplotlib 多圖表顯示
0 [/ J) w% s/ ^. Q# g" v6 h, H7 z. a! N
from matplotlib import pyplot as plt
* D- O: N! d. x( J3 }import time
% e8 L) s; b( `; o+ u4 d; Timport cyberpi
: K7 I* @4 O& M* \4 c) L4 Y- S- t 9 h H( {' U J
loud_list = []. _; q, H8 D$ h/ \
bri_list = []3 S! u9 [8 A6 b) m; y- [& G9 ]# o
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體' o0 E2 Q! a' T
plt.ion()5 ^2 l/ h9 n8 l$ |; d/ |
plt.figure(figsize=(10,10))/ `" h4 g0 F% L) f6 C6 @/ |
plt.figure(1)
5 p3 D0 J* B$ A) y: |; w8 @x_locator = plt.MultipleLocator(5)
. H- @& b! L c9 e3 s, Qy_locator = plt.MultipleLocator(5)6 L. Y' S4 Y: a0 |% r% z
while True:
! d4 f. Q; g- G loud = cyberpi.get_loudness()! ~/ @2 z' W* S; B& h: s
bri = cyberpi.get_bri()
, E% K+ Z' T- E' _( T7 ^ loud_list.append(loud)
C6 S* k- G' [1 i, t2 [5 B2 r/ ~5 }" T5 l bri_list.append(bri)
8 [0 s D ?& ]4 ~0 ` battery = cyberpi.get_battery()
# ?6 ]' O+ A6 W, b/ z size = [battery, 100-battery]) f8 p: `% r6 s* S
status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%'], ^! i: H# _; q$ @
ax1 = plt.subplot(221)
" N m, r+ B9 s! f3 j: j3 C plt.title('光線折線圖')$ O# I) a9 G5 m4 I" |9 Z8 Y5 ^
ax1.plot(bri_list)
" h* ?9 W: C" a; W2 F# d ax2 = plt.subplot(222)7 d( r* O, n* s4 P
plt.title('聲音柱狀圖')
b1 {3 f6 N `; |+ ~/ ] ax2.xaxis.set_major_locator(x_locator)" r1 ~- g" E3 r* }' |5 Q
ax2.yaxis.set_major_locator(y_locator)6 @6 |! A4 A, ]+ T- c
plt.ylim(0,100)
& l- g1 O( V5 J ax2.bar('sound', loud)
8 E' t! N" h; m: K `3 y ax3 = plt.subplot(223)% Y& ]" X- F. x+ y) `# D
ax3.xaxis.set_major_locator(x_locator)* M3 X5 L; b- G9 u* w( k; H' Z
ax3.yaxis.set_major_locator(y_locator)
0 _7 ^: n, y& V plt.xlim(0,100)( n$ |! Q8 {6 k; Z9 Q7 ~9 m
plt.ylim(0,100)' y- [( o0 \+ W R
plt.title('聲音、音量散點圖')
j/ j; x3 q' `2 [8 v ax3.scatter(loud_list,bri_list)! G/ h2 B: N2 \
ax4 = plt.subplot(224)! V9 L I( }% w; ~
ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
5 P; G8 b/ o0 A! d3 s plt.title('童芯派電量')5 ~2 c" ?+ }1 {3 K, P- i
plt.pause(0.2)$ G" Z5 B' @$ J+ P/ N* J7 q; C) R, I
plt.clf()
3 C$ `& ]% _7 H( i' [ if cyberpi.controller.is_press('a'):
) G0 t( Q5 v/ U4 @% D) o$ l ] break4 i( ]' s" n# ^& h7 O! Q
if len(bri_list) > 500:0 z# t. C# x' B/ t: [, o& i3 D8 p
bri_list = []
" \( A3 e ~# _+ i: V loud_list = []
) o3 s& P2 H" u, g+ O! b
9 K6 K- Q: Y+ o4 r, N# p |