本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi
) ^( h; D" A: |4 a1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
2 m; P' w) ]8 Y2 _) r
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載 3 W0 s* t1 l5 g. R7 u- J
- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。6 l# N' [& _) j: N& W/ T
2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
, F" B% {$ b* K& L
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。' ?# n4 j0 a) n1 _
7 C1 X6 Y/ e* b$ r% @8 }5 w- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)" m/ a6 Q W$ N0 a! v5 C8 {
1 ^/ s, [- R' k e
- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。& x6 e4 v/ T; }: Q! U0 m
- [4 m1 v5 k `' ~& K
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。9 N/ k, @! ~/ |1 g9 W) [/ q6 a, d
( J7 b4 K* [7 @* o% [, H5 e3.童芯派第三方編輯器程式設計準備
2 J$ f2 x9 a, n9 J' s$ u5 N- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。
: h4 l8 d$ u2 u- n + z( |$ o% d$ `. l+ N! b
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。" M2 |/ y" J z! o
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
% C2 i& p% z! o9 X- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。5 n. @! ?3 ?; w0 n! P* f/ ~
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 & N* F9 c2 r: _+ i" L
2 t8 R: q. @: g' g# Y" d, W2 p( ^- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。
0 i; }7 [( Y$ q" r" m" y
# w" o# Y! o$ P5 G4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 : T; d8 ~8 H& T
5.一些程式設計案例
+ H( V3 C9 J8 }, {童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput
0 l; K _) x/ P9 _8 X功能介紹:5 a! ^. F& S. j" P s
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。
- ^8 R' Q P$ l, R通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。2 W; P0 R* g' C; k. `
結合藍牙模組可以實現無線滑鼠的功能。
" @7 R2 Q% a+ I& _, O6 M# e e- Z) c) S4 v
from pynput.mouse import Button,Controller
& S; A8 c4 @8 X# A1 jimport cyberpi+ P% r' v6 D5 y
import time
5 R" g/ r1 M2 o: u: n: Q 8 l- y9 q) a# n0 x6 O% n D6 W# u' M
mouse = Controller()
7 b" |% \7 R' B 5 E0 i3 }8 i( ^1 E& x
while True:7 Q G" v( p. b; }5 O+ `1 E+ g9 t
if cyberpi.is_tiltback():) T6 }0 q8 m9 ^; w; P' \1 y- H
mouse.move(-3, 0)
3 s/ e+ g) |) R0 A9 D, C print(mouse.position)
( M0 }/ y' G. W if cyberpi.is_tiltforward():2 Y" X. j6 c% S5 d2 E
mouse.move(3, 0)/ @$ l0 v; e! ?' x
if cyberpi.is_tiltleft():- G# k! ~0 v, r- y3 j( t4 Y+ I
mouse.move(0, -3)
; }" M. ?9 B: x if cyberpi.is_tiltright():
) r' @+ X8 B! V0 U8 o mouse.move(0, 3)" T. W, g% G B: F' \
if cyberpi.controller.is_press("b"):
) B& D7 E1 S; ^+ w3 [" X1 `2 r mouse.press(Button.left): ]6 _8 j9 l) n" T; C% d6 L
mouse.release(Button.left), ]. I2 {; ?2 G4 m) s, K
mouse.press(Button.left)
- g7 J7 b3 Y- R3 U3 ~ mouse.release(Button.left)9 L9 [2 p) M" t! d8 l/ d
if cyberpi.controller.is_press("a"):
) @% u( n! u! p8 x9 ?6 G$ L- e mouse.press(Button.right)
* u3 E6 `! G2 z9 t k% G2 {1 W+ ` mouse.release(Button.right)
/ D9 K @% L+ S8 G; `; p. A time.sleep(0.01)% M) i( E4 g' V2 p
1 T1 ^( L p. E( E" J/ D$ @" ?2 K# t8 C$ h. @
語音打字器 3 {; o2 f( O" _% b% t0 R
功能介紹:
( c! l0 m6 y6 T利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
; x+ m) r3 R; W將語音辨識的結果通過pynput在文檔中打出來。
5 e" U0 O9 P5 B4 i, K6 w, N該程式目前只能支援英文。
0 z0 v3 n& ~5 c& q, X" k, ]! h% L" T. Z
import cyberpi
9 r( e+ X+ x- d& C! Sfrom pynput.keyboard import Key,Controller
, `' K$ G$ t) }+ M2 c* mimport time
( U& O& H/ j' t9 R: e. ` , n% ?" R* f$ |2 `
keyboard = Controller()
$ a) t7 e0 D7 rcyberpi.console.clear()6 u$ n% s2 h, P; P g6 h& Q! v
cyberpi.led.on(0, 0, 0)$ X T8 F5 t$ B
cyberpi.set_recognition_url()9 q# g& z6 V2 U% W. w
cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得
7 ?! l" Z- d1 L, W% Scyberpi.wifi.connect("WIFI名稱", "WIFI密碼"), `# \" a6 H C4 M6 ~
while not cyberpi.wifi.is_connect():
: X/ |1 G" j# _7 Y( }- r! n pass
, ?) Q) Y& h* L9 |! \2 t$ j+ U1 Ncyberpi.led.on(0,0,255)9 I* J( T) y% U
cyberpi.console.println("WIFI已連接")
4 P8 h F5 C$ k- Ccyberpi.console.println("--------------")$ w5 x0 Z4 j6 a$ a" Z' {8 n
cyberpi.console.println("按下A鍵開始語音辨識")
! P& |/ f4 a* M6 i1 f# Wwhile True:
: w$ }6 [. ]9 c; @" P, ~' @+ ~: N if cyberpi.controller.is_press('a'):
* F& K6 I' Y8 K9 E( N% b$ a keyboard.press(Key.space)
1 Z! a1 @3 m- X% c. E cyberpi.console.clear()7 N; g ]( |4 x. e4 f/ p q1 T
cyberpi.led.on(100, 0, 0)$ B3 U8 J5 j+ q }! ^
cyberpi.console.println("開始語音辨識")
: S. Z! a1 U. I# n/ L( j cyberpi.audio.play("switch")" x0 H( @" u# }. F
cyberpi.console.println("--------------")
2 Z; P# u( F( I! W4 [ cyberpi.cloud.listen("english", 2)
# t7 U1 g& D) H# w' V% @ cyberpi.led.on(0, 0, 0)) i) I D5 b0 G/ I. s
say = cyberpi.cloud.listen_result()
0 v" H+ F; p* r7 d9 ? cyberpi.console.println(say)
1 U+ b' }) `; t( F K cyberpi.console.println("--------------")
7 n% \$ }1 ?) `8 H7 S9 S$ @ for i in say:
, R9 {8 d2 g& M" o1 c: [8 G if i == '':& E! q9 q7 D8 S5 y0 Z3 ~) z! m
keyboard.press(' ')
- `/ X, g* h' u2 i) p8 m) K else:/ H; D& y6 R) E& W
keyboard.press(str(i)) Q. C' Q2 B! C' r9 [( U7 T7 a
time.sleep(0.03); C* x3 g1 s" b1 J+ v+ [
7 q7 H9 T" e8 P7 ?
matplotlib音量柱狀圖
6 ?% I7 C; L! s; p iimport cyberpi; L# V, U2 t% s( t
import time
Z! N7 P5 Q! N* r! A8 `# xfrom matplotlib import pyplot as plt
5 R1 f+ }. b& v* H* s6 d3 O
/ S+ P. T J S3 P+ eplt.rcParams['font.sans-serif'] =['Microsoft YaHei'], X- Y# G$ ^( |
plt.ion()% D" T( A; t/ n! H3 P5 Y+ @5 W0 v
* X1 Y! D, C3 q7 ~6 Ewhile True:3 ]; [9 B, @9 W, w6 n* v& X
loud = cyberpi.get_loudness(). X6 I; d5 f2 `1 Y! {' K6 i
plt.clf()- @1 r' N6 d* P5 r: N
plt.xlabel("數據名稱")
9 W' E0 h4 }0 c- @1 S" f& A plt.ylabel("音量讀值")
7 k% U m; h; N9 U0 X y_locator = plt.MultipleLocator(5)9 F0 ` M) L8 \ \2 a
ax=plt.gca()
! E6 x) n; O! d, Y" B4 s. s* k' b ax.yaxis.set_major_locator(y_locator)' |$ a3 _2 w; r1 ?& o3 I. z
plt.ylim(0,100)
" h$ J3 f! p& l ~; g8 a plt.bar('音量', loud, align='center',label=f'溫度{loud}')/ i' F+ d* I, N
plt.title('童芯派聲音感測器讀值')3 ^+ R! p; q5 r8 u& `/ N
plt.legend()
& f( V, O7 c+ c plt.show()! g( Y0 V* [3 @, b4 ]9 }7 M8 R
plt.pause(0.01)8 E' T) o/ X/ Y( {& e; u
8 Y* \2 Q% @3 n/ n0 ~* o
) H2 b* ^7 ?" y: ]+ v- \
matplotlib 多圖表顯示$ N0 F' r/ W" y1 s
9 G& Z4 E ^& ]6 F1 J# F7 U
from matplotlib import pyplot as plt( a; l+ [. f+ M& L8 _. T
import time
" t& w% x- P8 Y: k5 e& R0 y3 Kimport cyberpi
, r1 o8 }# ~. ] |9 `( _
8 e, ]3 F# ?2 S9 \& L2 b" Floud_list = []7 p ?$ R* \: S0 d& |2 M2 W' Z
bri_list = []
# J3 u2 [) e9 S) p. p" pplt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體& }+ y1 G& I4 t+ v6 A1 M: X
plt.ion()
3 }5 q# z9 W; Fplt.figure(figsize=(10,10))" Y+ G7 Q# O9 C# L; c. f
plt.figure(1)* S8 D6 Q" z. M) t5 K" v/ J
x_locator = plt.MultipleLocator(5)+ v4 l7 }& J' D4 W4 r$ b
y_locator = plt.MultipleLocator(5)9 N) r4 B; S7 t2 w
while True:& j: N4 X5 t" d! Y5 l5 f: A
loud = cyberpi.get_loudness()
7 }7 p M8 x% t; p0 t* l bri = cyberpi.get_bri()6 h$ ?' \$ }* g6 _7 l
loud_list.append(loud)
: {: V [5 ~/ h5 n" } bri_list.append(bri)
$ y9 R, V7 P* b u m- }* a0 H battery = cyberpi.get_battery()* U/ E8 @0 X* a' G8 z
size = [battery, 100-battery]
& p- S7 N3 E6 _ status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']' {7 ?' x, f2 z: V
ax1 = plt.subplot(221)
9 E8 q, I0 E( Y) D& _; H& m; N* ^+ C plt.title('光線折線圖')
/ X* d3 P6 j) r7 E4 x ax1.plot(bri_list)& X* Q3 H! I5 p! C3 o& @0 ^
ax2 = plt.subplot(222)( O6 _+ v8 h8 P( y P+ A4 U
plt.title('聲音柱狀圖')
1 j5 a" v2 y! [ ax2.xaxis.set_major_locator(x_locator)
* A( p- u$ M$ i J* S' C* R% t ax2.yaxis.set_major_locator(y_locator)
. I. h4 p, g. a/ q. s4 h* ]+ \8 f& j plt.ylim(0,100)
7 D+ k4 y2 x) U3 p3 O7 y ax2.bar('sound', loud)- g+ G0 F- p7 u5 ], W3 ]
ax3 = plt.subplot(223)( ~! r9 Z4 E; r% x
ax3.xaxis.set_major_locator(x_locator)
% A9 G) y- i G6 E2 h ax3.yaxis.set_major_locator(y_locator)0 p$ N/ k/ V. |0 b% l8 x8 d9 Y
plt.xlim(0,100)
; ?, O, C+ \0 w' o0 a; i+ T plt.ylim(0,100)
; u/ m$ p1 i- G3 ] plt.title('聲音、音量散點圖'): l4 }5 e2 {+ ?
ax3.scatter(loud_list,bri_list)
9 `" n# Q1 L+ r% I ax4 = plt.subplot(224)
8 c5 I+ S6 ^" n3 _; j: X ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
, I" N+ X5 {9 G2 u plt.title('童芯派電量')
- m8 L4 b( i2 X" Y; c$ O plt.pause(0.2)8 ], l# k% C, W/ I% E, ~6 j
plt.clf()" |0 u3 C6 C% T
if cyberpi.controller.is_press('a'):
/ S7 ^6 s! F6 D L/ M$ s9 A break9 q r2 O6 \4 }% ?; I" z' W2 `
if len(bri_list) > 500:. Z& V# r% w6 b u! a( z0 |0 {) h
bri_list = []
+ F7 l/ o' ^. {5 j9 P) D loud_list = []
9 X% H4 m, \2 u. W& v! v; i+ x3 }
|