本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi
4 w4 J7 D# J3 M: f+ ?/ I1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
' u4 F* O, t2 t) o
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載
% K \( T/ W% T- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
6 y8 O- I' p( C3 \9 y: c. z' w 2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
) |7 t) ^* w* E9 ]5 T L
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
2 K! `/ g5 X" x& o- k' f6 j: ~) o
5 z+ ^1 ?& R4 n( B4 I- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)) G. X- w1 p" \; x9 ~) p
$ i) M3 @# Y! _1 T; s9 x- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
; n% O7 G) ~* }
5 l* U: {( x9 I$ E8 E9 p9 V& I- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。! U9 a8 ?! X m+ A& Y
& B# ?' J+ N0 F
3.童芯派第三方編輯器程式設計準備
0 |% f! O/ o" A- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。
; o' G# b3 i" x: h7 I
2 h9 N& W2 f& b E* ?- c- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。$ m; C M7 Q: h F+ C9 w+ J
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
7 D; v: {- Y- g- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。' e3 A7 O# T7 v7 F. N5 k0 S
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 - i( f; Q, D7 C$ S' c& Y, ?% W
9 H" V# s- l+ p6 [
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。
4 l: E4 j$ O } D6 S) W1 M
) D+ u [0 R/ i& d# ~ V1 K4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 ' Q9 V! x# |& W: C S! [5 N& l
5.一些程式設計案例
- Y4 J' W/ e9 a4 F* v童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput 5 z) G7 L( j$ p& v
功能介紹:
( T5 n: O5 S1 o1 q: o5 n" h" M利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。
8 t% v' d% ?0 [3 R' e通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。- \/ V `' ^- a7 {& g
結合藍牙模組可以實現無線滑鼠的功能。8 [. B6 l% e& I
: u. A; e1 Y( i% u7 H: Kfrom pynput.mouse import Button,Controller9 h; }' |. H4 @7 f5 L9 k# d
import cyberpi
$ f4 [3 c* s1 W& M8 }9 cimport time$ v" O& }: t) P8 K
$ i* q8 I* Y4 }2 }1 }
mouse = Controller()0 q3 R8 K5 D$ k5 b A5 m) z8 \
) c" }& D% \& P- ?2 H0 C' E
while True: F4 ]) |8 h% |2 b9 s
if cyberpi.is_tiltback():
- ]. F2 m: a' P( A) T( R1 _ mouse.move(-3, 0)# O1 [2 P8 c9 S0 N# |. x5 \. x7 P
print(mouse.position)
# x# p4 E8 w' x3 a! |: n' N3 y( R/ I if cyberpi.is_tiltforward():
2 Z" f8 t$ e7 l* w mouse.move(3, 0)
7 v7 Q! S. W* w3 w# B if cyberpi.is_tiltleft():
# b, R$ d! g4 B V mouse.move(0, -3)2 x% G; P. j5 O7 e: R# T
if cyberpi.is_tiltright():% A% @& i! J, e. A$ O6 H* ~$ V
mouse.move(0, 3)
2 z5 {5 }5 _* u3 ? if cyberpi.controller.is_press("b"):- x/ u: i! K& ?3 F5 j
mouse.press(Button.left): e/ X$ o1 H, z) w+ Z; t
mouse.release(Button.left); \: w: b* D( x
mouse.press(Button.left)" _/ T4 d3 S- o. c" |! W$ w
mouse.release(Button.left)( E1 d8 U9 h& D* Y9 v
if cyberpi.controller.is_press("a"):# i, L1 j2 Z. R8 B+ K) C5 ]2 |
mouse.press(Button.right)3 F( G( E9 ~0 d/ m; @/ G
mouse.release(Button.right)
' v4 q8 K& T5 b/ e& V4 _5 K time.sleep(0.01)) }0 w* N/ g, X- \
1 s' y, g Q6 @0 D
; S: o, g: T$ ^4 P5 U8 D' A語音打字器 . u; C* L1 c, J- o3 \) @2 t5 c
功能介紹:
/ T- y N3 A+ b2 @* u利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。; L% y6 D4 s2 A8 M7 C+ E* h
將語音辨識的結果通過pynput在文檔中打出來。# W: M+ m/ C, D A
該程式目前只能支援英文。( b; R4 D) s7 e; P
% b5 A6 @6 f) W' i* z0 ^import cyberpi
. e1 g( L9 T* V+ v- s% k: R- }from pynput.keyboard import Key,Controller+ M( D( w& N0 g8 R# Q
import time
8 @/ `, s! p1 z* }, D1 q
( W5 y* S F+ M0 W/ _keyboard = Controller()6 \+ S( a" @2 A, w
cyberpi.console.clear()) W1 e& c7 l$ I7 u a$ \6 r
cyberpi.led.on(0, 0, 0)1 [% H6 i# |5 r
cyberpi.set_recognition_url(): r( c# r. Q5 ^7 P* J
cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得9 v# \2 u$ `( g' j" a
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼")5 u( ?) X9 I& A8 p( z" [
while not cyberpi.wifi.is_connect():
, l8 G9 z1 S8 k1 _ l pass
# S: l& Y2 M+ N( ~! ncyberpi.led.on(0,0,255)
5 v2 _* k& D& W! [0 y! kcyberpi.console.println("WIFI已連接")
$ G* j% _# q" ~3 A, B. B2 o! Ucyberpi.console.println("--------------")0 _+ K! o1 G4 s5 H1 g) }5 L* h4 C
cyberpi.console.println("按下A鍵開始語音辨識")
/ X/ g; o [1 B/ \1 ]9 P awhile True:, C# m8 B) d3 s1 w6 ?- A
if cyberpi.controller.is_press('a'):, M, t( e; z; M! T* H2 e/ ~
keyboard.press(Key.space), L7 b4 A/ P/ {. `$ O9 p; W9 Z
cyberpi.console.clear()
% O7 ]2 @" Q6 w7 Y, j cyberpi.led.on(100, 0, 0)0 c; u+ Q, u; [& k' N
cyberpi.console.println("開始語音辨識")
. {3 [5 S; |1 I) B8 v* I1 o cyberpi.audio.play("switch")
$ m/ o* `4 P2 w cyberpi.console.println("--------------")
" r7 v" l/ i; a: E( r cyberpi.cloud.listen("english", 2)5 B7 f0 k, ]; }/ O w4 `/ Q
cyberpi.led.on(0, 0, 0)
, Z7 g+ u4 f s' U# D1 O' }) S6 c say = cyberpi.cloud.listen_result()
$ ]$ x4 q: L5 A cyberpi.console.println(say)- E" E4 c- W3 R4 Y; c5 C
cyberpi.console.println("--------------")8 }7 N' p" x$ \4 q
for i in say:2 t4 G7 c3 n& r/ v4 f1 |
if i == '':
% ?4 G& D5 x' M) ` keyboard.press(' ')
/ n. l% l0 q& y/ ?- [ [+ j6 E else:
) Q4 m' r/ c& f keyboard.press(str(i))9 p$ y/ I& M8 c* z# }
time.sleep(0.03)
3 |; l5 l E* q' T6 v( z
7 V2 V2 _ N4 Y; C: u% |matplotlib音量柱狀圖
8 K1 P! y8 k w* A) N9 z% [( Bimport cyberpi
/ p# b3 B: M ]! ~( @import time+ P( P% H1 s# G/ P. K% s
from matplotlib import pyplot as plt5 ?8 w6 o5 l9 a) N
& K1 g7 \! n% H& C% ^' D9 H$ H& Bplt.rcParams['font.sans-serif'] =['Microsoft YaHei']
* _! K4 M4 `: A& Tplt.ion() e' T4 ^8 k+ ?+ ~7 o O5 l1 b
f7 M" x1 ?! ?0 I0 _) dwhile True:8 P/ C$ ]: z2 o! S8 J2 H* M
loud = cyberpi.get_loudness()9 g) v' h" {- N1 C5 Z ?
plt.clf()
; V+ P3 L' d# P6 {1 Z plt.xlabel("數據名稱")9 X |0 J" E, L# z1 k
plt.ylabel("音量讀值")& K2 X- W" l( l3 v: r! J
y_locator = plt.MultipleLocator(5)
! E, ]5 D; U4 c# O ax=plt.gca()
' R! `* i! Z* y7 O6 i& |- D ax.yaxis.set_major_locator(y_locator)
" @* p3 S Z# _: o, L plt.ylim(0,100)+ W/ k# w9 N3 \ s7 r2 R5 ~8 l# V
plt.bar('音量', loud, align='center',label=f'溫度{loud}')
5 V" k$ d; O; a2 R7 a plt.title('童芯派聲音感測器讀值')/ f w" [! G" j* H0 H, f2 y$ o% C2 y; X) ?
plt.legend()
1 O2 L# o9 i! b7 D0 q% O# `4 [# Q# A. J plt.show()
" \5 b! S0 J/ S0 n. u) h plt.pause(0.01)9 `( b: U# c0 U4 r- h
" w- h- } j, q) {
: k& R+ |& L! r& f0 {matplotlib 多圖表顯示3 T, A- F9 e% j
, s; p$ A6 k' S! Cfrom matplotlib import pyplot as plt
& S, B+ M4 ?, h0 O+ Vimport time6 i f. m0 i0 j1 [4 |" M
import cyberpi/ E8 q, d8 V) N% P* C
) E8 T6 u; ~6 \7 W) z
loud_list = []4 j4 U: n* h8 U/ W9 l+ d+ U6 X
bri_list = []& u; e v2 b# k l5 n- V& H
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體5 f' T' r2 R0 W w3 s+ {
plt.ion()& U8 g* B* c1 S. U
plt.figure(figsize=(10,10))3 M# r1 A/ p8 Y/ s& H8 k/ L
plt.figure(1)
! ^( _ G+ a+ Q% Y- Y* xx_locator = plt.MultipleLocator(5)% v. ?3 k! g* M$ o# f( @5 r* x
y_locator = plt.MultipleLocator(5)+ O A; l) X( c
while True:
/ g4 e" N: Y+ v3 @5 t loud = cyberpi.get_loudness()
* x( n8 y0 m" j6 L* U" @( S bri = cyberpi.get_bri()
" ~8 _% M, N {) B" n) O loud_list.append(loud)8 X7 C$ x% P- k' N P2 t
bri_list.append(bri)3 U# Q6 R( v# h& _
battery = cyberpi.get_battery()
9 v! r' N. F2 w( V( b size = [battery, 100-battery]" S' S0 c, X9 o( V6 z
status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']
7 W; K- p* f' U$ _( l9 k ax1 = plt.subplot(221)
7 w7 N* Z; c$ C* ~8 r plt.title('光線折線圖')
3 ^+ t7 w( `6 P# B/ ^$ i% N ax1.plot(bri_list)
5 ^. P8 j3 @ g ax2 = plt.subplot(222)
/ P+ c E; J: k* G8 n9 n plt.title('聲音柱狀圖')
0 n8 R3 T- K+ C1 V- C+ O. T6 i ax2.xaxis.set_major_locator(x_locator)- h+ D. C6 [2 p1 W
ax2.yaxis.set_major_locator(y_locator). G3 w4 k+ l; D! K( o1 ?/ n/ v+ S
plt.ylim(0,100)
% d* \* Z' l% |0 x6 r ax2.bar('sound', loud)5 w m3 O+ c2 I: P- G
ax3 = plt.subplot(223)3 _% m, H( W U
ax3.xaxis.set_major_locator(x_locator)
6 r: Y" q, z) b# l) e% q, }; e ax3.yaxis.set_major_locator(y_locator)7 `# a* y8 P7 W; P4 Z" P
plt.xlim(0,100)0 v) c7 l0 w& D. A/ H
plt.ylim(0,100). j- w2 e0 k4 f9 Y- u
plt.title('聲音、音量散點圖') F) M& v3 N2 ~, r+ F
ax3.scatter(loud_list,bri_list); p. D& H1 |; s' a% y) ?
ax4 = plt.subplot(224)
1 @0 a/ V+ D( ]' I; [ ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
( E7 a. L5 N# z! D' }% P plt.title('童芯派電量')
& ~5 V4 B% A+ b plt.pause(0.2)$ S. ?. d6 @% [# U/ b
plt.clf()
6 h( F' U: p8 X. N6 Y5 a0 _# r& d* Z if cyberpi.controller.is_press('a'):# M; G4 E+ l( f$ }
break1 z- F5 B3 [! I& V
if len(bri_list) > 500:
5 y- C2 W, a7 ^2 X4 t bri_list = []$ u$ b; Y2 ]) n- ~1 M& t! H
loud_list = []) W( F5 e8 O( L1 o+ q3 z b$ o' W2 R
2 _3 T) ? r# j. Y |