本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi
: w/ u8 K m$ y) l& T% g1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
( Q( Q L& s2 x7 L$ ~
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載
3 m4 K4 \0 G& o1 P1 ]/ Z% z3 K- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
2 g9 U" ?5 X7 B! n 2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
+ W, x! j- N# x) k9 `; p
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。. l R/ n- S; |
+ F& E! R: _& H7 @, W4 J- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
' o0 {. a* F* c: y
y1 C' B7 r; B: [3 N1 D# _& p- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
4 w8 E0 |2 X: Y: Z+ F
! r: e- j t9 N6 Q. e4 `7 g# L& n- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。( w4 l: D/ c3 J
& s9 o4 x; q9 A$ F3.童芯派第三方編輯器程式設計準備" \; t* J" i' W# E
- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。8 [4 r8 S# N% y% }- w# s" B+ C
3 {6 |, T0 X# c* Q: x) Q% H
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。1 M' [8 m( b$ t/ B# d
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
7 g) D6 p& `( m }1 h+ _- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。% v X F9 h) m; D! I( G! d
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 , ~8 l6 r- L0 X1 ^
8 |' V) c7 e7 N4 A" i* x% j' U& R+ @2 E9 }
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。8 c6 R5 P) X3 L' w0 A& Q( |4 ^
+ j# O9 r$ K- m+ W5 w4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 ; W6 g: T* K2 a' y
5.一些程式設計案例2 `# O7 r+ P/ `# q9 c, G
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput 7 I2 S8 e( c& n" @5 ~5 A
功能介紹:8 V9 Z: y) H& ]& p' |
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。
' J( u8 K7 n# e# a- V O通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。8 F% f8 O1 P b+ O8 N
結合藍牙模組可以實現無線滑鼠的功能。
% Y. d* |6 ?! Y. R a& M$ d" b# G" v4 G5 V% p8 h
from pynput.mouse import Button,Controller8 |5 E' z2 s" t7 j: s7 a, U/ ^
import cyberpi# F+ G: G; f1 `5 B. l1 R! z
import time+ Y( k7 ]) A3 h6 I- g
. [% c' m5 w/ j1 U d
mouse = Controller()
- a- m5 w& t4 `' }# S7 x $ m& C" s/ h# i3 o7 }6 A2 j
while True:( q1 F) m# R5 o4 ]" e; i
if cyberpi.is_tiltback():; }; v. A9 U' K) \
mouse.move(-3, 0)
! K" i$ o, h! m+ j2 c# V print(mouse.position)7 `7 s" J* v: w& w+ b
if cyberpi.is_tiltforward():
1 f" N4 F, a6 z; F mouse.move(3, 0); s& m3 a, n/ k, Z g6 E
if cyberpi.is_tiltleft():
' k3 _3 Z' f4 J6 N& \+ x% J* {, x5 e5 M mouse.move(0, -3)
, e$ g' E0 \8 g) T( e if cyberpi.is_tiltright():$ R) z- r, b. c$ r
mouse.move(0, 3)/ }, a: ]7 H3 c9 R: \% z; Y9 q
if cyberpi.controller.is_press("b"):0 h0 S# X, Y! o) e; p( U1 h3 n$ m
mouse.press(Button.left)
! T. E; l/ ]2 ]5 p7 i* N mouse.release(Button.left). f! Y2 G C' b
mouse.press(Button.left): v9 l/ ^6 ?, M7 ]
mouse.release(Button.left)
+ `; n7 K3 i6 A u0 f/ M# E! G) F if cyberpi.controller.is_press("a"):
, ~7 _% f! W- F D. @ mouse.press(Button.right)
4 }8 y, a _5 H+ y# J) N mouse.release(Button.right)
, C$ t \7 u1 w8 o/ J2 X9 Y: i% e time.sleep(0.01)- S1 P6 W" T2 Q* R; g N5 y
# V- `: N; a1 Q8 u& W( k m& `+ }, u% k& h& \# y" T T! D
語音打字器
' A8 o/ r5 A3 K1 ?! F& f功能介紹:
. H! _( q7 H, O1 g, ?6 e' x利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。# g: j- v9 q1 W4 [
將語音辨識的結果通過pynput在文檔中打出來。$ Y7 B, X4 e* o2 R- Y0 f
該程式目前只能支援英文。$ Z/ B* [: x, P+ f* H! I. y; U
l( I! h* d; jimport cyberpi- `0 y0 [- R |4 R' X
from pynput.keyboard import Key,Controller6 r6 ^9 R4 P& i/ C+ M3 K, e
import time
4 C" K7 \" k: @8 k7 `8 e# c
. V% t6 l, ?( v$ ?keyboard = Controller()
5 X! C/ x( T4 X' I+ ]" `cyberpi.console.clear()
; o! m2 F# j' o2 O4 ?$ \$ fcyberpi.led.on(0, 0, 0)8 [# J* i7 F" }
cyberpi.set_recognition_url()
5 u k( c# Q' I9 Z& pcyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得
$ d. p9 I( o+ z* w" U6 Xcyberpi.wifi.connect("WIFI名稱", "WIFI密碼")
+ p1 K0 R/ z/ R( T9 {while not cyberpi.wifi.is_connect():
1 _4 {0 ]( Y" v$ o pass; U6 k+ g9 o" [* J/ ]
cyberpi.led.on(0,0,255)* p7 J/ ]2 j$ l6 q3 I8 V+ h
cyberpi.console.println("WIFI已連接")4 Y7 R. L0 g4 Y0 J# R' F1 d
cyberpi.console.println("--------------")8 f# D) V& q6 i
cyberpi.console.println("按下A鍵開始語音辨識")
) i, z) k$ z) pwhile True:5 |0 I; h$ P# ?& X" X- Q) ]" \3 D
if cyberpi.controller.is_press('a'):" P4 d- U0 v3 M! c0 i' e
keyboard.press(Key.space)1 `$ F3 v0 D3 G% W
cyberpi.console.clear()' p$ k+ d* X/ J/ V- x6 y
cyberpi.led.on(100, 0, 0)
* `# z; u7 d! l% m, A cyberpi.console.println("開始語音辨識")
7 \: D5 x: T7 T% t" S1 z cyberpi.audio.play("switch")- ?/ o- ^' [1 ^; A. D; F0 t
cyberpi.console.println("--------------")
# i- N& f% L& \* z1 G cyberpi.cloud.listen("english", 2)
$ t2 K* k- R/ ^- X6 H cyberpi.led.on(0, 0, 0)
' T: K6 p9 \& b* `3 Q say = cyberpi.cloud.listen_result()
9 Z( O: ~) J6 I; r" N cyberpi.console.println(say)
' a$ ?2 t+ P/ u% `& n cyberpi.console.println("--------------")2 a, J5 Q% @) b y& b3 C
for i in say:
( G e% l& ]. n X if i == '':: Y1 J% ?) M$ b7 [2 C
keyboard.press(' ')
/ F/ `; }4 m+ T8 @% j. Q else:
% g+ w4 m1 J+ X. M$ p% F keyboard.press(str(i))
# c0 m' B4 d% g time.sleep(0.03)
1 @, d; n% _; C. A/ j: T: y0 ?
2 h7 \9 w$ `# D. _6 Rmatplotlib音量柱狀圖 $ m, x% C, c! p5 z8 u# M% b; ?) G
import cyberpi
+ \ K( w- S5 P1 k% \) j# uimport time
; O2 ^3 n( Y7 E# \from matplotlib import pyplot as plt( E5 }4 `3 P* S! C' ^
6 e: a x# A. R9 `plt.rcParams['font.sans-serif'] =['Microsoft YaHei']3 R* G3 u. j2 m- W) Z2 O8 c
plt.ion()6 e' k$ r. u. ? J r
& F! w7 N) k) u! F4 Y# N
while True:& f& ~! K9 Y Y Z$ v
loud = cyberpi.get_loudness()
1 d7 [3 V, e7 X K3 O e" z: \ plt.clf()' w) x$ l+ e A9 {* E, I" o
plt.xlabel("數據名稱"), A; t# t k) G4 U$ `! K
plt.ylabel("音量讀值")# |% f, j5 v/ }$ }2 v/ p5 I
y_locator = plt.MultipleLocator(5) g) {/ ?# X1 B: Z4 d4 T2 ~3 D1 c
ax=plt.gca()
5 k, Y3 @3 B* }' y' _5 n6 W ax.yaxis.set_major_locator(y_locator)
* Y9 W) d% K8 ]7 `6 v3 c plt.ylim(0,100)
/ X1 k/ }, W, w% T plt.bar('音量', loud, align='center',label=f'溫度{loud}')9 `, e/ f$ D2 a1 I2 a. m
plt.title('童芯派聲音感測器讀值')6 C; P& d1 P0 c: M" _
plt.legend()
* @# I( B& J' e4 F plt.show()
7 b3 n6 n$ O5 L# _ plt.pause(0.01)
; w4 m. C% ~% J! y6 \; ]5 d Z8 }% @8 t9 s; G, B
* v: N% _2 W. I( W z# Y. {& D
matplotlib 多圖表顯示
! ]* }+ Y5 Z+ p+ J- e6 e( ~% ^5 H, |9 c
from matplotlib import pyplot as plt
' G* n6 J b. W+ \1 h3 }import time# y5 h) h _+ _) N6 j' J
import cyberpi' D, I4 W: }. |9 L# Q' s
. Y& w% s" F/ b2 b! Rloud_list = []' M* \ E9 z/ I$ ~* s% e* E
bri_list = []
" s! N, O; A1 ^/ Dplt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體5 L% D% T; ?5 P
plt.ion(): M+ m/ g M( h- P( _, E
plt.figure(figsize=(10,10))
; t2 t1 Z7 {: w1 h1 t6 pplt.figure(1)
8 C7 t3 J3 e3 [x_locator = plt.MultipleLocator(5)
1 H4 z0 k' p% ?y_locator = plt.MultipleLocator(5)' H( B. h& g8 W9 _
while True:- M y5 ~6 m2 \3 h
loud = cyberpi.get_loudness()" h6 z) K0 X: {0 W: p
bri = cyberpi.get_bri(). r+ ?5 ^0 q! Y7 f ?
loud_list.append(loud)
0 O/ A6 @1 e" G bri_list.append(bri)* Z) d, |5 Q- I0 w
battery = cyberpi.get_battery()1 _& Y W, g8 N" r
size = [battery, 100-battery]
% A$ N6 t- |! n5 z1 H status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']
) \+ t" t1 B! V: M' m0 O ax1 = plt.subplot(221)) G* Y2 S8 `, |4 N4 A# J
plt.title('光線折線圖')) r# P, i/ C' h/ p! o& ?$ ]: p' L
ax1.plot(bri_list)
5 @% n6 \2 f& I0 e0 t( E. M ax2 = plt.subplot(222)
. z* Q- v B7 f/ [0 [ plt.title('聲音柱狀圖')) { b4 J3 H0 a0 m- w
ax2.xaxis.set_major_locator(x_locator)
2 f# c7 u/ _" h ax2.yaxis.set_major_locator(y_locator)" E. S" R9 q, e) V6 I2 ~* v' s
plt.ylim(0,100)" ~) O! ]$ y6 @* O6 ~2 }/ b
ax2.bar('sound', loud)9 r' i2 k2 C, b+ N
ax3 = plt.subplot(223): H5 f9 I! i8 E
ax3.xaxis.set_major_locator(x_locator)
4 g8 _+ M9 c3 y# ?5 C5 ] ax3.yaxis.set_major_locator(y_locator)* q0 ]- h* B4 y8 l) F
plt.xlim(0,100): ]/ N( L1 w. T ?0 u6 r W5 r
plt.ylim(0,100)
& N0 ~8 h9 A P- u; S' @ plt.title('聲音、音量散點圖')
; p" r9 w7 B8 J; G! H- U- v C ax3.scatter(loud_list,bri_list)0 [0 u$ k& }( o3 i# m
ax4 = plt.subplot(224)9 ^7 r* _. X) q$ `( b2 u9 J/ B! K
ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})% d5 V2 L3 x9 S/ i. Y0 E
plt.title('童芯派電量')
+ z% A9 }& y3 y+ R plt.pause(0.2)% ^" G+ ?4 Q8 N* M$ R
plt.clf()
. D1 s) f3 n- W. ~# T if cyberpi.controller.is_press('a'):
6 U/ ~+ u' V3 O, _& V. R break6 r" j/ g& X2 }* H' q
if len(bri_list) > 500:
9 H2 s' v! C# i6 L* D1 l1 Z( v bri_list = []0 V0 [. X0 Q) W* N
loud_list = []
! g; X8 q) }/ ^" O: j& \9 q& ~# z$ _) ?4 C9 |
|