本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi
8 {: Z7 P# S5 Z+ {- L/ d4 z1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。1 |1 O! S0 G& M6 a" T9 t% w+ w
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載 1 _1 |9 ^6 c# ]2 D- h0 V" S1 T
- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。: T8 V+ C. U: A: D
2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
' [7 ~9 C" U$ }! k/ g. f5 k7 @2 M( h
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
0 W5 X% d+ X% c9 X3 K- H3 a
* _" ?* G6 r; H2 [0 h' Z* ]- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)" x& ?8 V# k$ ]% H0 o# Y K
* g, `( _9 _/ W) ~8 K0 ~6 t8 p1 U- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
1 O" J7 a/ }0 }& ] ( `# @) Q9 c0 q% w4 ^2 e0 r
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。9 @$ D7 l @0 [5 y
" B9 y$ L0 U) D! j3 b3 l3.童芯派第三方編輯器程式設計準備
; R$ h; i2 d! n0 X a5 b- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。! {+ y" w( B: f- A z' u
7 T) J4 h! I2 S5 j- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。
4 w& J) V, t$ R; y# l' ^% l( q2 X% r
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。 / ]8 {5 e$ ?5 U3 M# D g
- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。
1 ?9 Q' S0 D0 V/ K" ^ j; b" p
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。
$ t! g0 F# n+ V2 ~; x9 b( `6 |8 K" `. }1 i3 J- D
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。1 x# t2 j2 E/ ?
2 |; ]; s( Q9 s9 |+ k4 F
4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 ^/ K, H3 [9 U7 w; u/ y/ m/ e
5.一些程式設計案例5 ]5 ]* m0 b8 ]6 y6 `$ `6 g
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput / D+ c* a; J' m/ D3 @& ]
功能介紹:. F- A8 h# G' P4 \
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。
3 V! {- D& f& ^/ j( |通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。
% @- i0 K& Q5 ^3 B# i結合藍牙模組可以實現無線滑鼠的功能。3 i9 e+ k# e: n
) T2 [* J0 }( Zfrom pynput.mouse import Button,Controller
1 v, O# H" T/ N6 bimport cyberpi: B7 l* _+ j& f. C
import time" I/ J* G1 C- M+ T5 _& S
: K' N! n' X7 z& j. Qmouse = Controller()2 H4 v g5 n% A4 x' p, g7 r
4 r! d, \( C: d: J( f2 swhile True:9 k) W' M" k9 |) |
if cyberpi.is_tiltback():
: Y! L8 F0 ^7 D, @& {+ F4 O* o mouse.move(-3, 0)
0 L; i, e$ B4 D print(mouse.position). X: u+ A: o& y* m
if cyberpi.is_tiltforward():
[; r7 ?1 n3 B8 q" p6 @ mouse.move(3, 0)! o* H+ m; a6 P' I
if cyberpi.is_tiltleft():
# b; ` x/ `2 T1 ^: i' N7 @7 O mouse.move(0, -3)
# |; l8 h( r( V$ u( v; F g. z- w if cyberpi.is_tiltright():5 J: c" j' x# p& X# o) Z
mouse.move(0, 3)5 F5 O3 O4 q# r6 _$ ]
if cyberpi.controller.is_press("b"):
) J" C9 ] x! s# G mouse.press(Button.left)7 Z: _; s! X2 j8 X
mouse.release(Button.left)
) P# V) O% q( I( \4 v# g A9 j mouse.press(Button.left)/ t& ^$ v5 n: m- F6 | y: V/ _+ k
mouse.release(Button.left), A$ e1 q' A& u6 q% e- O/ l0 [
if cyberpi.controller.is_press("a"):8 f/ g8 O; ?( j
mouse.press(Button.right)
2 R% a5 @% T9 v, e+ e$ t5 g- }! Z mouse.release(Button.right)
7 u% [! s/ A6 V1 c* P time.sleep(0.01)" a# M6 C% X6 @% B* N9 j7 g9 e
& o; O; V+ T: |2 i; K$ G* _
4 n; j: }! _6 ]1 B9 f* R9 n- }
語音打字器
# E7 w' L" p$ ^3 f H5 A/ |功能介紹:
i5 L/ I) K/ ^0 E利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。2 j2 u8 ~, C* h
將語音辨識的結果通過pynput在文檔中打出來。% ]+ J' G+ I" ?2 C6 N2 C" ]8 g7 r) D
該程式目前只能支援英文。
- J. F8 P8 |$ N) I2 M$ H
! k6 j4 x3 ]- i% G: D: _import cyberpi2 ]$ [* X/ X: K0 r( {1 Q
from pynput.keyboard import Key,Controller
. D, Z. z$ I0 z g* _% i- i6 Iimport time
. [, F! `- x6 E+ s3 V( U & G# D3 }: x, T L: A
keyboard = Controller()
9 O" H' k% k3 ?/ d* pcyberpi.console.clear()
6 N2 ?" c M0 B* o9 Y/ b5 Gcyberpi.led.on(0, 0, 0)9 R* g9 y3 j* i' K
cyberpi.set_recognition_url()
$ }" Q3 H8 W& P+ r" Y3 Z: Bcyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得" f6 [5 |, e, ^' G; \0 T1 S: L* j
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼")
" V) n; z& A$ R0 }# Qwhile not cyberpi.wifi.is_connect():
4 R8 ]. c8 y) l3 d* Z" W" ^ pass$ g9 S% E5 w5 j0 p+ o, y, m
cyberpi.led.on(0,0,255)
9 U+ R3 G, r/ {" J( Ycyberpi.console.println("WIFI已連接")
' ]8 s# k) U2 p1 Acyberpi.console.println("--------------")
6 }4 V' d1 i. ^ ^cyberpi.console.println("按下A鍵開始語音辨識"). [" x) j& g+ o
while True:; n( r1 ?: u. g( W
if cyberpi.controller.is_press('a'):
; R$ u5 d) t* B( T keyboard.press(Key.space)( p1 w0 w5 @& i3 ^8 H: p1 D- M
cyberpi.console.clear()
% E* c) T/ y7 k6 t2 C+ T! J cyberpi.led.on(100, 0, 0)' w& s1 _ T0 f
cyberpi.console.println("開始語音辨識")5 ? p* Z# w3 W: ?! x/ N6 b$ n% a9 |' k
cyberpi.audio.play("switch"); b/ ^1 R1 S" n7 L. `
cyberpi.console.println("--------------")! k, d/ ~2 w" y3 I/ {
cyberpi.cloud.listen("english", 2)
6 q0 P, R# K* D0 U8 e cyberpi.led.on(0, 0, 0)0 [+ _" x" Z0 E8 h
say = cyberpi.cloud.listen_result()
0 }! |7 G' S9 L( r# v cyberpi.console.println(say)+ c$ h0 Q( e9 \! ]2 j$ p
cyberpi.console.println("--------------")% R6 k- D6 h7 _. \$ v0 J1 r3 _3 g. a
for i in say:
R. u+ y/ W1 S+ B0 v; d. q+ a if i == '':
/ x! w( p/ z1 p* s% V W: C+ C keyboard.press(' ')- p6 j9 b7 [. O! c4 S
else:& \; R! V% \6 I0 j/ h; n1 }* B1 [9 A F0 s
keyboard.press(str(i))
9 D# j! h$ ~6 I- `" U, ~ w. |( [ time.sleep(0.03)
; c5 D. p1 L0 S, Y1 ~3 {# \$ \ S- D5 u7 Q& h/ C
matplotlib音量柱狀圖
/ \7 @' N0 H$ a R+ c+ Pimport cyberpi5 |7 ]( {& c7 ?* c8 J2 y7 p; d
import time# V7 O! ~2 e" t. Z" N5 R
from matplotlib import pyplot as plt
7 c2 F* f& v' A2 M " f2 o- ?" R- \" L1 f: _
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']
9 S5 g: _3 }: B$ Y7 c# mplt.ion()! X& U+ k0 O' m( ~
2 L, v/ \/ [" }: r; n7 m' t
while True:" ~* A4 b4 e( y+ |. n
loud = cyberpi.get_loudness()2 `4 E+ Y I$ t/ M$ L* u
plt.clf()- C; o2 H0 u- k; w; [
plt.xlabel("數據名稱")
6 i3 u0 n0 E4 s plt.ylabel("音量讀值")" s) E5 T8 }4 e6 G& n; h7 b$ K
y_locator = plt.MultipleLocator(5). \3 H' e# r% V4 Q( w
ax=plt.gca()
4 W' e9 D: H6 j3 s5 t5 B9 A( ~ ax.yaxis.set_major_locator(y_locator)/ Q) D1 F" X8 e3 E4 P& D
plt.ylim(0,100)
# o+ i; @/ p# J# D plt.bar('音量', loud, align='center',label=f'溫度{loud}')
$ [6 o) U. {9 n4 o5 l2 R% q plt.title('童芯派聲音感測器讀值')2 D. F) B6 o' M1 A+ T
plt.legend()
$ U s6 w6 _1 |2 T* O) o0 C plt.show()
5 l( j a: s; `* M1 } plt.pause(0.01)3 d3 K: y% p3 j k( E5 H
9 r/ e, e" {3 i3 w" d' g
& s3 N5 j' M8 l: _' E, K0 }
matplotlib 多圖表顯示
$ i: G9 ?5 W! ?+ B
+ b; A8 T' [3 b/ ^8 afrom matplotlib import pyplot as plt
9 D/ T" ]- ?+ y5 ^/ {& aimport time* ]; j& o: h& _# V0 p
import cyberpi
) ~$ c( t7 P/ S/ z- V; H : }' a' L) r7 }; q3 q$ x9 p
loud_list = []7 c D7 G2 s- H, O+ l$ G
bri_list = []
/ c) D3 r$ p' s/ ?5 Iplt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體/ y# D P2 u+ `; @8 i% Y
plt.ion()
, L1 u) k+ @7 D8 a) f- jplt.figure(figsize=(10,10))
6 v7 r# d) k; j* b1 y# Kplt.figure(1)% K4 I( a; r& B% |" A* f: V% v
x_locator = plt.MultipleLocator(5)- m; z$ e# e, ]9 e% F& x9 _0 N
y_locator = plt.MultipleLocator(5)* }: S( t$ B; f2 M2 U$ h
while True:4 L' H. P4 k6 l# l
loud = cyberpi.get_loudness()) ?; t! I5 I- t
bri = cyberpi.get_bri()) L' S }6 R1 Z; h
loud_list.append(loud)
# y/ s( m* D H# } bri_list.append(bri)
: r9 ]! a" [. Q6 A battery = cyberpi.get_battery()
5 R# ]' _& {- i# o3 k9 u size = [battery, 100-battery]- u9 ]( v3 c# }* p8 C
status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']' J! f- z2 ~% c6 b2 n4 [5 W3 Z' R
ax1 = plt.subplot(221)6 t- O+ W! R0 d0 b8 ]8 Z
plt.title('光線折線圖')/ }. Z4 z7 i. l1 S" T
ax1.plot(bri_list)7 L# I/ }8 W- x* P. b8 @
ax2 = plt.subplot(222)
. z; ]& T% D; S plt.title('聲音柱狀圖')2 Z& v$ e8 i) V* d& H2 O' V2 }1 r
ax2.xaxis.set_major_locator(x_locator)
% S$ q% [! ]" P4 c7 Y+ e6 Q ax2.yaxis.set_major_locator(y_locator)6 }$ J/ s" v) |: w. z: f( h
plt.ylim(0,100)5 v* I* A! ^4 I. s5 I' L
ax2.bar('sound', loud)9 v8 v3 s8 r* _1 C
ax3 = plt.subplot(223)
) G/ g; p+ h7 G2 n4 P8 [ ax3.xaxis.set_major_locator(x_locator)
6 s! D/ |: h9 T2 ~1 E9 `" y ax3.yaxis.set_major_locator(y_locator)
2 y+ E% p$ R1 |3 J' P8 @/ \ plt.xlim(0,100)2 x1 D5 L, R3 U- w1 S( j- g
plt.ylim(0,100)
1 { I. t- d2 n! M' g$ ~' z plt.title('聲音、音量散點圖')
1 e' w6 I7 ~2 o2 N$ W ax3.scatter(loud_list,bri_list)1 e6 `, [) o, M8 w- V1 B
ax4 = plt.subplot(224)
6 U3 ^; M# ?: \0 b- H* w2 V7 k ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})# r6 s" }% j7 T0 h8 ~
plt.title('童芯派電量')/ s' Y0 D2 @$ w: a
plt.pause(0.2)
, ?; a. w4 w" k5 C( D. c plt.clf()" s. t! Y+ Y- y8 M& T. N
if cyberpi.controller.is_press('a'):
: P1 i) P$ ^: J$ x7 {. d1 ^. L& z break
! z5 y4 Y, K- O z1 D if len(bri_list) > 500:
4 j( D+ q7 D0 O5 e bri_list = []& L/ {+ ?% n' Q: |
loud_list = []
+ z+ ^6 s4 W" u% f# p
7 p" ^0 O% d; |+ b5 k: Y: D |