本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi
* D# e. _8 A. A7 M, W1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
$ r2 Y. u7 R2 t
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載 $ P, `8 r' Q5 ? L7 M6 A
- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。9 v' N, S8 r8 D9 ^
2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
7 I+ ]3 ?7 C; ~$ b
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
5 C6 N% A4 h, q8 o * e' I" z7 e% `' J* _
- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)0 K* B `/ U! K7 l
- n1 p/ L/ f! T0 q- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。. ]7 u2 h" b7 R4 u$ Y
& T' _/ R( l9 J' b8 s. k* \
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。" S7 i3 O* ]' G: f/ y
% s$ o0 o! h' I: o3.童芯派第三方編輯器程式設計準備: \4 C F G5 E# Y0 W
- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。
$ I& ^8 S& j9 Z! X- E/ Z! \5 _
7 Q& a9 z! U. T) m% }' u9 `- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。
* r/ W& H8 N1 N4 ^
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。 6 b- ]* A2 c1 w5 S n
- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。
2 V- Q% M: B) g* o- H, V# D- ~. |
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 3 |. C1 \ Z3 \% ^. r8 X" [
0 a; G. r% v% x; c5 p: y- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。; E- [. ~6 K4 F- I) W7 P# O z
+ F4 @% m' L* s8 ]2 ~. v5 Q4 H4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。
/ D' Y4 D4 m# `3 [( v5.一些程式設計案例
& ~$ @& D0 x* F j3 k) p童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput - L: i+ \2 Q9 {; V# \* {
功能介紹:
7 R9 S l; c) K! y$ F利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。/ c9 Z* C& ~: q6 N" a0 Y9 {
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。
0 b2 O! z h& o* I4 x3 F2 |4 T$ E結合藍牙模組可以實現無線滑鼠的功能。
1 y# K% }2 n' k- s, n
: }( _- `6 C$ D4 {from pynput.mouse import Button,Controller
F! z! l) ^ S5 C8 _: U' G* w" Fimport cyberpi
9 j* Q" d" `1 p2 Himport time
' k( g3 h, j- j! t6 J 3 x% `; T% t. T7 i
mouse = Controller(). c7 {7 X4 b+ z3 O4 H
1 j2 }8 `- E4 Y, j& q( _5 C4 @
while True:
* D2 B/ ]/ A5 L9 l if cyberpi.is_tiltback():
- ]7 m. m0 y: q8 i" i; g, Q7 F mouse.move(-3, 0)
$ }9 h2 X! V3 Z" M print(mouse.position)
7 @9 L, l5 n! }+ n+ a% i if cyberpi.is_tiltforward():
+ |8 j1 G: V- u% z3 @, H mouse.move(3, 0)
9 \/ t6 v2 q: l: e9 t( N" P if cyberpi.is_tiltleft():" u" x: D1 B; D7 M7 M. W- F7 O
mouse.move(0, -3)
& c Y, ]0 d+ T0 z) K( ~ q0 c if cyberpi.is_tiltright():
' x2 [: a1 x! b1 y( Q; p& F mouse.move(0, 3)( I' G, o% r7 O+ y! n, o
if cyberpi.controller.is_press("b"):
# F! O, K$ t) n- W mouse.press(Button.left)' X( a: G0 o7 k) ]- l. Z7 t& {; D( F
mouse.release(Button.left)4 I3 K' e7 a" j
mouse.press(Button.left)
7 n- H. d3 N# w6 f7 P A mouse.release(Button.left)6 v7 u0 d; j: Y* G7 }
if cyberpi.controller.is_press("a"):9 I7 w2 ]- n8 Y' o5 b
mouse.press(Button.right)
0 s: x6 j/ j9 Q5 h1 N/ O mouse.release(Button.right)
7 j2 b, N/ W/ x' N time.sleep(0.01)
% j' L+ S3 L# A) M8 |6 x6 J, h( p) n3 U
3 i( J/ r. g% y% Q語音打字器 ( R, C3 ~, `% y: Z* f
功能介紹:! s( w4 D& B& L
利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。1 g. r" X7 A7 ^2 A
將語音辨識的結果通過pynput在文檔中打出來。
% _" m ]) {. S( A該程式目前只能支援英文。
: Q5 w& m+ h# i6 N
' r5 E3 G! c( W, {$ _* _' Z/ Zimport cyberpi3 }; ], ?3 a2 G9 l3 u7 P% `% W2 F
from pynput.keyboard import Key,Controller
3 `5 L& H& j" {) ^+ Himport time: l" k( N# k5 n' `/ B# W2 {
1 c Y- R! Z. S* m& Skeyboard = Controller()
# ]) _4 @/ V4 rcyberpi.console.clear()! O! N/ l8 }$ T" k. X6 l) I3 w
cyberpi.led.on(0, 0, 0)
3 L! K* f, P( W7 @) n4 s, ], Y6 Fcyberpi.set_recognition_url()
8 q' k* m; i) d7 g) Acyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得: f: m7 @+ H& E0 W* w
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼"). {0 j) R7 P3 X9 @4 k6 _
while not cyberpi.wifi.is_connect():
! a; u, ]( i" f5 d7 {- G. |3 i, k pass
' r9 d4 ] k0 |7 V, b) s( R9 Kcyberpi.led.on(0,0,255)
# x& o6 E$ E& Qcyberpi.console.println("WIFI已連接") c. H! o2 \) D/ a6 k
cyberpi.console.println("--------------")
* p7 T0 s4 w0 r, q2 wcyberpi.console.println("按下A鍵開始語音辨識")6 D. C, M* }% M" T7 @7 [6 h
while True:+ `' [1 f; l `8 Q: h
if cyberpi.controller.is_press('a'):
8 a8 A, V+ L4 w& |6 b& [( y keyboard.press(Key.space)
" y5 E. Z( h4 X3 r' w A cyberpi.console.clear()% @, Z" U; E- f# V% I1 m* G- f
cyberpi.led.on(100, 0, 0)( w7 \% d6 R) M/ |, h% Q
cyberpi.console.println("開始語音辨識")
/ ~: r) l0 d2 S( T5 s* v. _+ f! L cyberpi.audio.play("switch")2 T+ v( A2 m. t; U9 j; W, ~4 f! Z
cyberpi.console.println("--------------")% a: ?8 F3 O' ^! W. n
cyberpi.cloud.listen("english", 2)6 L1 C- n! }; h( W" D) ?
cyberpi.led.on(0, 0, 0)
! h$ [0 `) q6 Q- }* z$ K say = cyberpi.cloud.listen_result()
, O e) }9 f# U# D5 } cyberpi.console.println(say)
# M J% u U8 z cyberpi.console.println("--------------")
) o. j0 a) @, Q/ q for i in say:) `3 o4 s8 T# P* O# f$ c
if i == '':
3 |* m: ^+ p9 V% y keyboard.press(' '): T8 j1 {3 R8 b! L; I3 g0 U
else:' w/ Y6 ?3 q, Z! o' q2 b2 w8 r
keyboard.press(str(i))+ z5 f: U* s! d* a9 E# `
time.sleep(0.03)
U/ H' R8 H' K5 m+ T ^) S0 J5 m% W% z. o* T; h) Q
matplotlib音量柱狀圖
- l9 I [! K% B) R) f9 }import cyberpi
" ^" H" |+ w; aimport time/ b$ h9 C4 r4 p! l9 |9 h
from matplotlib import pyplot as plt
6 I8 K9 ?, R9 J! D% C
4 P; Y9 n3 a$ @3 {2 L* D2 {plt.rcParams['font.sans-serif'] =['Microsoft YaHei']4 ?" F3 ~- A/ L+ r8 g* P/ c; I/ A: @
plt.ion()( l: V: H( i$ e6 j! k# e
- V3 V1 e4 R3 Z2 {! f
while True:
. a0 h; `1 I% s# J loud = cyberpi.get_loudness()2 s* C3 a7 T# E8 L1 r
plt.clf(); L, W" k0 T) d; {( s! s3 u
plt.xlabel("數據名稱")
/ ?! j2 S: w- Q5 m, G4 \) e plt.ylabel("音量讀值")
`! O/ h% O2 S+ U3 ] y_locator = plt.MultipleLocator(5)5 n7 `2 R( c3 z8 D7 c/ E
ax=plt.gca()
, A) K) l. B+ M9 m; T ax.yaxis.set_major_locator(y_locator), Z) y2 G, f* h0 R
plt.ylim(0,100)' Z2 v2 U* O( M) {" f6 |5 z
plt.bar('音量', loud, align='center',label=f'溫度{loud}')9 z/ X8 ~. p9 X6 _, }# z
plt.title('童芯派聲音感測器讀值'). k/ M$ u0 B% c, }0 l: \) s3 i& H# `
plt.legend()
# B5 S$ M3 e x/ E- \1 M' s plt.show()
( y6 H! Q( x/ s plt.pause(0.01)
- ~( W9 s, X5 [; k. X& l0 B' P- _ E% |% w% b# ?& T
c4 @! O8 R/ O3 @2 B" A E$ X2 J
matplotlib 多圖表顯示6 f0 f2 k @0 Z; E$ q
/ ?5 G/ `: h' p5 L/ I5 H2 Y2 C
from matplotlib import pyplot as plt2 }9 J6 V$ u9 W ]
import time8 d! l- J7 i, v* a8 s- ^. T8 C
import cyberpi, R! l: ]2 S6 W4 z. J ?
3 c) x7 Q: k8 }, E! z5 k
loud_list = []: y7 N4 T( Z2 U6 L. p
bri_list = []9 ^# x3 i( `* B4 S
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體
, X( S/ @" D0 i1 j8 F/ `plt.ion()
1 F6 W6 Q1 j8 fplt.figure(figsize=(10,10))
4 W, B& l+ X! g. a9 {0 o) Pplt.figure(1)
5 C2 k7 R, T3 N. L' j0 w4 Lx_locator = plt.MultipleLocator(5)
& s' L/ N% g! [, T$ ^0 u3 V& Hy_locator = plt.MultipleLocator(5)5 R3 R2 e+ E3 F0 [, A5 j! j7 g
while True:
( y# r) c$ |' V( h loud = cyberpi.get_loudness()
* f" }: F' S- z8 P bri = cyberpi.get_bri()
8 |/ D2 J/ Z% Y8 [2 M$ e- }0 j9 h loud_list.append(loud)1 [* y0 O& E) K; _+ M: Y
bri_list.append(bri)+ x; s1 b; K5 R1 E
battery = cyberpi.get_battery()' X. e6 A& J9 Y9 x. ?# l7 C
size = [battery, 100-battery]; K! E" r6 T2 I
status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']
$ W* O" W- @( {) ~$ v ax1 = plt.subplot(221)& ]/ O& z* o* z) g- f4 C
plt.title('光線折線圖')
+ s3 G! D' M# D! R$ M' M' u# J ax1.plot(bri_list)
G, q& L3 H. G, E$ H" W ax2 = plt.subplot(222)
, w4 f* u S+ I0 N/ |& h, F% S plt.title('聲音柱狀圖')
5 l- {; A$ }* t& v) u5 i8 \ ax2.xaxis.set_major_locator(x_locator)
) H0 z1 `1 R1 y9 x ax2.yaxis.set_major_locator(y_locator)4 j0 {% v. w4 I0 D4 K1 j
plt.ylim(0,100)
4 h3 S, v* @4 y8 _2 z. ] ax2.bar('sound', loud)
# H# `) J; f3 Q" }8 V& h! E) | ax3 = plt.subplot(223)/ N- R6 u8 r- u, w6 W8 k
ax3.xaxis.set_major_locator(x_locator)2 @% d- m! }1 w9 \# c5 M7 G3 {9 s
ax3.yaxis.set_major_locator(y_locator)
3 _" Y+ H2 }9 D) m" W6 v plt.xlim(0,100)
8 Z+ G# Z5 e7 x1 ^ {1 k/ L9 L plt.ylim(0,100)
2 Q2 G+ v8 B1 q# y }! V plt.title('聲音、音量散點圖')
& R, O2 i7 Y8 J9 ~ ax3.scatter(loud_list,bri_list)% b% z! A; Y3 P3 n e- G0 o
ax4 = plt.subplot(224) a& P- o& f6 E% n8 n# C& G$ ?) t# G
ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})2 m8 j7 O5 w- l, V2 c
plt.title('童芯派電量')5 h/ ~0 p4 i% L/ s/ o2 j
plt.pause(0.2)
' ^$ V( Z- P- Z7 x0 P( \ plt.clf()& P/ }/ |/ c7 S8 B k! j
if cyberpi.controller.is_press('a'):
9 h: g0 b* h' Y. H& a break, A% T1 o6 y9 s. i& B% Y8 T
if len(bri_list) > 500:
$ V4 W6 C u5 G' n" \ bri_list = []
/ Y& H& ~. Q# ^; M$ |9 M& r5 Z, B loud_list = []
9 A$ w) ?) @4 p4 h
7 K: e, n2 h5 H |