本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi
0 H, O! O" {9 C# c# N1 }9 d9 F3 W1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。7 f3 ~4 z7 B; _8 B8 n1 _) k
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載
( y5 J' c( A4 W" ]$ p9 b- R$ W4 \7 o) i- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
, Q& x8 P2 u G 2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
# @4 R5 m6 m2 d0 l y# k$ O% k
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。 T' S$ b; P% n* B1 E" H# F
$ U9 {8 ~ b6 M, }8 j. ?1 u
- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟), s0 w& S$ V6 [+ _ w- u
$ b; J( s; d5 t* i* f @- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。* _2 o) B, q W3 o: _, d$ ?% b/ `) N
) V3 W: m; W+ R9 M9 Z2 ]8 o
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。
6 y$ [3 h1 F8 N: l( x5 V
' v* v* [2 w b: t A8 j2 r( }3.童芯派第三方編輯器程式設計準備- `7 K, r3 ]: e$ x
- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。9 V+ S/ l" N z. m. u- b" k
: N" a. k" U( D) R( v# H, Z) \. K4 W- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。
L2 w) g0 H: m8 K0 h. m! F/ o
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。 3 j, D2 I# P# T
- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。. n9 |+ y/ m0 F d& `& L
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 ( L4 b& l/ i* f* h
( A# S |3 e! Z9 ?4 H% d
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。0 ?* X. | N) w$ F1 U8 b) m
8 s. h. N0 R7 c3 `- z6 |$ Y4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 9 S# N. Y! _ G) u
5.一些程式設計案例
4 U- }7 d$ j5 T童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput }% k1 e! d5 H% Y' L' l
功能介紹:$ W3 u1 {2 L/ q( Y+ A' N
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。1 H! k; J6 S8 J6 Y
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。
9 ?- y' E* P8 g& X結合藍牙模組可以實現無線滑鼠的功能。2 H% {" ^/ ]/ K) r; `+ [
5 Q8 C& Z; W3 A" tfrom pynput.mouse import Button,Controller
# n" g7 W) o Q& Mimport cyberpi
+ O H5 f" W3 ]+ K. fimport time
! M% F6 A0 }; A1 A# ~# c
9 p$ {, W, [+ L2 B6 p( hmouse = Controller()
P% z5 @# o. Y- N. i* M 1 Z/ h+ }" A5 N( E
while True: {, w1 L F- \3 I
if cyberpi.is_tiltback():, g# X( a& \, b# t, c+ G) @
mouse.move(-3, 0)
( [* s# D$ ~! k& s% {/ a9 |' U print(mouse.position)
+ |/ r8 |) J4 N" h if cyberpi.is_tiltforward():7 _! t. a4 T3 @6 Y. D' C# X, |' B2 x
mouse.move(3, 0)
6 G4 p" a3 u% B; @/ W7 {4 ` if cyberpi.is_tiltleft():* q' s- X5 d! V, S* h0 o# Y8 M- r
mouse.move(0, -3)0 c* f- U2 t3 ~5 p1 j
if cyberpi.is_tiltright():3 v$ R# D" y$ @
mouse.move(0, 3)
8 h5 @( D9 ?7 G: s( m0 R if cyberpi.controller.is_press("b"):
( W8 t7 g4 f4 L: p6 e7 i- ^- O. e mouse.press(Button.left)
! j+ `1 N4 r/ V4 f E mouse.release(Button.left)9 I0 x- z/ Q% W, p
mouse.press(Button.left)
- f. R1 ^! n( k B' w- s! R mouse.release(Button.left)/ q+ E' v/ L2 ^# M) x1 y* k, A
if cyberpi.controller.is_press("a"):
' O# v. L4 U) e% [. D mouse.press(Button.right)
' b7 L. i2 `2 O: p9 ]5 ^$ s" \ mouse.release(Button.right)# B3 {1 ^$ {6 ]4 I
time.sleep(0.01)* D2 ^; x; v. B3 K* I! I/ |
" l9 {* ^7 m# R8 ~ C' h
3 `: G2 `7 l& [; k- G# t語音打字器
, }/ a& u7 A1 a. m V功能介紹:
6 g; m. H1 {$ j4 Q; O利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。, M, N5 }2 l# P/ Z3 j& N
將語音辨識的結果通過pynput在文檔中打出來。
3 z* k8 G3 L7 ?( Z. n6 Y/ v* T H! @該程式目前只能支援英文。. v, }8 D, W" m* W/ ~: ]
/ m# |5 n. ?1 c8 u; g, l
import cyberpi7 f) S# S" V9 e2 i0 L/ }% G7 P
from pynput.keyboard import Key,Controller
! m+ T+ ]* E) c; R; [% g1 [1 M) n5 Timport time
+ q1 X2 C) T7 B6 O% P5 u z# A 1 c# }" u! F4 L
keyboard = Controller()0 b8 N8 C5 M i1 }: c- u
cyberpi.console.clear()$ Y6 N; M# Q7 h) B; \1 ^
cyberpi.led.on(0, 0, 0)/ l% _' Y3 u- e2 n, V
cyberpi.set_recognition_url()
1 O; y ^( n) `' e5 I: P( Ycyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得! b4 O' i6 m2 M2 a
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼")4 P2 ]. Q' R' g9 ]3 }; S
while not cyberpi.wifi.is_connect():5 O5 r3 U2 i2 Q$ I7 A3 z/ Y
pass4 [% j6 o2 [( H3 I1 s! O
cyberpi.led.on(0,0,255)
% [- u1 Z6 {, V6 _cyberpi.console.println("WIFI已連接")9 @, Q! ^' P/ {; k
cyberpi.console.println("--------------")
% \ l; l2 {" L( I. \" q, rcyberpi.console.println("按下A鍵開始語音辨識")& E c6 n# h* ?: b/ a$ O
while True:6 ?5 k; y8 {( l9 p& ^. W/ f( n$ E
if cyberpi.controller.is_press('a'):
" c1 O Q4 g. [/ l3 ]5 E keyboard.press(Key.space)% E$ j6 j2 Z' d4 O: A
cyberpi.console.clear()! }# F7 j0 c' \8 }; J" r. b6 L5 Y8 C
cyberpi.led.on(100, 0, 0)
5 |; A: a0 K( {' C4 _ cyberpi.console.println("開始語音辨識")
$ x# y k) D! l$ r, C" t, f1 n cyberpi.audio.play("switch")3 e. o, F5 I D- S
cyberpi.console.println("--------------")4 V- s) V- ]/ _4 ^* X+ s t
cyberpi.cloud.listen("english", 2)! O% |2 a! y0 a$ g3 Q1 G
cyberpi.led.on(0, 0, 0)4 U9 Z( N! @9 e& U) K
say = cyberpi.cloud.listen_result()
+ S3 O0 v' O7 X' O cyberpi.console.println(say)
* h' }5 I+ U- d" b3 t7 d' D6 C( L cyberpi.console.println("--------------"): }2 V: r4 o* U3 C( R- n
for i in say:
/ f; ?7 A9 ~# p2 H6 t& ` if i == '':
$ W8 c# M# x) O2 t7 d7 t keyboard.press(' ')+ [" M" \% ~9 F; E: t4 ?
else:0 r1 P0 T: i) H4 l$ m& }9 ?# s
keyboard.press(str(i))
4 R6 ?% w8 P0 M! `2 |) _4 @ time.sleep(0.03)
6 P% f# _. a- _+ k$ J% }% v. @& |1 ]" M3 e& g1 v) M1 n
matplotlib音量柱狀圖 0 v8 a0 ?) u8 d7 K& M2 v
import cyberpi, }7 C, f( {' ]2 y, O
import time0 k @; D' p- ?( q8 Q0 \, @
from matplotlib import pyplot as plt
) I, o5 c' ]. F
L7 y$ u$ l- b/ Z7 V* Q; I9 h0 cplt.rcParams['font.sans-serif'] =['Microsoft YaHei']
& Z" ?2 p' Q+ c! h* Dplt.ion()' M1 @# ?3 o+ _2 E, }) U. J4 {" a; w
5 p( I+ q* @- Y2 C& Fwhile True:
2 @) R0 P3 _& M$ Y loud = cyberpi.get_loudness()- I5 {" C6 l; ~, k' ^
plt.clf()
+ O- {! A+ K8 |( V1 @: i# I& ?0 V plt.xlabel("數據名稱")- n8 k- S& n3 l, N3 A& C
plt.ylabel("音量讀值")
0 N Q% G8 b* |/ z7 `. l; S! s y_locator = plt.MultipleLocator(5)
) @- B2 a* W. l6 P- T ax=plt.gca()2 T2 t' ?9 m# V% Q8 O* c
ax.yaxis.set_major_locator(y_locator)
; J5 c$ R) r! z q plt.ylim(0,100), m" u: }6 \) B4 p0 z# p
plt.bar('音量', loud, align='center',label=f'溫度{loud}')
R7 r& {+ g1 v plt.title('童芯派聲音感測器讀值')
9 f; o+ } a# ^5 O3 W* I1 d plt.legend()6 @) i! B( \( i/ m1 Q6 `3 y
plt.show(). U7 T# ^' z$ X9 a
plt.pause(0.01)
3 o+ S" q: f2 ]( `* d6 v* k8 [5 l% b `$ Y
0 ^/ }; K. j" e0 t K
matplotlib 多圖表顯示
. @$ S7 m! T& R0 q4 P. l' f. s& H% R7 Y
" p( J3 m" e4 E6 V+ U; tfrom matplotlib import pyplot as plt3 s3 R4 X5 w) S' q) v2 t3 p
import time
+ t5 d8 W) K0 X! T1 ]import cyberpi
4 j' g5 ]- p$ k' m. F7 d7 U 7 o; g9 `6 D3 J W }4 Y
loud_list = []
9 \7 N# O3 c0 x/ vbri_list = []7 r+ U* p( k2 R- `# P
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體2 u9 Q- x5 i5 t2 f' n
plt.ion()
" u7 q: m3 O- d4 q p, F* Aplt.figure(figsize=(10,10))
7 ~/ h; q+ j. s8 D; {6 fplt.figure(1)8 E6 S7 }( r, A' v) Q( z
x_locator = plt.MultipleLocator(5)6 f1 K J( d& @: t7 B1 X. L
y_locator = plt.MultipleLocator(5)
4 Q- q- _2 N1 ^& pwhile True:
3 F S' @/ G3 v# P loud = cyberpi.get_loudness()
" n& ?$ [$ M+ G& n) o bri = cyberpi.get_bri()3 o& _ f, c9 q; w% q; S. o8 s
loud_list.append(loud)/ P. y* ^, T! W- W% z3 b
bri_list.append(bri)
. o) x H8 X: M0 t1 K N battery = cyberpi.get_battery()
* E. _, G6 H5 r( F! ? size = [battery, 100-battery] E$ o4 j# m. l% K# o9 T) E
status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']& Y; t8 m: K g8 M3 i! B" q
ax1 = plt.subplot(221)
8 X% n5 v8 b( k W& C plt.title('光線折線圖')
+ k8 P y7 j/ ^4 I" A1 P- _$ b ax1.plot(bri_list)
; U$ T! Y" E" B) y, X ax2 = plt.subplot(222)1 ?9 |3 }; G) N# O+ y: `
plt.title('聲音柱狀圖')
; @* m- ?. C- ]3 }% T! w7 T9 y- D3 M ax2.xaxis.set_major_locator(x_locator)
5 T# `3 ]4 ^8 l1 k8 C ax2.yaxis.set_major_locator(y_locator)
- g! T+ n! \7 J/ _0 b plt.ylim(0,100)+ B/ D/ w) z K5 x9 F
ax2.bar('sound', loud)' \, Q: q$ M$ N( ~% B3 Q
ax3 = plt.subplot(223)( d, k) i# w, S7 ~, H
ax3.xaxis.set_major_locator(x_locator)
7 Y+ F) x0 {5 f+ [# J ax3.yaxis.set_major_locator(y_locator)
) J: h8 f2 ^" Q( ` A- b# ]/ T plt.xlim(0,100)
0 K B/ e- r$ q! P. X- T plt.ylim(0,100)+ o# t7 _: z* m5 v9 b& Y2 s1 A; D
plt.title('聲音、音量散點圖')" y1 v3 k5 W5 _
ax3.scatter(loud_list,bri_list), N+ @6 F! g( O% ]% C. w% c2 ?! J
ax4 = plt.subplot(224)1 Q5 z/ y2 M8 Q& p# D! J% w
ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})1 O8 u- ^7 A2 F3 D0 [+ x1 v) j- M3 Z
plt.title('童芯派電量')
4 m. G% P) B' ~5 { plt.pause(0.2)
; P4 k" |7 ?, R1 M0 H3 s% P plt.clf()
/ T) }$ R+ u2 e: b4 o, _5 N: w" [ if cyberpi.controller.is_press('a'):) } |+ t- |5 x* W# @ A; `
break5 z6 C/ ^7 R/ H+ K L% u
if len(bri_list) > 500:! E! l6 i( v# i8 D. b- c
bri_list = []* L9 p1 K7 F2 U7 ]; e+ n7 B
loud_list = []
1 y2 U1 q2 N- ] g% \5 a1 _" P: F4 p c q5 z! K7 D P9 r
|