本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi
0 g; h! p/ o1 M5 \1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。 `3 n& r5 d/ ]) c- J& O G
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載
' ~8 M ~9 q. [% V- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。7 @9 a. Z7 U. |6 G; m/ y. w
2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
, Z# |# O3 {: m0 q5 U
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。+ m4 p$ ~) ]' G; z9 y- `/ r& F
9 Y; I6 Z7 C/ b& j+ e9 O8 ]
- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)" G9 D8 P8 J, q/ o; n* [# h4 w; \
& ?/ J3 ^5 Z- T& b- C# \' o
- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。! _4 o4 V' [! C4 A6 R0 c7 x
* V: C! o" D+ s3 J1 g2 b0 Q
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。
' E: ~0 ^( [6 @7 ^ & O& \" f' i7 E* L
3.童芯派第三方編輯器程式設計準備( K3 d5 Y; Y) C
- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。, N! T( s; ?) T! K
& u$ A3 ]$ |" @% e- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。3 J& m: G0 A+ D* ?: M6 p
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。 : q2 I& f3 k; m _3 U) \2 ^
- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。
6 l9 r! |& `3 V& m: Q
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 / N7 ]8 w3 R# e* A$ J# o
1 h$ H G: V) f* }. A1 v. n
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。
3 Q- ]4 o# l# |* C 6 }4 K$ w" H% d9 j7 |
4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 - ?' z9 F( N2 n8 b
5.一些程式設計案例6 g3 y9 K x! i9 n! y9 B! n! ?
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput
! e `% T J" b1 Z- \8 {) b功能介紹:" _0 E+ Z! v9 T" ~& e# I7 O* A
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。" a& n) R# S& F S1 c8 h% B* q. n
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。* ^3 P6 `$ k% ^1 Q) t
結合藍牙模組可以實現無線滑鼠的功能。
6 {. |4 f" d* x! O- ^+ X5 F' f6 N% _" ?9 \% _( R' x' q
from pynput.mouse import Button,Controller
* P6 u1 }+ S8 y4 dimport cyberpi0 Y, W4 l% H2 L: ?! [. @
import time
* G, U0 G: a! T8 b$ b! \" O9 |1 Q# ] % Q) R( k) S. @
mouse = Controller()
. y0 ^9 a n2 {6 O: N
) t# o- ^7 u3 v& gwhile True:
; e n9 ^: V4 u# X, l6 s h* l if cyberpi.is_tiltback():
) p8 p+ y6 P4 W- \ mouse.move(-3, 0)
* W6 ~8 i2 J' r/ Z, d( ? print(mouse.position)
) t# r* y/ B; Z! `$ K4 s if cyberpi.is_tiltforward():' y8 R* [0 z }. Q1 `4 u3 Z- {
mouse.move(3, 0)7 d0 x* C" t: O1 T. s
if cyberpi.is_tiltleft():
- @& s. q1 F7 j; s F mouse.move(0, -3)6 W$ V6 f/ p$ _
if cyberpi.is_tiltright():2 Z. T' B) B1 e# w! u
mouse.move(0, 3)" I1 `' O4 N4 e' J- [
if cyberpi.controller.is_press("b"):
8 }! O7 S9 E A) [! b mouse.press(Button.left)% K' L' T9 n; F/ |* F+ E( B/ U$ n# {
mouse.release(Button.left)
& N, P; f7 G# Q0 A. ~2 z mouse.press(Button.left)" K6 c! w% }8 _; Z
mouse.release(Button.left)4 W# H8 V* d- X7 \
if cyberpi.controller.is_press("a"):
# N- u% s" L; a) o8 e0 ~4 k- ]7 F) y mouse.press(Button.right)
+ {; G& j8 \- B mouse.release(Button.right)
7 e( b; s6 ~5 u& `- K time.sleep(0.01). w: ~: E$ K" E: o) S: u; ^
: w2 f9 x& h+ Q# k. G4 A8 ^2 h/ K( h' [7 M, T
語音打字器
, {8 a4 U" p$ _1 C功能介紹:
! X. e' x# v6 u9 Q4 U3 c利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
, n+ x9 w/ B- m5 e" {: |將語音辨識的結果通過pynput在文檔中打出來。
% T- A* @: {' N5 p該程式目前只能支援英文。
. ]" x) m. L; e( |3 g9 g. E z0 q" S7 ^( C5 _1 @/ `
import cyberpi# H7 @' }, _ ]6 \; i
from pynput.keyboard import Key,Controller
! x3 r9 I( q5 P5 Q7 G! {import time
# l# C5 ^4 W* v5 D ' H- m* U/ @/ e' W+ F4 u' Y% X
keyboard = Controller()
+ U& ` [3 y& ucyberpi.console.clear()
: ^) C9 N8 D2 K' r+ dcyberpi.led.on(0, 0, 0)
: p- I- l2 x4 D3 ~. X% y: m$ [cyberpi.set_recognition_url()
) W/ `' K+ D9 K% Y! }( y2 v! ncyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得
' e- o1 T* B* E' ccyberpi.wifi.connect("WIFI名稱", "WIFI密碼")
* u$ _7 T0 `, o+ G5 iwhile not cyberpi.wifi.is_connect():. ^0 T5 S. x/ d1 @# m
pass& Q3 }% d% T7 I$ I
cyberpi.led.on(0,0,255)
7 M& `) O! ^* V9 {: Xcyberpi.console.println("WIFI已連接")8 ~9 e, F3 \6 O/ w
cyberpi.console.println("--------------")+ M4 Q8 h4 v9 S S5 o4 T- a1 g
cyberpi.console.println("按下A鍵開始語音辨識")% T" a) x; }' |: ^5 T
while True:; P. f( ^7 W2 C8 V1 |, A3 j. o
if cyberpi.controller.is_press('a'):
! g0 _% @) P8 ?- I# G keyboard.press(Key.space), s: F% r' p- ^% W( R, c
cyberpi.console.clear()- i$ ~+ |+ J- @: F8 U Z' C
cyberpi.led.on(100, 0, 0)) B7 C, `) g! H* F8 X! i1 c
cyberpi.console.println("開始語音辨識")
! M0 w6 x3 ~" \* L5 ~0 H cyberpi.audio.play("switch"). M0 r2 n0 a- z6 K! i8 q k
cyberpi.console.println("--------------")# {0 c) c- U) Q. U4 m
cyberpi.cloud.listen("english", 2)5 s. ~# f8 W& L" Z7 f
cyberpi.led.on(0, 0, 0)& F9 X: B# f6 B, N+ y* z# {
say = cyberpi.cloud.listen_result()
" `( H* J/ |. Y" j, m/ [# X cyberpi.console.println(say)
# T+ E$ G6 s z1 `8 w; [/ H cyberpi.console.println("--------------") `2 U; s5 c+ k9 t5 e
for i in say:
5 K0 V* T7 T0 J2 u if i == '':
$ m0 s0 x7 k! f keyboard.press(' ') o: z# E* }. `4 Q, n7 G
else:3 {" |1 D# e+ q* m) F6 u
keyboard.press(str(i))
7 a) }3 Y [3 K6 k( l0 W& X time.sleep(0.03)5 \) Z7 y5 x0 V/ r
$ }, I' k4 ^% G. R2 V
matplotlib音量柱狀圖
( K- K' ?% V& b0 Z! {) ]: f$ }- himport cyberpi
* _8 c% U C% r" n! Bimport time
* J+ v2 C3 B- e9 y1 Wfrom matplotlib import pyplot as plt
- t! X1 f( |6 E) O7 _5 h s
. T5 M6 \4 c; u3 q; X3 mplt.rcParams['font.sans-serif'] =['Microsoft YaHei']
- z6 V# r: _1 c/ ^plt.ion()
7 [% ^6 w( b; T0 ]
. R( Y) t7 n1 i9 e2 vwhile True:
$ j# m$ x' X: F. U! i- c loud = cyberpi.get_loudness()- e8 B. x- y$ }. D& E
plt.clf()7 \( ]. z7 R/ b! P- J# N# `, g0 W/ A
plt.xlabel("數據名稱")
. P6 D; p0 M5 c& d6 w plt.ylabel("音量讀值")
- O% g2 c2 \' \' B) X5 ` y_locator = plt.MultipleLocator(5)
. P) f) T$ h2 B6 m: } ax=plt.gca()
$ m% F5 r4 d, t' p$ Y# f ax.yaxis.set_major_locator(y_locator)
3 s4 ~; z. w9 u6 P plt.ylim(0,100)( s# h3 _4 R/ p& s. b5 i
plt.bar('音量', loud, align='center',label=f'溫度{loud}')
* _- ^# |) g6 {9 H9 K0 N' A4 n3 [ plt.title('童芯派聲音感測器讀值')
# @9 [4 d# `! G" a9 p' v. \ plt.legend()
) v1 M+ u0 Y1 w* ?6 L plt.show() r. \! ?0 N& r3 o# |8 f4 L8 ?
plt.pause(0.01)
% s3 S. w9 K9 Y, X: P
+ G* r" E c+ b1 ]3 }+ g
# w$ l) f0 N$ e1 l- Gmatplotlib 多圖表顯示
4 C* ^' k) S! t* R. e4 C& ]0 K7 l) u: Y" Z c0 S% N
from matplotlib import pyplot as plt4 J% L! H8 V, C0 v6 v6 x4 [5 }
import time
) P. @: ^% {2 V1 ~import cyberpi8 G9 t- i+ M8 y' H1 |! ~; L( A
P' D7 S4 I$ c% Z) h; U* a3 R& Jloud_list = [] D% i( h2 Z; a
bri_list = []
7 F7 [: N& \4 W. e* nplt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體
( T& R+ R \! p: O2 w6 jplt.ion()5 t. `8 i7 F; E/ ^- g" z
plt.figure(figsize=(10,10))
$ Z2 o0 i5 O9 ~7 \plt.figure(1)
, v' q) ?1 D8 zx_locator = plt.MultipleLocator(5)
! A9 s! Z5 l7 J* dy_locator = plt.MultipleLocator(5)
5 h2 M7 w7 \9 h; W5 Xwhile True:
3 F* }% P- G/ w7 [! g* c loud = cyberpi.get_loudness()6 u8 `% P) D/ W- `) S
bri = cyberpi.get_bri(); Z' g$ {+ M9 o3 J* h
loud_list.append(loud)* a( h2 s3 Q# Q; {8 `. x
bri_list.append(bri) x5 D% w; x* K O8 d# X
battery = cyberpi.get_battery()
& z" e; T1 H, ` size = [battery, 100-battery]! F" q! m" ]9 h1 l+ y/ t* k
status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']" F0 S, D$ b' C& f7 ^% ?
ax1 = plt.subplot(221)8 T. V8 q+ {0 [
plt.title('光線折線圖')+ j7 s/ ]$ H* L4 N# z4 P( K* z+ |
ax1.plot(bri_list)2 U. p, K9 z1 B. N
ax2 = plt.subplot(222)5 r0 S. g- I6 _2 Q' D
plt.title('聲音柱狀圖')
; W: q9 R0 t8 y' i ax2.xaxis.set_major_locator(x_locator)/ n, Y+ R \" p- |
ax2.yaxis.set_major_locator(y_locator)
* i( P+ K1 D/ s' J plt.ylim(0,100)+ q' u8 C# I8 R: R5 ~
ax2.bar('sound', loud)
9 V; ?- L* j# h' l, w- `5 n- \/ e ax3 = plt.subplot(223)
1 N! G* R$ @+ C) G1 B ax3.xaxis.set_major_locator(x_locator)2 g8 {: B) J- Z+ B0 f. j% Z$ f8 X
ax3.yaxis.set_major_locator(y_locator)8 c! `; b: N7 m+ v8 ^: o% h
plt.xlim(0,100)' c9 f& j9 t9 v- m0 ?
plt.ylim(0,100): B) E8 S. \9 |& w- H* M
plt.title('聲音、音量散點圖')
* y/ V! G |7 W, @6 G& e) `% D- I8 j ax3.scatter(loud_list,bri_list)- T* z# F& ^! }7 I% |
ax4 = plt.subplot(224)
, A; O+ ?5 p C. u: e ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
1 k1 H2 n$ w1 B* i plt.title('童芯派電量')
2 h* P1 A0 P. L" Y6 z( J/ ~+ ? plt.pause(0.2)" n4 |8 F n5 R7 U& r, m
plt.clf()' |4 M2 Y! ?! K+ [4 m: W) p
if cyberpi.controller.is_press('a'):
) r' Q# p2 I0 @3 R& x break
: D/ }' c( [& V. B if len(bri_list) > 500:' d- M$ a$ ]) T( ?+ I
bri_list = []
, d O! f4 H9 _ loud_list = []
2 i3 Y: Q* }& g" v; k6 W d2 [" t# u! Y- k% t9 v
|