本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi 3 U8 q. K/ v4 x7 w0 n! I- ~
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。- k2 y" l+ u. `2 A" l2 A
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載 # j* i# u/ ~( p! f7 i1 ]3 `
- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。1 e+ @# s3 R! v
2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)) m1 K# ?0 R0 N; c& L2 W, Z
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
, `, {) T3 i3 s$ G4 P $ {+ j: } ]- G0 Q8 H8 ?- a# w
- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
+ R" I+ c/ w. I; T 6 [ H3 |" [( o# ]; d, t m2 ]
- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
( d/ b: Q, }- w% @ M, [& x; j F 0 ~; k7 g/ z; Q8 {- d% C
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。
) w8 @* X& D, h7 g- u* d, s 6 U% C. A7 r W# p6 k) l9 b0 r
3.童芯派第三方編輯器程式設計準備; f& B6 k8 h- `- R; z
- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。 P2 [& _: `; w- {' E7 h
) |* q5 z/ i. V: i2 ^+ [- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。
# J; L# m8 \2 ~& d0 S( E/ e0 H. o
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。 ; a0 |& i+ e3 q0 E3 p9 R2 X
- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。3 O2 d* V& T: ]6 L5 E; _, ^+ ]
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。
2 k8 e4 P/ P& K8 w' E/ d% `6 O) Z- q( i
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。) |4 b$ M! O4 Y% t
6 E& }$ ^8 s6 x6 ?; C6 H% r
4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。
/ L3 l: m0 ^ p/ Z* K% ]5.一些程式設計案例0 T3 D0 o& n! X( C; z' ~. Z% C( X
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput
" }4 h! C1 T* S9 q) i: v功能介紹:" }. a# i3 m7 b, o) o$ s
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。
7 A% f, k- P r8 ~通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。
9 G7 z/ o7 H6 D+ K# {: y2 `結合藍牙模組可以實現無線滑鼠的功能。$ O _( C6 q$ A
. A8 o5 w" ?4 ^: G+ |3 }
from pynput.mouse import Button,Controller
8 U4 p7 y& k+ m; nimport cyberpi% c$ Y1 P# c: s
import time/ F4 B0 s" [. h
# L. g" x* X+ C# imouse = Controller()
3 g: c; j0 L8 _7 c% y 8 c/ y; V0 h( p: M$ ]0 b) \
while True:
# J4 i: G8 {( x" \ if cyberpi.is_tiltback():
1 c: Y1 c3 Q" ~9 m3 Y. u' R7 A' _0 v$ N mouse.move(-3, 0)4 j9 `$ m1 G, c, d! q3 G- V
print(mouse.position)
8 B6 }# r1 t9 } if cyberpi.is_tiltforward():% K- `) Y! u2 w* `
mouse.move(3, 0)
0 v, L9 R- n2 R if cyberpi.is_tiltleft():9 C1 F" p" f# C8 g/ @& f
mouse.move(0, -3)
) t% s# [* U: x2 Z2 a if cyberpi.is_tiltright():
! v& i6 \7 k! `, O/ V$ E' v mouse.move(0, 3)
" h" `! k; R5 Y4 ~, ?0 O if cyberpi.controller.is_press("b"):# |& E7 D- k0 W7 V" G
mouse.press(Button.left)
5 h- \# T% F5 i1 }. ` mouse.release(Button.left)1 D h3 i" I# L8 b% R% o
mouse.press(Button.left)
% a) i# F: Q0 U$ r! N mouse.release(Button.left)
" w+ A& K3 C5 S' A( O2 o/ Y0 ` if cyberpi.controller.is_press("a"):, W! f( E+ i. t5 Q$ @# D
mouse.press(Button.right)
F% {/ e) x7 D9 a7 y) E* E# Z mouse.release(Button.right)8 p _. V: u2 z( y& v0 k( |6 u
time.sleep(0.01)1 T7 f5 Y' k) n
, x; R8 L. z$ O9 j% j0 d- ` o9 ^' }( p) H& t
語音打字器 * I+ @; s* R! f9 p# V$ j8 u
功能介紹:
' f# I6 }0 z- Q9 Q, I6 ^+ s利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。' V# h& s7 R) r8 r
將語音辨識的結果通過pynput在文檔中打出來。
9 x' r% C _/ p該程式目前只能支援英文。/ R$ d7 B: X% T5 E$ v
% @5 L: J3 K9 Oimport cyberpi
% G0 a( U% B2 L$ W: ffrom pynput.keyboard import Key,Controller) M, J) h3 Q" d3 Y& W0 B1 L
import time
8 Z9 W) ~6 v* A0 n
6 R; h8 n* g" K0 @0 S/ kkeyboard = Controller()
I. s" g7 a- u/ l' p: l/ Rcyberpi.console.clear()" c' W& h9 _" u' P
cyberpi.led.on(0, 0, 0)/ f8 P" v2 { m0 F/ E& k" }" t
cyberpi.set_recognition_url()
+ z' |+ T6 V" ~2 m) c3 ?# jcyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得9 W! {) [7 G' c6 G7 |' a" d" O
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼")
; e3 i& U& L% C0 g( P: P6 Iwhile not cyberpi.wifi.is_connect():
, X0 ^ C7 \+ p4 M* k& a2 p& [ \ pass7 L [5 y, G( G8 }% Y, {+ Z
cyberpi.led.on(0,0,255); ?" Y' _* j9 A* x
cyberpi.console.println("WIFI已連接")7 `: Z# W) Y; a/ p( R& R
cyberpi.console.println("--------------")
& `" T9 p7 F5 ^0 {cyberpi.console.println("按下A鍵開始語音辨識")1 n) R0 Z% b8 g8 b5 H
while True:3 f0 `# |9 z6 G' a# D: e3 S5 O
if cyberpi.controller.is_press('a'): i8 C1 G( U, g" m" P
keyboard.press(Key.space)
) Z( j3 e; n7 o5 V) h* e cyberpi.console.clear()* ~8 M- V5 E1 C2 T2 o2 [+ q
cyberpi.led.on(100, 0, 0)
: x0 X3 x" H" | cyberpi.console.println("開始語音辨識")
3 d! [! Q7 z, C! J cyberpi.audio.play("switch")
1 y4 o3 Y3 }2 t4 A: C cyberpi.console.println("--------------")0 j6 h) Y3 S8 K8 P# @9 y5 `! x
cyberpi.cloud.listen("english", 2)
6 {$ K/ A# y# O1 H: |' i: c f cyberpi.led.on(0, 0, 0)
- m) z2 S8 ^3 {- b! L( D2 i6 ~* K say = cyberpi.cloud.listen_result() v5 W5 Q0 x# Q7 f! u
cyberpi.console.println(say)7 k( o1 X' P5 {+ b
cyberpi.console.println("--------------")2 ]2 N0 X0 J- j! \- h# |1 P' r
for i in say:
$ e! `' `* N1 c* t3 r, F if i == '':& }, W0 ]3 G9 F: Y# t) z/ _
keyboard.press(' ')
, r* E9 \' l% F$ v$ w else:2 T3 B/ _) I8 i- l
keyboard.press(str(i))* X' b1 d1 M' y; ]. n8 P* c0 s
time.sleep(0.03)8 O; H! e- E* U- S
2 W( u8 E _3 |) A5 I+ w
matplotlib音量柱狀圖
. H/ u* x& u' ^" W& \import cyberpi1 j6 r. L& ]# J/ e) O S
import time% z8 [5 ?9 Y6 X3 G+ q1 n! j
from matplotlib import pyplot as plt
6 s8 z" E6 O9 | A2 t' k4 [ , x! b. N0 d I9 s0 u
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']
) L+ R/ ~& A4 ~& R" t4 Y4 p) r- fplt.ion(). u) v% l( K% v* A7 s8 _0 d5 H9 q( m8 D
8 Y- Q0 e! U1 s4 w3 Pwhile True:
+ C' e% m8 D2 j5 E3 t loud = cyberpi.get_loudness()
- a0 Q$ R3 n0 J plt.clf()
+ u6 b, Q9 w7 o8 a) @, \& l plt.xlabel("數據名稱")/ v/ `+ l4 q* r9 p
plt.ylabel("音量讀值")
3 }: K8 T9 B8 ?5 ? y_locator = plt.MultipleLocator(5) ?7 b$ d) R; _
ax=plt.gca(), W- W+ l, P# k% R# |$ q4 F
ax.yaxis.set_major_locator(y_locator)
' H& K8 E% T) F$ ^6 p plt.ylim(0,100)
% W& G/ I) }9 A; M plt.bar('音量', loud, align='center',label=f'溫度{loud}')
4 T4 |2 e0 @! P; [- x, _3 Q plt.title('童芯派聲音感測器讀值')- S4 ^8 e' Z! ]8 m
plt.legend()8 y) K; r X* O) V
plt.show()
- ]2 {" Y3 B- q e5 y. N4 z plt.pause(0.01)
r# O# u# `; L% L2 E, A6 t
2 G, M R- A; J
* G9 L6 U- F$ R7 o: \8 _matplotlib 多圖表顯示5 D' C: v) M+ h1 Q0 T& i8 ?
% T, R# `8 z1 H9 W% z! W
from matplotlib import pyplot as plt$ T- _8 {/ ^2 U3 P, I3 P
import time
, z+ B& x0 _3 D. [+ K0 @import cyberpi
9 |0 S* O5 d6 [. M( R5 }
% f2 _+ S1 o1 N, y' l1 E5 ]! Yloud_list = []
2 U3 B! f% U3 u/ \bri_list = []" C- A, e6 T, x4 C8 o- t/ q4 Z
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體
% L- P \4 r( `# kplt.ion()* [1 ?% C6 t, @2 T/ L% P3 Q# ~
plt.figure(figsize=(10,10))" O2 e' P. O5 r% f s2 e0 b e
plt.figure(1)9 w; B3 S- m0 ^: e, n
x_locator = plt.MultipleLocator(5)6 v' @* r2 Y. T" L
y_locator = plt.MultipleLocator(5)
2 `4 v) ?( Y* C4 n7 J7 Ywhile True:. e. `' C6 `3 f
loud = cyberpi.get_loudness()
+ W/ l8 Q; Y. ?3 \4 M2 Z bri = cyberpi.get_bri()
8 n( j3 p* {/ i& n1 v2 r loud_list.append(loud)7 F3 A0 ?- z0 w" ~" H
bri_list.append(bri)3 ~; L6 W* r! b1 Q
battery = cyberpi.get_battery()% M% x! @, f1 }% y2 r: l- Q8 d8 d
size = [battery, 100-battery]
# M) w6 a7 U C$ r; ], Y9 g status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%'] Q" }! m! M! W8 j! W7 k
ax1 = plt.subplot(221)5 X4 i5 i' x' ~, z8 n. v2 I! C
plt.title('光線折線圖')( T% Q0 T. X7 Q* B/ N
ax1.plot(bri_list)
0 C+ |' C" y! y) N5 X. |2 z ax2 = plt.subplot(222)
: ]) ?0 N: \) t plt.title('聲音柱狀圖') M I6 Y+ O! c! W2 \ x
ax2.xaxis.set_major_locator(x_locator)6 r7 `- T2 m" X/ Q7 a
ax2.yaxis.set_major_locator(y_locator)
1 w# v6 a# t' d0 s2 _ plt.ylim(0,100)( j6 e- `/ T" f+ y7 C
ax2.bar('sound', loud)1 e4 o4 w1 V) i- Y) @ y
ax3 = plt.subplot(223)3 l% a; F" E; Y, Z
ax3.xaxis.set_major_locator(x_locator)
) {9 _& t- u2 \, g4 x3 Q5 P/ [ ax3.yaxis.set_major_locator(y_locator)
8 p s9 ~: K5 c' O: ? plt.xlim(0,100)
& m: {* k( J4 Y3 Y! ]0 ` plt.ylim(0,100)4 D( {3 F8 \1 Y( p; P z, T
plt.title('聲音、音量散點圖')7 z0 h Y& M6 L6 W+ [/ \
ax3.scatter(loud_list,bri_list)
9 L! u5 t! T: l+ e. X9 Z ax4 = plt.subplot(224)$ y% \' S' E; P3 e& `1 V
ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})8 Z! \% A# K; ^8 s7 x
plt.title('童芯派電量')
* ]* _# j( j- l; z+ n: h% W plt.pause(0.2)
# W: `. H6 g& y: e7 d% e8 n plt.clf()" W# ?1 M2 H" F* R: K
if cyberpi.controller.is_press('a'):4 W3 m& M' K: G0 d6 m! C; c
break9 R& ^! r4 L0 b& m5 B" j7 b
if len(bri_list) > 500:1 U( A- c. P2 U. c( R( f; d9 E
bri_list = []
+ d$ M: t5 L, E* e3 s2 ? loud_list = []/ \" R8 S& ?+ ?' M9 l% ]0 [
4 s4 g+ v, Q, j B8 { |