本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi
5 X3 l |6 e9 O8 A1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
* O: H; s& \4 Z, U- }9 e% _
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載
/ l) N5 \# \+ ]: O- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。 t- d) t3 q3 S' v2 O
2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
$ m8 j4 F/ v) a+ T6 m& X; R! V
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
+ D8 p% T% H' R+ n) Y
& ~; u; Z, D, q4 ~5 r- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
& R5 T! P( Q# X3 C - y: Q1 K) {5 R/ d
- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。# |- M. X+ c$ X
B, Z3 ?8 x: x& [- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。
x2 [' U, O7 P! M6 x8 j5 _
- D* @0 E R- [. r3.童芯派第三方編輯器程式設計準備
' c+ H6 M' q% c- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。: L% |, U- k/ c
9 L) ~$ d- y) g1 X
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。
* S$ J1 L& z3 V& e) E% l5 B; Z- I) g# ]
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
1 j4 G6 J3 R( N- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。
3 P8 e Y/ W& S+ @
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 , A# M) B C: t! s) ~. W
& Z7 z2 z3 J. \ m% x# q# Z- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。% E$ c" o/ P7 b5 k$ B
/ s3 d7 n* j8 U8 }5 m4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 8 Y- N/ O3 E T3 c/ U
5.一些程式設計案例! b2 T4 J9 X! t) R6 y7 G
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput
" j8 ^6 l1 G3 X( d4 G. \0 i功能介紹:
/ p1 ], \7 W+ T2 X利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。
7 u }4 U; ]6 M% `9 q3 V通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。( ^$ ?; H R; p0 u
結合藍牙模組可以實現無線滑鼠的功能。
2 O) X' N& n6 G$ A2 X H) J. r# Y7 |- d% ?# L8 r( \
from pynput.mouse import Button,Controller
0 y$ Q: w7 B" V' Nimport cyberpi$ B6 t, Z/ r5 H% p" g! w0 ~: B/ W) A
import time
* t& s! d C- T* J; ^ g4 ?. I- | ' d5 w, j4 v% B/ e0 C2 t
mouse = Controller()$ A5 u x; H2 L1 k' e( ]8 R% a
$ d# s" ]; w9 U
while True:$ K' [. ~0 s# V5 } r* n& a
if cyberpi.is_tiltback():8 r( P7 K- a# z0 E3 `8 R4 [5 c8 V; M
mouse.move(-3, 0)5 P6 p; ~0 c; s
print(mouse.position)% x( D& _! o+ ^$ \
if cyberpi.is_tiltforward():
3 V( u3 U: ^+ p0 n \ mouse.move(3, 0)! V& h2 @+ o' {
if cyberpi.is_tiltleft():- ^& t4 g% R o: ~. ^/ x' i1 [ }
mouse.move(0, -3)
8 Q5 V( ]" J# V$ C0 \4 f/ ^. d if cyberpi.is_tiltright():- T5 ^6 r# S% b2 P& L9 C
mouse.move(0, 3)5 K' Q( G4 R" H& W l+ p
if cyberpi.controller.is_press("b"):
1 u& _% I6 T4 ]) ?4 ` mouse.press(Button.left)
( o& a- c% i6 ~7 o- O" a mouse.release(Button.left)& Z# E9 _' Q$ ]2 I5 ?/ F& b
mouse.press(Button.left)
0 `7 n/ m3 Y; k mouse.release(Button.left)4 t5 S D* W- p; u) l
if cyberpi.controller.is_press("a"):
/ Z5 c+ x8 |7 |7 T, W mouse.press(Button.right)
4 T7 i$ U: Q- f9 O0 A) g, p! z$ ` mouse.release(Button.right): j" E; T! e/ o
time.sleep(0.01)
; a; ?# F5 a$ V! h9 k7 i; ?" m' X+ ?
. q. |+ x+ k* @& F# g/ ~語音打字器 7 J. b' r/ @: r+ s: d: I
功能介紹:
; w) c2 m6 ~3 s利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
) n0 _; U, i+ ]* F4 Z* F6 V將語音辨識的結果通過pynput在文檔中打出來。
, C0 [ A. j: w該程式目前只能支援英文。
# C3 j. Q; w( F8 h6 t; a2 q
% q f& R1 @) D* M" m+ v$ J |" a; Vimport cyberpi
1 y9 u0 j# g" O7 efrom pynput.keyboard import Key,Controller$ E0 L* E3 M9 |# W" c6 t, S
import time
" E9 D7 e3 D: a% K: [
. e( @6 s) Y; G% Ykeyboard = Controller()' F1 y3 L4 v1 P# C! C- ?# C
cyberpi.console.clear()
. ?! f4 k+ W# jcyberpi.led.on(0, 0, 0)' W* V3 }# w1 m! c( h: C8 q
cyberpi.set_recognition_url()
) \! b7 ^0 u4 P8 Y3 scyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得) C6 P# f+ V: ]. `: e/ n
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼")' t7 x" K, S1 V( t) u" U8 E) P2 X
while not cyberpi.wifi.is_connect():" X4 M& D! S2 v
pass3 a( f' o f) q s: ?
cyberpi.led.on(0,0,255)
' ?- d$ {6 H/ ~2 L1 [- \% B6 vcyberpi.console.println("WIFI已連接")
9 y% x# Q- c4 x% D9 Jcyberpi.console.println("--------------")
$ i2 a; Q, A" f3 u3 l; y4 _cyberpi.console.println("按下A鍵開始語音辨識")! B3 l; F3 i+ |$ K- T5 c
while True:) C$ r5 B! R& `, R! {: O
if cyberpi.controller.is_press('a'):
8 O0 S) e% I% ]! V6 T/ C0 C keyboard.press(Key.space)0 V' \1 V/ y4 p( A" r4 u& ~
cyberpi.console.clear()
( T8 _, P; @9 U: y+ c5 J( `! Z cyberpi.led.on(100, 0, 0)
; f& g: K7 S. t5 G cyberpi.console.println("開始語音辨識")
* E6 n; N" F: @- X9 Q% h" u cyberpi.audio.play("switch")
5 {2 d. H) x) f `- E cyberpi.console.println("--------------"). @% z+ y1 b. s: M6 o& `/ G- U
cyberpi.cloud.listen("english", 2)
* F' x. ]" L) i; T- D0 u( z$ `0 Y cyberpi.led.on(0, 0, 0)2 A% _% }5 o3 k8 r" ]9 m( Y
say = cyberpi.cloud.listen_result()
$ v9 i7 ]# k! O cyberpi.console.println(say)) f: h: \. w* H
cyberpi.console.println("--------------")$ j! Y4 ?( b+ m& K
for i in say:( `5 S6 E& t- S! @: u( I
if i == '':; i8 E A- E& p/ x$ ?
keyboard.press(' ')! d0 N1 l9 P6 w) K& r7 o
else:/ |2 K. C0 c' Y+ Z) ?# k) F
keyboard.press(str(i))
8 P0 g- ?$ R ^+ b8 z0 C time.sleep(0.03)
0 Y+ d7 F% q, ^; s$ E' t0 f" h0 ~4 ^* j$ Z4 N5 B
matplotlib音量柱狀圖
9 E. V" _( [ W1 k1 _4 b5 \import cyberpi5 _" ^4 Y& Z6 x+ A2 A
import time
- C" O5 o" z) Hfrom matplotlib import pyplot as plt+ T7 R% e5 V" S& d
3 x, J1 w# l; R5 i- Qplt.rcParams['font.sans-serif'] =['Microsoft YaHei']
5 q) t' h& I; ?4 G/ |" H9 R% Fplt.ion()
5 r8 S, L& b5 Q' O- a
9 v j h* a, n5 ?, kwhile True:
" i( i0 k% L4 v5 J. p" w h& f loud = cyberpi.get_loudness(): u+ {$ h* f" p( _" N2 e3 c
plt.clf()
" }$ u3 ^) @3 _1 G0 f9 T plt.xlabel("數據名稱")
3 o) {6 l& k" s( v3 j plt.ylabel("音量讀值")
( A6 n- }) j* Q6 C0 b4 Y y_locator = plt.MultipleLocator(5)
0 E- B; k' M1 w% z' a" L; W ax=plt.gca()3 _! D3 w! g( |# X6 P
ax.yaxis.set_major_locator(y_locator)
4 N) ~2 q% P( o: w) b% n( c3 l plt.ylim(0,100)5 O" j' f0 B+ E7 ]- ~! {
plt.bar('音量', loud, align='center',label=f'溫度{loud}')
) [* x- {1 g) f& W3 k# @( { plt.title('童芯派聲音感測器讀值')
% I3 s" L2 G" u# y plt.legend()
G6 c. H4 n; S5 z plt.show()
4 X! |0 A! y8 l' v, w. j+ p, U/ f7 C plt.pause(0.01)
* o. k/ D/ ~4 [1 E; e, w
' k( Z F1 o/ E; x# Q- E" `8 i: C
. Q6 k& ~* G2 p" I6 @5 Bmatplotlib 多圖表顯示
: P% ?) G6 z$ R5 t
7 H$ N* L; H0 Z" Z2 Xfrom matplotlib import pyplot as plt
5 W& P) B. N9 ]import time
0 d0 _1 m: j: N7 U6 k- t. rimport cyberpi2 b$ ?8 l$ R+ M' h+ X: Y! x
, q3 v7 l6 A7 e3 f" Z3 z6 t
loud_list = []6 a% V7 b; D7 \, T" e$ Y1 k% O1 \
bri_list = []* S) l% E; t+ o: k
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體
) Q; C8 T! k# ?% cplt.ion()
2 V' g4 g$ o/ f7 r9 iplt.figure(figsize=(10,10))/ |" H2 b) ]" u5 O- Q) A. b: X
plt.figure(1)
3 L1 i! |9 x4 E( i$ K% |. x% nx_locator = plt.MultipleLocator(5)
- R( H3 V* S$ [. ^y_locator = plt.MultipleLocator(5)! T4 Z. O) L9 L5 ]8 ~
while True:
7 s( h" q! ?7 ^- C: F7 `7 m loud = cyberpi.get_loudness()2 j( w2 f) W$ Z! v3 ?
bri = cyberpi.get_bri()
' [$ d F% L# E4 c2 \' @ loud_list.append(loud)
1 L- r2 g, L% `4 p5 w: ?+ q$ y bri_list.append(bri)
& x& \+ t" e+ \3 c/ {* q battery = cyberpi.get_battery()
+ C" L! X& ^6 y) K G size = [battery, 100-battery]5 M$ Z% p5 m; e' B$ Q
status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%'] K# I% @$ P4 N: _. B: @; o+ s
ax1 = plt.subplot(221)
6 C0 N! S) f4 M8 G) v plt.title('光線折線圖')
2 ?$ t$ I# i) m ax1.plot(bri_list)
- N3 ?" A/ N% e0 c. F0 f ax2 = plt.subplot(222)
) V4 I9 D& Z+ h N; y' h& ] plt.title('聲音柱狀圖')2 @2 f3 H o( r
ax2.xaxis.set_major_locator(x_locator)
- C$ J8 ]* G9 M3 Q9 y) H ax2.yaxis.set_major_locator(y_locator)& F; a! m5 u: `# u" y. V( Y8 G
plt.ylim(0,100)# n. x) V+ W; f6 g9 s& l1 v. A
ax2.bar('sound', loud)7 M) X4 k! f+ ]) q$ u
ax3 = plt.subplot(223)4 U6 X$ ?6 H/ a& t
ax3.xaxis.set_major_locator(x_locator)
5 s. `8 Y! ?# c# n/ J$ x ax3.yaxis.set_major_locator(y_locator)* o) n; X& u( v
plt.xlim(0,100)6 f( O; f E! d8 W
plt.ylim(0,100)7 S+ o/ o! O9 X+ v
plt.title('聲音、音量散點圖')
9 u) N) S, V% ?5 n ax3.scatter(loud_list,bri_list)
0 ~, L5 Q3 h0 R# B ax4 = plt.subplot(224)0 O0 K; Y& d$ B. b& H
ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})& ?: H! b5 U2 B: A* J
plt.title('童芯派電量')
" s1 Q+ l. D% p/ p H% ^7 v plt.pause(0.2)8 c0 |. `; y4 D' |
plt.clf(), C+ f, Z4 D* b" K) Y, l3 o
if cyberpi.controller.is_press('a'):
$ T0 { @2 S* g* T break# d3 k1 P. F; N" y% ?6 G: x
if len(bri_list) > 500:
$ f7 }$ k. K9 r bri_list = []* o$ m$ i( \+ ]8 A! ]1 C& ]
loud_list = []
" O8 B6 m- {3 Z" Q) I
0 r; U! a: |, A5 j B6 g- k) P |