本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi / Y# [2 F/ ]; n; T; O8 _' A
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。) h. u8 s- ^5 @+ d5 |3 f: v: O, m2 U
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載 $ v# \. J. Z8 z8 G) h
- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。2 @6 i# K5 p, m2 T& f
2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
. N! b( |% L' N6 [
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
( T+ i# l5 D1 L1 P
( O z8 l* ?. X: a/ H- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)3 G5 w5 J; T" i8 `9 E5 p
) K2 v: H; S# R' K- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
6 I6 g4 M& e! w9 Y
- P. D) L/ C8 K6 ^- ]! ]1 C% i* L6 |" Q- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。
8 l+ `$ |( a* Q4 @3 ~% E * _) `( m& t$ ]0 O4 {3 g0 ?
3.童芯派第三方編輯器程式設計準備
2 D/ [2 ~& L; o) ?# W- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。% j+ q% |0 s9 z. t2 I- g- U& q
: ~3 ^2 J. @* o
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。4 g F3 [9 n. L& `: }/ i' Y
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
/ Z' W' S3 f" q/ l. d) e- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。
7 X; _) S& L8 n( N
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 3 e, x7 W7 M; Y! L
1 j. t- l$ J: y
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。
3 b/ b7 u% ?0 H* b* u% v
4 L% m" O. Q1 f4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。
1 G- @4 M y: I" M5.一些程式設計案例
( L( E" |* b& @( w童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput 6 a2 x' {/ O+ G1 x
功能介紹:
1 _0 h4 z/ r4 k3 x8 E& a. _利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。" c# z4 W- U& Q2 ?* C
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。
* H# e2 z$ |& T9 ~- W結合藍牙模組可以實現無線滑鼠的功能。
( [ ]9 E w% Y) P
$ l( f# \, i8 F' vfrom pynput.mouse import Button,Controller+ D0 x7 V8 ?8 {& w" ~# Z
import cyberpi+ k! T+ ?" v& z W0 l
import time0 K' @: E [6 U% N) K
+ i( t# T* r# O& |5 S4 P
mouse = Controller()( u% @# A. c2 Q+ ?. @9 A8 S$ [ ^
3 K0 b$ F7 I2 w2 }. W( F+ w) c
while True:
- a: m9 N7 E- k& ?% K3 h if cyberpi.is_tiltback():
3 R. G5 L' B2 d' _& L x mouse.move(-3, 0)' F! A+ b' \4 q4 W Q9 f
print(mouse.position)
9 A' j2 W9 s$ {$ O$ V$ I/ S$ Q if cyberpi.is_tiltforward():& ~9 [3 ^( {8 h6 l3 k5 R
mouse.move(3, 0)
1 }! m" j% ^* L. d% D; m0 W4 E; n if cyberpi.is_tiltleft():* Q! c+ Z. b- R; N& ]
mouse.move(0, -3)
7 ]$ q- g( A" Z& j) ]7 d if cyberpi.is_tiltright():: C% D/ `( c/ M% J7 h
mouse.move(0, 3)
; S3 p/ Q' i0 b; f( [) g3 m if cyberpi.controller.is_press("b"): Z. F* f" E" Z1 {# _& s
mouse.press(Button.left)( O h _4 v3 O7 f+ H, R
mouse.release(Button.left)
' [2 M! u! y9 ? F: G1 n mouse.press(Button.left)
) m( H9 a [8 e! ]! T" ` mouse.release(Button.left)6 X1 A. P) D, t
if cyberpi.controller.is_press("a"):
7 B6 ^& d6 @ P1 R$ G# g mouse.press(Button.right); a2 p- O. R- B2 B) G
mouse.release(Button.right)' K" }( H( j9 e& v1 f! m
time.sleep(0.01)
: k; M1 l" @) _4 a+ w" x9 j8 R. l- y& b5 r. V
/ c9 W; k4 c( x0 }/ N. l6 d8 d
語音打字器 , R; z; u$ U7 }* V
功能介紹:
8 r+ ]$ o+ K2 h5 Q9 m利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
* b. S' h) {/ t/ K$ D# |將語音辨識的結果通過pynput在文檔中打出來。
$ M) ?7 l+ \& O6 n& e/ o# P該程式目前只能支援英文。' T! {3 a5 V- ~& ?9 y" }
8 |# \$ F1 @8 D0 j4 O7 z9 ~9 mimport cyberpi
2 b6 S$ @8 H) H% [6 Vfrom pynput.keyboard import Key,Controller
) ^7 ]. G! V; z5 vimport time- h! G3 b& j# Y4 L3 U% `
/ Y' p7 `* o+ f# q9 _" \keyboard = Controller()+ L! |$ |6 ^+ B9 a5 b) s- ]
cyberpi.console.clear()
7 R8 `+ D! j/ F. s. _cyberpi.led.on(0, 0, 0)) I. @/ l j9 I( v# D# A
cyberpi.set_recognition_url()
- X/ z" C! n Q( Acyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得& |" V+ \0 R% q# y: L
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼")
( R0 @( \# j( A2 E0 J) Vwhile not cyberpi.wifi.is_connect():9 }8 N9 h i! U4 {
pass9 T6 ~" s. r- x/ Y! U4 Y0 H
cyberpi.led.on(0,0,255)
# s. N5 b1 ]0 ~, Y8 y8 j* Hcyberpi.console.println("WIFI已連接")
- B, G0 R6 o) Q4 n' _cyberpi.console.println("--------------")
0 C- ]! T/ a+ F3 Jcyberpi.console.println("按下A鍵開始語音辨識")/ c/ l1 J0 m/ }$ c6 ^3 J
while True:
' t I% r' D0 j8 q3 e; s1 k if cyberpi.controller.is_press('a'):6 h& Z! R7 }0 z G
keyboard.press(Key.space)
& G$ h! o9 z: k, e3 n/ D- U+ p cyberpi.console.clear()
, V( c# e$ }8 y* S. Z/ y( { cyberpi.led.on(100, 0, 0)
* P# f: J* Q; W; M& | cyberpi.console.println("開始語音辨識")- {& ]) j3 \: b* [
cyberpi.audio.play("switch")
8 @& ]" [0 X5 a+ b cyberpi.console.println("--------------") O- |2 ]1 P7 G( \% l0 Y
cyberpi.cloud.listen("english", 2). k7 `0 C! q+ z$ E# d. }5 `# W
cyberpi.led.on(0, 0, 0)
2 x" t9 `: v. a say = cyberpi.cloud.listen_result()
( Q+ S. H1 }& Y" b; x9 Q cyberpi.console.println(say) f4 [& Q |8 e1 S0 Y# H2 i) @# q
cyberpi.console.println("--------------")
5 a7 M8 R# C' U }% f/ U for i in say:5 I6 h- R: W- U$ m
if i == '':( m: F& q' Y: J5 y& T! {* j
keyboard.press(' ')
9 w9 A, a4 {# l5 K else:
( Z2 d( r# v: v4 [; T$ ~. O# _ keyboard.press(str(i))8 S" v0 E5 `/ ]0 B% i
time.sleep(0.03)% S7 O/ Q2 @7 U" \, P
# ]0 d2 H" {" Q, u0 ]- g1 W
matplotlib音量柱狀圖
7 Z* j& c& W( d7 yimport cyberpi( s ?* z% e* B' T" k; V" N( n# w
import time
y. q( G* u$ Q+ J' v6 T, Efrom matplotlib import pyplot as plt2 X3 ~' w4 C( \1 }2 f" m4 W
# Q, |; Z5 d) Q& K- u' n/ p0 uplt.rcParams['font.sans-serif'] =['Microsoft YaHei']; O z" y6 F* d5 I
plt.ion()
" P. P; d; s9 h" i9 O
5 R8 f$ H$ }) R. J2 uwhile True:2 y. _) b* S/ U9 `
loud = cyberpi.get_loudness()
7 S( H( E9 _ R. J plt.clf()
9 a0 B0 e8 T/ @- U% p" v8 a) c5 ` plt.xlabel("數據名稱")+ X$ @, V2 \- W: M, |* K
plt.ylabel("音量讀值")
5 U* ?. R; j* r( N y_locator = plt.MultipleLocator(5)
- z0 I3 O$ c, i1 J0 D/ m ax=plt.gca()
7 m+ y( d' P/ H ax.yaxis.set_major_locator(y_locator)
2 P7 D( M4 V# `- F plt.ylim(0,100)
6 R& G" z& O8 M- u plt.bar('音量', loud, align='center',label=f'溫度{loud}')
* N9 W: g. N5 \* c# O plt.title('童芯派聲音感測器讀值')
% L+ E; u/ S' S7 [ plt.legend()7 U4 I" F! H3 W- w
plt.show()
( T' ^/ Y) g l% K plt.pause(0.01). }+ A8 W% V: h; b" \4 a, c/ I8 Q
0 l1 ^* |" P2 u; c1 [4 k
& |; j$ T8 y4 E5 J& Amatplotlib 多圖表顯示
* U6 v4 s9 c3 K3 H4 z% G F6 y6 S, \, ]* L* t3 @+ E+ [/ w
from matplotlib import pyplot as plt1 n! R+ K% q, [/ _: C
import time
3 }% R' ^! O8 ?- R3 X8 I0 A2 t$ Iimport cyberpi/ b$ y0 m- z0 v7 z( a1 q ?5 n! V% M7 f
$ e5 x3 {/ D0 B- q2 V9 H6 N; ^- jloud_list = []
6 ~/ \" ]) O! } X, L" b7 Y/ p: B6 cbri_list = []/ `0 ?, X4 }1 z
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體- t: y E( C) z5 k+ |( Q0 b
plt.ion()
% o" N: s, w! f9 Eplt.figure(figsize=(10,10))
: X3 h$ O% [- K7 C8 K6 F hplt.figure(1)
( [+ u6 S7 e6 q" n# h' G; h, N& e6 bx_locator = plt.MultipleLocator(5)4 W! F& q, Q2 Z/ n. _# N" b& C3 D
y_locator = plt.MultipleLocator(5)$ ~7 w1 I, O; ?; e4 d
while True:5 @% Y- @. g! V
loud = cyberpi.get_loudness()) p, R/ ]8 h) G8 i* C8 x7 I
bri = cyberpi.get_bri()
6 ^# S9 x9 v& p1 q loud_list.append(loud)
; }6 A$ P' P1 v7 x bri_list.append(bri)( Q/ ` r6 x4 }
battery = cyberpi.get_battery()* P7 b( P) ~- }8 x# p8 z9 i
size = [battery, 100-battery]
, w6 e: d$ |1 e! E) Z status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']7 |. J& t3 _" j3 Z2 r. f
ax1 = plt.subplot(221)
; ^, U0 m% H9 K. l: ?% E" k. O plt.title('光線折線圖')
% n$ D: ^/ A5 u P# {# T- c, @" P ax1.plot(bri_list)/ Z, G( e0 v- l5 g4 k6 Z+ W3 M" F
ax2 = plt.subplot(222)9 r u u g) e, r) _6 c
plt.title('聲音柱狀圖')8 _8 ?3 o) Y. m- V! k, n
ax2.xaxis.set_major_locator(x_locator)
" d" h7 t) E( Q: P3 H ax2.yaxis.set_major_locator(y_locator)
4 ?5 U0 Q% y! Z* V9 B plt.ylim(0,100)& \# W3 P6 L, x, i |' ?4 J3 C
ax2.bar('sound', loud)0 N# i% I/ w# F8 f; b/ C
ax3 = plt.subplot(223)+ H2 S+ H: `% l9 w
ax3.xaxis.set_major_locator(x_locator)* B" y6 T* ~$ c) V
ax3.yaxis.set_major_locator(y_locator)1 v6 h# @7 o8 @% t7 k
plt.xlim(0,100)5 n# |1 B. c. f7 N4 A7 |# r
plt.ylim(0,100)( W9 _: R$ Z2 ?6 U4 j z) S
plt.title('聲音、音量散點圖')
5 ~3 u2 _& s, j/ V ax3.scatter(loud_list,bri_list)( E+ ]$ V8 K4 C
ax4 = plt.subplot(224)/ G* T( c! d' F1 X* c" _; J
ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
/ u" w9 ]5 g3 m7 J plt.title('童芯派電量')( @/ w4 S0 B- W0 o& U
plt.pause(0.2)
4 g- Z9 L( W E( m plt.clf()' l* v" K3 f( c/ B
if cyberpi.controller.is_press('a'):1 F. q3 n9 N0 B
break
3 ^ m; `/ p, D! T/ U6 t if len(bri_list) > 500:
. q. B! n% ]3 a bri_list = []
7 E( g( X5 J7 B( w; z; L. { loud_list = []
2 Z4 G9 x1 }7 I2 @! T# ?
* W0 V0 j" R1 ] |