本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi 5 g F; X; h% ^$ r
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。9 c4 l- q" Y) D4 b8 I
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載 , l; x0 f; Y) X' n8 f8 H
- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。# v2 r }4 b; K9 X4 s7 @
2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
+ B( ^/ M: w7 f+ v
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
* y0 i6 u- d6 w4 p/ \9 @ 7 I' }$ ?, Q" B$ [( ^% H5 B
- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
4 S6 k" E( T T2 d! ]) m
3 x: I) C8 A- E% _" M/ V7 \9 y7 X: y- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
! e/ g+ @8 C# ]6 E4 z% i( A
, C# D, @$ S$ x- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。
! L( |; X/ T" E M1 S! V" v1 N " W4 D7 @# _% F, x2 e, }5 G1 r' s
3.童芯派第三方編輯器程式設計準備
: M1 h# s5 V3 X, X0 D9 G) h- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。! r5 k1 k8 F! b6 k: O$ \8 w
: Y' K$ e! u' u7 n; F& X- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。! @) e: ^. Z" T/ T# M
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
% k5 o+ |- a% V* p* z) T. [: l/ m- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。
* [) a, s( X; c6 a1 V
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。
& V; y4 j; w6 x6 g" h6 h+ c. Y/ K& S" u4 y& v3 G8 V% I
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。
: X' @3 r. p" F
" z( p5 G: i/ V$ t4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 ' e* H# c) M' B
5.一些程式設計案例5 {+ Y; y# M* d7 L" [. X4 Y
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput : D) [$ a8 q/ S3 h+ x
功能介紹:
, c. V& j: R- b) i利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。
/ A6 L+ m0 Q; m2 j& g通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。2 H' s3 Y9 H! f4 ]- a' |& Y
結合藍牙模組可以實現無線滑鼠的功能。
6 J9 T: |8 f% Z7 U. N2 B9 e# m; \$ U" l5 _
from pynput.mouse import Button,Controller& M/ R$ s* T, a0 \
import cyberpi. n. ^) i- K) M" }3 ^1 X8 o5 S
import time& [% ~6 r& I% V4 t( R& f
- m+ {0 w) X" I4 Z3 W
mouse = Controller()
9 G* D U5 _7 f$ c+ v" j8 y4 o$ x. q1 l
, O/ E" P) I1 R+ e& Gwhile True:/ ?2 d9 r; t4 v) X1 u2 g$ \
if cyberpi.is_tiltback():
1 F% C' S1 c: S; g* j! b. t mouse.move(-3, 0)
/ d. ~: W5 m4 S- | print(mouse.position)
% E3 }4 N9 r6 W if cyberpi.is_tiltforward():- I1 I7 g1 L) [( Z" H" U
mouse.move(3, 0)' n, P5 s# G0 ]( S6 ?* K9 q
if cyberpi.is_tiltleft():
0 u. P/ L6 j9 b% x1 G. S mouse.move(0, -3)) C) l% j3 |6 K" f3 f
if cyberpi.is_tiltright():8 L' l8 \, i; F+ a
mouse.move(0, 3)/ r% }! E+ ]$ t' {' A" s
if cyberpi.controller.is_press("b"):
_; x5 K. E( l0 N mouse.press(Button.left)0 z" B! X/ w3 z8 [, U3 @6 \" K
mouse.release(Button.left)
4 b5 @, Y7 Y+ {2 d v mouse.press(Button.left)
: _6 n' G4 _. i3 v. r mouse.release(Button.left)2 t, W1 b0 E# J: D* _
if cyberpi.controller.is_press("a"):
" |! Q$ r1 X9 p" o" w mouse.press(Button.right)
$ t! T; e( ]0 K3 S, _7 f9 O mouse.release(Button.right)
1 h% W6 {9 f% }; m& S1 w time.sleep(0.01)2 R, G ~7 ^8 x
/ t8 j, J" z( s, u8 J: c, O
. @! f. n4 [- `# J0 W8 _! S% K. c語音打字器 D, m5 Y* g/ w& f" x/ M5 p
功能介紹:6 Q. B1 O$ t9 _9 [0 `; G
利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
9 Q" c/ |, x9 G將語音辨識的結果通過pynput在文檔中打出來。
. n' e( \6 q. I: i/ j該程式目前只能支援英文。
" e- p" j3 j& |5 X8 O) E, W% M
: c8 }# M6 p7 P( u- jimport cyberpi
# t" q% b. I" E" |' t9 Dfrom pynput.keyboard import Key,Controller0 T9 M; l& z. i
import time$ n4 t8 p G4 O0 u7 q# }
( M B) }+ \( p- s/ a0 Y" H. Mkeyboard = Controller()" e- a- x8 @0 u5 s) U7 T c
cyberpi.console.clear()
8 c, z1 ~ w3 H, Jcyberpi.led.on(0, 0, 0)) N- } R+ I2 W1 E/ r
cyberpi.set_recognition_url()
N; ? u3 @ N, q1 Acyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得
. X# D5 N( T! Rcyberpi.wifi.connect("WIFI名稱", "WIFI密碼")' t9 M: s0 Z B$ Y) a
while not cyberpi.wifi.is_connect():
: X0 E& ], X& x+ e pass+ V8 B& S) q$ D0 s, ?- k' F/ r
cyberpi.led.on(0,0,255)! I3 e* x! l6 B$ S! c% u& p' E
cyberpi.console.println("WIFI已連接")
; |+ R6 \6 I) qcyberpi.console.println("--------------")
, a% V* x8 @, {. x x+ }: @8 e, F9 Xcyberpi.console.println("按下A鍵開始語音辨識")' F' N5 x8 n9 H2 Q. Q. M2 t& E
while True:
4 I2 V1 p& B X( P if cyberpi.controller.is_press('a'):
* I6 R6 @& p+ |9 R) I keyboard.press(Key.space)* r I$ t) X% M% k
cyberpi.console.clear()$ @ Q! u, R N: K7 }
cyberpi.led.on(100, 0, 0)
0 Y8 k6 s1 M: ?8 h0 d cyberpi.console.println("開始語音辨識")8 k9 N {7 z" C4 [4 n$ [/ a
cyberpi.audio.play("switch")# G) o1 G- K+ l' X4 Z
cyberpi.console.println("--------------")* \; P# `- J9 l$ W
cyberpi.cloud.listen("english", 2)
( x! D* e& T9 M4 f: Q; ^ cyberpi.led.on(0, 0, 0)
V+ U# ?; E5 ]) U' ?, }/ w say = cyberpi.cloud.listen_result()( J; _3 O1 L5 j4 K/ A2 q
cyberpi.console.println(say)3 W+ h) \4 N: Z& g
cyberpi.console.println("--------------")
, \* D" l4 `& S; c7 J5 Q, j' u for i in say:& g( h9 I% \% t* g
if i == '':
, q$ N, z6 A1 f/ q' E keyboard.press(' ')
t6 {% }0 {1 } else:: m0 X4 o( R- ~: B, H# C
keyboard.press(str(i))
* ~; _& I- ^' M: o3 Z! R- D time.sleep(0.03)
7 u3 ?: m- }7 F; v! a
/ _: T. \1 k+ h, H" b: S! u& nmatplotlib音量柱狀圖 $ X; T( X; ~/ p3 g
import cyberpi I( Z- `& |$ Q7 h' d
import time
8 D# G5 d& e: z1 Y# bfrom matplotlib import pyplot as plt
6 G* `; v& V% u7 [; x + q& h; r* t! e2 s" k6 L- j" B( Y
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']# L2 T# G5 v5 |7 l
plt.ion()
! a$ u t$ o2 i. n) |7 Y% s 4 v/ q5 _2 I. }5 D5 e! N6 v$ }
while True:; o& {2 |6 j' \) u9 \2 a A$ A# | w, ^
loud = cyberpi.get_loudness()% k" u% C0 O# |8 x& }
plt.clf() u7 V" e6 o( B, Q- W( [
plt.xlabel("數據名稱")
4 _* w* `9 L9 m' i. p plt.ylabel("音量讀值")! k9 g- |9 V7 s( ^9 Y) f+ _' a
y_locator = plt.MultipleLocator(5)5 ^* | M5 ]1 i( \& ~
ax=plt.gca()$ v- S' u5 l8 T4 W- L$ m' S' A8 k
ax.yaxis.set_major_locator(y_locator)" h4 O6 V, }+ `0 @5 L
plt.ylim(0,100)1 P- J! S3 [1 d
plt.bar('音量', loud, align='center',label=f'溫度{loud}')5 ]) l: p' k1 y, m% Y; y
plt.title('童芯派聲音感測器讀值')' ]1 g" Y: \: K# t- }: ~% W
plt.legend()! U* W/ k% w) i$ b# g k; X
plt.show()8 m! W, c! Q" n3 ^0 g( H! z$ m9 B3 \
plt.pause(0.01)
3 C& `7 C2 E, y
+ A+ W8 e, \6 [" ~4 I- y; |2 H* F0 w8 c" K
matplotlib 多圖表顯示5 \9 {/ _5 z0 z
3 |8 H, r( A; B0 \/ z. k' S v* Ifrom matplotlib import pyplot as plt# k/ ]- K4 ^, Z0 s' K3 }. N
import time0 J' X/ P9 D. r: T
import cyberpi
( R" h3 D7 c" w6 H4 L; u 4 {/ q* J% r- x6 P1 r; z/ Q4 ]
loud_list = []% a* g, n# v3 G
bri_list = []
& r: ^6 X2 H8 x' J8 ?+ x3 Uplt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體& x/ d; `9 `% E$ [
plt.ion()$ G( d) L2 R I" @% |
plt.figure(figsize=(10,10))
) x. b8 J' i: Rplt.figure(1)
( A6 ~+ L9 i9 nx_locator = plt.MultipleLocator(5)
* V5 ]8 P* ~' e% L zy_locator = plt.MultipleLocator(5)
& G/ N! g+ g% P0 H, E3 Lwhile True:
1 a- M7 T2 R; w" W: |) K- f* N4 k loud = cyberpi.get_loudness()
* V. y! ]- F7 \) Y% Q2 E4 T bri = cyberpi.get_bri()
' p5 i% h! o4 a loud_list.append(loud)
) Z7 O0 ?# N) i6 U a( }- K( d7 S bri_list.append(bri)
( a4 I" T, l( _; R) S+ r8 @7 v battery = cyberpi.get_battery()
! G# S- X* c$ n size = [battery, 100-battery]6 X' b; h4 y" }+ L9 X
status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']
0 L7 P7 C) k6 ?7 ^9 B7 e& O ax1 = plt.subplot(221)
4 Y# V4 q2 \: K' v: \8 L# \ plt.title('光線折線圖')
' L% Y2 h- C* {6 ?% _, l ax1.plot(bri_list)4 n5 D4 O7 g4 E
ax2 = plt.subplot(222)
: [* P8 H& w B6 R plt.title('聲音柱狀圖')* o; h t7 {% c( S' }' i1 M
ax2.xaxis.set_major_locator(x_locator)$ i9 E! Y3 w8 h" s) P" d* H
ax2.yaxis.set_major_locator(y_locator)& t$ k2 j3 t) K' g6 P2 B# \; R& X
plt.ylim(0,100)
' J; ^' g1 F- \ ax2.bar('sound', loud)! h7 m6 b8 B/ {
ax3 = plt.subplot(223)
) P9 K$ i T! `) r& u ax3.xaxis.set_major_locator(x_locator)
) G. T4 r9 n. P5 _, } ax3.yaxis.set_major_locator(y_locator)6 G9 q- C9 F# ]* u
plt.xlim(0,100)" p6 u+ n, I5 a7 ]/ ~1 ^
plt.ylim(0,100)
6 ?# @* n- K! {6 l plt.title('聲音、音量散點圖')6 U% a, m8 h, x% M$ \
ax3.scatter(loud_list,bri_list)
2 K8 m% R+ Z9 B" o& s5 \ ax4 = plt.subplot(224). D1 W4 d8 v1 O% |1 @
ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
$ v6 ^) Q( W, e6 D8 T8 X; V7 n plt.title('童芯派電量')
+ L# W9 @' I* _! G5 O plt.pause(0.2)$ o$ N5 F; s: D9 I7 m
plt.clf()
7 M/ j# O: n f& d if cyberpi.controller.is_press('a'):
* V, C0 U, y* {7 k- M' u t6 Y0 u/ f break
# W+ P: t6 p( `1 D$ Q% S1 U1 w if len(bri_list) > 500:
; G/ v( l D9 ~2 J$ H bri_list = []4 _. B3 d% e( C# x& ^
loud_list = []
! P6 c! Z3 \* L% U' p' u' S0 e' `9 d
0 j+ X/ i3 P+ m1 g7 d* B: W4 ~ |