本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi & `( Q" s. t. D2 c- p5 g0 M* `
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。' S+ Q L6 u) F' N `8 @1 S
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載 " k2 H/ U6 H& w ]$ W' Z
- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
3 t. c. |$ V& o+ Y# O9 t! n( W 2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)9 }+ J& h1 |9 m( f+ G
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
* @0 f$ J F4 W + L- _; F% X. V) P- Q
- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)5 y1 ]% P" n2 ]/ Q
. N3 e z9 l" v2 p+ X2 s
- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。6 \& L# m1 s; I. f- {
# s @2 n. Q4 Y# b
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。' L4 F4 A. M+ {0 p
! T4 n0 p L. w+ x, C$ Y9 S
3.童芯派第三方編輯器程式設計準備, o- x, r. s- Z8 H: a; ~7 ?
- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。
: I/ `2 G& V# F4 } L 3 k7 c- Q2 W0 A
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。6 l& M& Z8 i8 E, I) \: z6 Z2 C
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。 9 Y- P% D0 ^. E( A
- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。
8 o( S# V* U+ u. G2 t6 t/ v/ n- ^
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。
, ?* J e4 ^: l: l# W
' c8 B/ e( O, l }9 m- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。
; Y) R1 v. i6 q/ N3 G% [4 w + g6 M3 @. N9 w# V
4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 0 l, b* ]: z) Q8 d
5.一些程式設計案例
5 Y9 O# `; S5 W( l: }童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput
: E* |9 k) d- r功能介紹:* |4 K. n5 f0 q3 ?7 `
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。. v) Z2 {' W; v# |
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。5 c) R) ]; Q7 c U. [" G
結合藍牙模組可以實現無線滑鼠的功能。
( C0 e. Y- r, ^; T: ~2 l
! n3 e2 u. H* H. U ]from pynput.mouse import Button,Controller; v2 G. X0 i! {( L0 X/ \ U
import cyberpi
9 k" J, E+ A$ Z8 {import time: U- u+ N: Y& K+ }9 i' }4 X
, _/ y, e, x. a+ m O& r( ^mouse = Controller(), d- y0 s- m6 D
1 g5 r3 V& S. h3 Q9 n" ewhile True:
3 K# D4 t' p' k if cyberpi.is_tiltback():! {6 e/ `, n3 q& d! t" e
mouse.move(-3, 0)
0 f9 n+ e" s# e! l+ n( s print(mouse.position)
X7 t' } O6 l if cyberpi.is_tiltforward():; r, x$ ]: W1 J: Q; |7 F8 U7 N- R
mouse.move(3, 0)' y. w& I/ t+ ^4 q0 v6 U
if cyberpi.is_tiltleft():
8 e/ a! f! |, E( M/ R% G4 d mouse.move(0, -3)" p$ a% O4 W7 Y$ ]
if cyberpi.is_tiltright():
4 X* d) u, i8 ~. Q: X4 { mouse.move(0, 3)
7 s9 D8 u7 {6 n0 t, e( } if cyberpi.controller.is_press("b"):7 n% i+ P! Z& ]
mouse.press(Button.left)$ u' Z- }% |5 h7 ]
mouse.release(Button.left)& p9 V, c$ g: M4 y/ P
mouse.press(Button.left), o. Y. A2 C* E5 i- C! j% C
mouse.release(Button.left)3 n$ l3 ^5 O' A: z
if cyberpi.controller.is_press("a"):+ C* h2 }2 N; j5 |! Z* r3 }% M) B
mouse.press(Button.right)
9 l, F5 d4 ^! z2 S: d6 x4 t mouse.release(Button.right)( y- |7 S% c! b$ D
time.sleep(0.01)7 y# u6 l5 O7 i% H! S& x8 @1 R
2 _$ e. S1 u' V8 k1 t
8 z& j1 _ A2 T( v0 t3 S v0 I語音打字器 / G: C& q0 v7 Y% w
功能介紹:3 z b, A6 S: {* j, l4 L. u9 d; O. X
利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。) ?4 u! I' q: @0 ?" O
將語音辨識的結果通過pynput在文檔中打出來。1 N' c8 G& ]/ V" M
該程式目前只能支援英文。
v( [* v/ \% v0 L. Y& G& |0 b" @6 C
5 R% j6 Z% \3 e0 t( g; ?- c6 x1 h- Bimport cyberpi
! \3 I8 U5 C0 | D' ]from pynput.keyboard import Key,Controller
; A; L4 V& S4 J9 pimport time5 y r1 m$ _1 p* {
' e D+ X# P/ N* A
keyboard = Controller()
4 {- l: L( J7 ~6 |# G' P/ kcyberpi.console.clear()1 q5 U* m4 `. \. {9 p5 B' A6 N
cyberpi.led.on(0, 0, 0)
+ h# |5 \* w$ Kcyberpi.set_recognition_url()9 O* @6 F. S6 f( A" `+ Y. L7 ^
cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得6 _, O3 d9 z* r' \* J, `
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼")
/ y0 r S5 ?. Hwhile not cyberpi.wifi.is_connect():
1 B+ ?& u' [4 W# J4 s* W3 S/ ~1 G pass
1 A0 l F, v( P; j9 F) n/ W/ qcyberpi.led.on(0,0,255); Y7 A% ~& Q! V
cyberpi.console.println("WIFI已連接") J3 l( t$ J' E% w( y7 N
cyberpi.console.println("--------------")7 h7 Y6 ]0 A( g, g
cyberpi.console.println("按下A鍵開始語音辨識")
4 p c# t% s( j2 B! F* t# a" t: Kwhile True:& I1 F( Z& }2 O8 D" k2 z
if cyberpi.controller.is_press('a'):
: P1 M: k. D$ E. B5 T- p keyboard.press(Key.space)
+ v$ ]: G# r& Z) N0 j: R9 z+ F6 ] cyberpi.console.clear()
* h) v; E# H" l cyberpi.led.on(100, 0, 0)
8 ~# D( B: X& h# R* B cyberpi.console.println("開始語音辨識")
! w9 w) |1 _5 l" Z5 X2 u' k# Y& L5 ^ cyberpi.audio.play("switch")
/ D$ o& A" t5 g: [( B5 Z5 X cyberpi.console.println("--------------")* B( o: G1 l4 Y* z0 q/ T% B ?
cyberpi.cloud.listen("english", 2): p$ ~# V/ Z. D; X. g K
cyberpi.led.on(0, 0, 0)! l9 ~3 M- {% j1 m7 u0 S$ x" T9 W- @
say = cyberpi.cloud.listen_result()
' T6 l( \# u% n6 H Y cyberpi.console.println(say); F/ {! j z& A% w. T
cyberpi.console.println("--------------")1 Y% z8 N3 n+ L
for i in say:
3 W# K6 v" D S: ]6 J if i == '':
1 I4 l, W, b) Q& W( ?: [ keyboard.press(' ')- }" n+ q! B& {4 @5 D# t
else:+ t+ F8 E2 {. t7 |
keyboard.press(str(i))/ g8 t' A1 @5 c3 v! c+ _
time.sleep(0.03)1 A5 d1 ^ G" O' ? g
3 F1 `2 k2 a& ^matplotlib音量柱狀圖
6 V0 I6 A7 R1 Wimport cyberpi9 M3 K. d; i3 Q6 J4 \+ w
import time
9 \$ S" R, B' I/ B6 Pfrom matplotlib import pyplot as plt
4 [: Z" u. N7 X& Y4 h M Q " m' v$ ]6 [! N: \( a) X% v
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']% H6 o0 c# D/ W5 ^0 ^5 `
plt.ion()3 j3 q2 w# E# Z3 [
! N7 |+ }7 k$ a) E7 w
while True:
- J' W: K% E8 L) Y loud = cyberpi.get_loudness()" }1 h! V0 O S+ A8 @
plt.clf()4 w, N" s% s# O% {2 i
plt.xlabel("數據名稱")0 F; f- B+ M- n7 G$ P
plt.ylabel("音量讀值")) D. m1 F3 o/ b H$ W& n
y_locator = plt.MultipleLocator(5)! ?" P- r3 r9 d0 \/ O6 v
ax=plt.gca(). }, I6 U# j6 I% Y( u
ax.yaxis.set_major_locator(y_locator)9 ^ V8 j9 i6 x$ f$ j/ Y
plt.ylim(0,100)$ _8 i! M. @! e2 Z
plt.bar('音量', loud, align='center',label=f'溫度{loud}')
* ^# |; T9 k* @0 R0 F plt.title('童芯派聲音感測器讀值')& A% u, s" \: F
plt.legend() [7 A$ V2 u* j0 h2 s, O
plt.show()
0 r' Z. I6 z! e5 ^' `, Z5 G plt.pause(0.01)" I8 Z/ K: [0 W. @ p$ ~' u# Q
+ Y" H1 w/ Z6 ?4 b
. r: k* a4 M1 |$ R/ l3 ~- Q
matplotlib 多圖表顯示 X% |" `- v* w* Y6 w" o. k
- N: Z% q' e; s; j+ g$ y5 B. ~) xfrom matplotlib import pyplot as plt
; q( L- R7 j+ A7 `/ C- Gimport time
, j9 Q; y7 w+ ]" V: K: ]import cyberpi R# K! `' u1 X& c1 _
9 y2 S3 |7 z# N R
loud_list = []
: ^# o2 A9 t( i* s$ ~0 g; L) s- [bri_list = []
6 X7 s( Q; I/ j( d, F' g3 {: N zplt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體. w. ], x0 O, r" r! X( {6 v3 L% V& C- W
plt.ion()" a& }& D# y8 O; a" A- m
plt.figure(figsize=(10,10))& e. z- ~! J5 Z3 X) F, r
plt.figure(1)
- D1 O8 U0 {" I2 K! X8 Zx_locator = plt.MultipleLocator(5), M2 ]1 {% H0 z
y_locator = plt.MultipleLocator(5)
8 D# \! f, }! n# kwhile True:
& X" F, Y1 `8 h, B1 Y3 @2 E loud = cyberpi.get_loudness()
0 q! J7 I+ J: D% } bri = cyberpi.get_bri()- G0 b1 J7 X; @% Q l
loud_list.append(loud) ~* H) s1 [. s- z, Q
bri_list.append(bri): H. R9 v8 v$ S+ n. a! n
battery = cyberpi.get_battery()' f4 L/ y6 I# e% O7 z
size = [battery, 100-battery]8 O. d$ I6 F# ~7 G
status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']
2 c8 T I( T' q. M ax1 = plt.subplot(221)
$ a9 Y/ Z3 S! |5 P A: Z& d plt.title('光線折線圖')
9 c! n. v. [/ v2 H( r7 L5 C ax1.plot(bri_list)8 d+ r2 B, i- s; N
ax2 = plt.subplot(222)5 U/ L0 }% C4 O5 W9 {! O/ _
plt.title('聲音柱狀圖')
: z2 a4 O7 P! o, w3 [/ c ax2.xaxis.set_major_locator(x_locator)
0 S0 T7 ~6 ?$ F1 t$ R4 L ax2.yaxis.set_major_locator(y_locator): V5 z4 E- }3 F* W5 K
plt.ylim(0,100)
' R! ~! Q* }9 Z( J' D4 k# { ax2.bar('sound', loud)
. @7 S. [: V9 T( `. n ax3 = plt.subplot(223): t" J) j+ f# x
ax3.xaxis.set_major_locator(x_locator)
d/ O" u3 G# i; N, V ax3.yaxis.set_major_locator(y_locator)
( F! i) q3 H& ~7 H$ v+ a# y, p4 J plt.xlim(0,100) k+ [9 C! j6 {: ?( T: D1 _/ \
plt.ylim(0,100)
* }0 [, u$ j- U2 v+ s+ g+ x plt.title('聲音、音量散點圖')0 B, m0 g6 ]6 J7 G8 d2 N8 m, I
ax3.scatter(loud_list,bri_list)
, `5 U6 v1 N4 g- J+ N ax4 = plt.subplot(224)2 Z5 }! H7 h6 A v
ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
- Y" Z0 e" \ I: }& W plt.title('童芯派電量')+ j+ }+ Q0 L- x& E$ b& q
plt.pause(0.2)' ? F& ^( `( [6 K
plt.clf()
G4 p; I3 z3 o' V( r' Y) x3 Y! R if cyberpi.controller.is_press('a'):4 F2 b7 Q' @- S; |! M
break+ ^, L+ M# L: u. f: M9 V' M
if len(bri_list) > 500:, ?. |- N! Z/ M0 T5 \9 b7 Y
bri_list = []
2 c7 g9 O* J; o1 D5 t+ ^: ~ loud_list = []7 e, [" ^; [, |, ~: z
" T0 j6 M# {# k' o |