本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi
+ R; p+ D( u7 A" M1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。4 S( M# D) ]! s* {7 }1 H
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載 $ u/ _( u) M0 v7 h B- S' [
- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。3 r0 s* |' ]2 a n* z6 l
2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)- a. z% t7 g$ s6 \# d/ g
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。7 ?8 I ?% v: e Q: l$ P7 [) E
! q) C) Q( i& A& e4 {- B6 h- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)+ v) r+ V8 }/ X
6 B: d- q+ ` S1 p
- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。/ X* m- N) {5 p; T: e9 T
6 x& s9 `/ Q) ]6 n9 Y) b
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。7 h K' g8 G/ B; N
7 D/ I& ~$ o" F6 W& X( U6 _1 c; E3.童芯派第三方編輯器程式設計準備
- y. ]; Q$ D2 t6 s$ }- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。. U* v+ S( d# B! D
! y0 T5 v2 t6 G) ?
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。
) |8 o }9 _; U6 |( B
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
: G; ] H6 O& s: J8 e. i- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。 w& @6 n8 H/ H' l' J* j
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。
) ~5 g3 g7 z- J8 }6 J% W' K7 x4 U) L5 q2 \9 u. a; }
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。
5 |, q. d# _+ |# H3 B. D
* ^4 i+ h5 s5 G4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 ! C8 m: x. e' ]8 z0 H0 O" c
5.一些程式設計案例
" h9 V5 n. Y" L% N+ }童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput ' d; @' _- K% C) Z3 A4 n8 n
功能介紹:
+ D4 f% \( c$ r6 K8 q利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。
2 ~2 o, d Y! j& x, ^3 l通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。
+ k' J9 J* O" F+ D; w. _: a4 ?結合藍牙模組可以實現無線滑鼠的功能。
9 N2 P4 A( E; ]( W8 _% B& [5 r, {" T) n) S% b. O" Q9 q- J
from pynput.mouse import Button,Controller
& B$ ?1 z1 [% h' p: h2 E2 Bimport cyberpi
; h9 u0 n' k c" @$ a* s/ iimport time
- X7 `/ F) h a- h " d3 i: p1 r f* B3 [, h3 e
mouse = Controller()
3 J( o8 J& ?( I( |( Q6 g
$ d" ^% V! Y/ H+ n4 Ewhile True:. f0 i- \4 b' U9 n) b5 S& G
if cyberpi.is_tiltback():4 q! j2 c @3 u7 |
mouse.move(-3, 0), f/ t% ]) X- B+ J
print(mouse.position)
' v( S8 R# B5 ^ if cyberpi.is_tiltforward():0 Y- g0 D2 x0 r- l7 i
mouse.move(3, 0)
, T% v; U" v* w8 Z! B; I4 M if cyberpi.is_tiltleft():
) j( `3 |5 B; k ]# ^4 n: A. I& | mouse.move(0, -3)# g4 h+ Y5 G0 {5 s
if cyberpi.is_tiltright():; y/ h/ F k f' k9 h: N+ P! w, m
mouse.move(0, 3)
" j/ J' B5 Q6 [, {, N$ k# Y3 R if cyberpi.controller.is_press("b"):; M! K$ W( Q) X& e4 z
mouse.press(Button.left)
. ]( a) W" ^: \, ~+ q mouse.release(Button.left)
1 @5 S% u D. m8 e6 p6 z mouse.press(Button.left)/ D6 [( Q; Z+ B" f L
mouse.release(Button.left) B1 Y1 D7 A- z2 R9 X& m; z
if cyberpi.controller.is_press("a"):
8 Q9 g" q; U! {$ s mouse.press(Button.right)" ?. s3 g2 [, |
mouse.release(Button.right)* h2 w6 e% W; J0 a5 I5 Q. ]& }+ ?2 d
time.sleep(0.01)
" ^4 J- F2 o( q: W y% \, U# j6 h' v0 C0 T+ x: o8 o: w/ y
! |' `6 T G; D# i6 d語音打字器 ) z5 I* |1 V/ s* c
功能介紹:
' |5 [/ T6 n0 {9 B( k% R$ k1 p9 J利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。- x: D% T8 D# X
將語音辨識的結果通過pynput在文檔中打出來。
2 m/ d+ k8 G8 R3 w3 d. B該程式目前只能支援英文。
5 v8 J6 | ^" c8 ~6 A4 _. f# V" y. ?. \4 ^' w( Q
import cyberpi
* d1 C1 U, ~# L: w! ?* Tfrom pynput.keyboard import Key,Controller) f& _& R) G F) l2 M8 c
import time* k% f( Y: { _0 A8 X8 U
) a) {. s. S! z0 [
keyboard = Controller()8 r) L! n$ o: [% M. X, I7 O* u
cyberpi.console.clear()
3 v% E4 |" h2 V2 O$ _: R% |1 b, {) v2 V% xcyberpi.led.on(0, 0, 0)
- l; f' q; {5 g1 d& R" V" ncyberpi.set_recognition_url(); k& M( s* G% r' I8 v
cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得0 J3 H, [7 v$ h+ J
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼") N+ f I9 e( }) t8 {0 I
while not cyberpi.wifi.is_connect():0 q4 r+ t! y* U+ d$ I% x
pass# y; H, ?) \- M: ~0 m% |; \
cyberpi.led.on(0,0,255)% g6 [# h8 Y2 g7 I& u
cyberpi.console.println("WIFI已連接")+ C" W* [6 `) w5 `/ n2 M
cyberpi.console.println("--------------"); h. m1 R2 z1 e/ h/ ]& N
cyberpi.console.println("按下A鍵開始語音辨識")
' M3 Z. @+ V$ B% T. Qwhile True:
! g; M; Y4 R5 c+ D, ]0 b4 B9 i if cyberpi.controller.is_press('a'):
2 g: o3 d$ @) {# E1 B* w( L keyboard.press(Key.space)
6 s5 p5 ~- a' O& f cyberpi.console.clear()
$ J2 p# p' `! ~/ I7 }+ x, l+ { cyberpi.led.on(100, 0, 0)
& A z* p+ p; r cyberpi.console.println("開始語音辨識")5 ^ Y6 o* X K* t; A* J
cyberpi.audio.play("switch")4 P% L8 ] _: t; v0 c S- R: i
cyberpi.console.println("--------------")
0 e$ f+ J7 H8 T9 X cyberpi.cloud.listen("english", 2)
% p% _4 Y/ o( f: {7 M cyberpi.led.on(0, 0, 0)6 R+ H9 r9 \& e! v
say = cyberpi.cloud.listen_result()
' g2 K% r6 e' o cyberpi.console.println(say)
& |1 K4 j8 l2 G8 b T8 l/ j cyberpi.console.println("--------------")6 ~ g/ _' m0 @/ @; Q5 G
for i in say:
. l1 p7 J4 ]" E& @" ]! a if i == '':) K0 P% Y" x* z' p% q% W# n' x
keyboard.press(' ')
4 p" J D# W) O5 S else:
: W+ ?) Y+ {0 ~5 B6 x3 T* M2 { keyboard.press(str(i))9 ~! ^3 m. }( d% h, N t- o6 i
time.sleep(0.03)! g" z' V* B, c7 t
$ b$ \3 p5 i1 ]$ p9 h1 V8 g7 Q
matplotlib音量柱狀圖
5 G% L, o+ o( a. P+ V* i( \import cyberpi
3 w3 c! I; [/ J* O5 Y! oimport time
" p. F& f' c; U( {" Lfrom matplotlib import pyplot as plt# f0 C7 L- H9 ^- N# |+ ?
4 n, ~; \# l+ b1 c4 W4 ~
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']
, U% a+ t( j( E0 {$ nplt.ion()% U; y% C, Y; G, \; x
2 d$ B5 Y0 l* V, n2 P
while True:3 t. K4 j, M3 L+ Z+ L5 |& k
loud = cyberpi.get_loudness()9 ]4 Y, A9 C9 C* b5 r) H
plt.clf()
& a% Z' C9 r+ H- r1 ~3 p' F+ ~ e plt.xlabel("數據名稱")1 A! t) C; M( A5 Y n
plt.ylabel("音量讀值")' V* i% C: |+ B2 @3 U+ F
y_locator = plt.MultipleLocator(5)2 I2 V: E" d/ ?( ?/ {! `9 A
ax=plt.gca()) f, A+ S6 \: D( s; W
ax.yaxis.set_major_locator(y_locator)9 V: C6 ~' v5 ?# A$ `
plt.ylim(0,100)8 T$ S7 P, x9 v/ P3 |
plt.bar('音量', loud, align='center',label=f'溫度{loud}')
3 y* }2 _0 j6 q+ G+ Q plt.title('童芯派聲音感測器讀值')* d! Y' O4 @6 K \ R
plt.legend()
! Q5 F. D$ T+ ^, }$ x* R' M: M# L plt.show()* i6 o/ m* S+ x$ j h
plt.pause(0.01)
& ~9 w7 A( d2 _; B; p0 U Q+ G4 B. r/ A
- k$ \+ Q$ P. \' x1 O! g
matplotlib 多圖表顯示8 L P% P( B# e+ |) A5 m h
' S8 X, _& l6 N$ B6 s: R" `: ffrom matplotlib import pyplot as plt
7 `7 @$ V2 t% _+ n* G/ x1 ]4 {import time: S: {! Y$ x$ n
import cyberpi
6 s' ^" { O/ A6 @- p
9 i2 a4 P9 d6 D; p- cloud_list = []1 o& Z' `2 `. _" a, v! M, t j, L) m
bri_list = []
% r+ Y. r/ x }+ Splt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體/ M' J# p$ e2 }7 U' y" |$ ~- M
plt.ion()
S, H- ~* ~; ^( K3 s- i6 eplt.figure(figsize=(10,10))
1 G1 U; W/ `+ N. {( t* W A8 Iplt.figure(1)
: b& S/ v* w6 c8 Q1 G8 Lx_locator = plt.MultipleLocator(5): l) ]7 B' @# ~
y_locator = plt.MultipleLocator(5)
( k) s! W. Y& i I; a6 X: R3 F: gwhile True:( ~3 W0 X6 J! i+ m. V: w! Z% F
loud = cyberpi.get_loudness()
1 R3 T' x7 c! c p9 C5 h bri = cyberpi.get_bri()0 v% w( P6 i$ Z% X; p- s3 ~6 i
loud_list.append(loud)
" R2 Q, a, X7 ^, o2 W bri_list.append(bri)
, r( y; J( I2 m. ?1 L* f* _ battery = cyberpi.get_battery()8 D% _8 X& ~: p0 K6 {! {4 w
size = [battery, 100-battery]- b$ R% ^8 P" K% k: c6 M9 d+ l& }
status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']
+ c0 M% D" r5 P4 n/ W/ c ax1 = plt.subplot(221)
- U8 S8 k( @2 N& @. s plt.title('光線折線圖')6 a$ t5 _6 p: c% h$ }
ax1.plot(bri_list)
$ k6 U3 R% n' k7 i ax2 = plt.subplot(222)6 e& v# h) V: Y; |6 c% Z' f
plt.title('聲音柱狀圖')
1 E, q1 d6 G/ k ax2.xaxis.set_major_locator(x_locator)! {6 Z w" q8 g2 S8 b- h: L
ax2.yaxis.set_major_locator(y_locator)
, I2 v+ Z/ G8 c" A+ s$ h7 @' Y plt.ylim(0,100)+ K; e; H1 R, E" P1 F
ax2.bar('sound', loud)
& g F/ w( @3 _5 X1 O- j ax3 = plt.subplot(223)
& G9 P1 f4 v, M8 ~6 m* S ax3.xaxis.set_major_locator(x_locator)
* B0 @0 O. \; `- D ax3.yaxis.set_major_locator(y_locator)
+ S8 x; `0 u' C% p6 \2 [9 Z plt.xlim(0,100)
* Q' \ g; @% y6 k- |, ~ plt.ylim(0,100)
5 R% e1 c" q9 r" w% }" \* A3 a plt.title('聲音、音量散點圖')
" N( f7 w! ]9 j: q ax3.scatter(loud_list,bri_list)) s& o5 q' I5 [) U7 h5 p' Q
ax4 = plt.subplot(224)
* t; k; x! w+ } ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
3 M0 Y, X2 k0 P- _9 f( A( u plt.title('童芯派電量')
+ A2 Q. ?: r" p3 ~5 m' m plt.pause(0.2)% D' a$ h6 |3 f! r: m8 ?& F
plt.clf()5 S4 z W7 u3 `1 C. C& d
if cyberpi.controller.is_press('a'):
' E/ m1 Y; n L; d) T$ S/ G break
- h8 P" e, [1 P: `# Q8 u) {5 [ if len(bri_list) > 500:
; N' `5 ^! R: X1 j# \ bri_list = []: E% V0 |7 _/ W
loud_list = []
u- l" q5 i* v- u$ o# ` X
! B- d# m2 j y6 f |