本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi # c5 o9 {" y% k
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
# k8 D6 e9 _2 ]. L+ q+ ?
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載 8 c i% Y2 x, {; ^' u
- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
; \: d. b6 w: b5 V9 a 2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)$ R8 v; z/ `1 Q; b$ {! d* w+ |+ w
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
' F7 j, @$ `! X% `& i
+ y% P% o+ ?, @. ?- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
" X6 f1 i) l d% k
3 U) S8 g0 e; c$ a- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
2 D( h m" Y8 S+ A2 R) n& W
2 f+ F1 l3 [3 B! ^+ |- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。+ z6 J3 L3 ^' ~4 e% W
7 K# d3 D8 S8 o2 k/ ]
3.童芯派第三方編輯器程式設計準備5 L+ ? A/ S) l$ N
- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。
* }. s! o7 q0 T% V0 c 8 j# [( m1 f9 A# F$ t
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。$ l5 N6 X9 A' v
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。 3 J# R# H, z9 m O
- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。
+ H6 T d$ Y3 W; O) v. m- [
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 ( V' `4 `- L$ F3 u! ^
4 X( r m7 q4 u. ~, l8 c: ]5 j# t: u
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。0 E; b4 g$ u+ e
3 t8 E( k" a0 A% }+ ^4 y4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 8 }3 W, ]% R' p$ D' V4 F3 _
5.一些程式設計案例
! m3 k- i. `# F! i. A E/ c7 Y$ c童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput
( c3 h/ H" E/ M% A8 |功能介紹:
5 [+ m5 c6 X4 S( b u5 o' B. X利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。1 M: R- f% m1 G i. B
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。6 F0 k2 S- r, v, i8 a5 [
結合藍牙模組可以實現無線滑鼠的功能。, _4 R1 d* c( \6 a
4 X9 j: T. _7 |8 gfrom pynput.mouse import Button,Controller
q! J' K7 H0 |: g. ]import cyberpi' W" x i: w) ?! o$ z" w) l0 T
import time$ L0 L( j- P3 F6 v
' S* N( G v" V% D% h2 L
mouse = Controller() h g- h; J- S3 c; ~
9 s2 d8 n3 C* d8 j- {: s
while True:8 Z$ A& n0 [5 b2 i) |
if cyberpi.is_tiltback(): |) q+ {# u( v/ g) Z3 P- e! l$ r8 H
mouse.move(-3, 0), W2 D- g ~( q' Z
print(mouse.position)4 z, Q- v! {3 \6 {
if cyberpi.is_tiltforward():2 T/ E1 b* Q$ c" }! b
mouse.move(3, 0)
$ M; s7 }+ K' p% T if cyberpi.is_tiltleft():& z, w- \$ ^/ w' I+ o/ w( q
mouse.move(0, -3)4 u ^& Q$ ~/ Q" J
if cyberpi.is_tiltright():
( N( @0 f- `, M% @3 X% R* y mouse.move(0, 3)
8 A7 g! w* @3 @9 m( m8 E) G t3 C& I if cyberpi.controller.is_press("b"):
$ }2 k; i" u7 I$ N# e4 _2 k mouse.press(Button.left)' ?* w( ?2 h3 h4 p/ m6 y; M
mouse.release(Button.left)
# d; A7 D; e* ^3 a mouse.press(Button.left)
+ n2 P# \: Z0 E) Y mouse.release(Button.left)' z2 I2 [" L% |
if cyberpi.controller.is_press("a"):8 N6 h& Z1 Q6 w* Y0 Q
mouse.press(Button.right)
: G- H0 ~3 Q6 v. o mouse.release(Button.right)
* d& K( E8 s4 n/ }' T6 f* T time.sleep(0.01)
0 T3 j0 P7 k& x4 Y! `, [4 T( ?3 y2 W2 u1 J+ L" v! b
8 L) v8 }1 k. J/ x k
語音打字器
6 W. U0 K$ }; j% V; h+ p( O功能介紹:
# E8 [/ d, m& [& z; J1 q' [利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
3 }7 X% b# c1 T將語音辨識的結果通過pynput在文檔中打出來。
& k) b ]& ]( N( I( W該程式目前只能支援英文。
8 Q9 ~+ X1 j& z6 I* N9 d! W
. O, V( c3 d! X, I0 }import cyberpi- g7 c9 L* y% `! S
from pynput.keyboard import Key,Controller
: D- x2 B( i/ V; p5 @import time
* ^- A+ u$ _" l2 {1 ?/ ?" W8 ~ 4 a! `3 W* s0 P0 p
keyboard = Controller()
" c+ X- G1 c7 o! o( l# |cyberpi.console.clear()
. T+ @* n( o/ Xcyberpi.led.on(0, 0, 0)
1 S T( b- q; I) W) p' Mcyberpi.set_recognition_url()
$ U3 G* C( b; C" j7 _cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得 D5 u% `$ F* O1 ]6 F# M5 d
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼")9 S; c3 H. v' b# J% E/ Z% }
while not cyberpi.wifi.is_connect():
1 O3 d/ C; Y; s/ A6 i% V pass' r2 J% S' r, Y* }% m
cyberpi.led.on(0,0,255)
& R; @/ c/ j8 S; }! r! b% e% C- ?cyberpi.console.println("WIFI已連接")' ^" w9 P7 Y* ~) t% ^- R. ]! ^3 b4 g
cyberpi.console.println("--------------")7 ^" Y7 Z6 N4 i o8 J# `2 o
cyberpi.console.println("按下A鍵開始語音辨識")
! @( M; C; z& s7 F8 Ewhile True:7 o5 m8 P( E* _4 m
if cyberpi.controller.is_press('a'):
+ f% Y6 l* j L' n q7 }4 h keyboard.press(Key.space)/ `8 u, V" X" X! R
cyberpi.console.clear()$ F1 n% \# _# |3 R+ Z
cyberpi.led.on(100, 0, 0)( d( \1 @7 N8 ~/ u+ ^& q
cyberpi.console.println("開始語音辨識")2 D! K1 d7 r/ ]) ?- ]8 Q/ d
cyberpi.audio.play("switch")# H. G/ t; `! m- O
cyberpi.console.println("--------------")
8 [! F/ S) Q! O5 W8 z cyberpi.cloud.listen("english", 2)
0 q8 ]% t6 X' r cyberpi.led.on(0, 0, 0)
$ J) Q' Y# X0 ^ say = cyberpi.cloud.listen_result(); Z: ^+ X7 H' k3 @7 M4 R+ W; a
cyberpi.console.println(say)
* y% o& Q+ ]7 p' o cyberpi.console.println("--------------")
8 X5 e1 p9 b9 F O9 N2 ~8 i for i in say:( P% j4 ] O* Q# k0 p w
if i == '':
; B" e5 l- j- T) Y; l5 l a4 H9 K keyboard.press(' ')
! a: X' o/ Q5 f else:8 x4 K6 P5 R1 y1 W" r; ]" i
keyboard.press(str(i))
) J8 b" g. B) W* A# j) g ?3 V time.sleep(0.03)
- ~& K, \7 o' @* j, G3 X& T# }# N) N9 j! N
matplotlib音量柱狀圖 ) w: y( T1 [* G" V
import cyberpi& m& L5 f! n- T, I
import time; y( L; n; E9 {2 i) G) E
from matplotlib import pyplot as plt6 j: x, E2 k& A8 h# ]' ~
# J( L1 `% |1 D2 Y, r- i1 V8 Y/ [% Q
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']$ K5 t) `3 _0 l, \+ Z
plt.ion()
& _5 k# W2 A' Q# Q 4 q. U/ K M. W+ ?
while True: Z G: W+ H( Y9 O& v1 I" b1 Y
loud = cyberpi.get_loudness() y& S# O- K9 C1 f
plt.clf()
" m1 S" q4 N( G- w5 S8 c3 N plt.xlabel("數據名稱")- w$ J$ F+ O9 G: P
plt.ylabel("音量讀值") K, L* Y+ z! ?- O' Q
y_locator = plt.MultipleLocator(5)$ s. S& `! w8 T$ w* v+ }
ax=plt.gca(). n- m; ` B3 L( V
ax.yaxis.set_major_locator(y_locator); W3 D+ a5 ?+ A1 A
plt.ylim(0,100)" \& ?4 @( u+ j% S d
plt.bar('音量', loud, align='center',label=f'溫度{loud}')
3 }/ X6 O* _; S: B2 w/ Q+ n4 b plt.title('童芯派聲音感測器讀值')
- ^/ D* o) D- A/ B5 j6 H& t plt.legend()
; W; R! J" v+ }7 T* Y plt.show()
1 D' v3 H8 s; e. a0 H( I# n) J3 x plt.pause(0.01)6 g m, k7 A$ D q& E: k$ P
0 g* t# m4 V* j/ g) x# ?: e6 n
" k8 j9 E( ^$ o) ^$ I3 X p; v2 Vmatplotlib 多圖表顯示- B- M# z! f& Y* C* {
) {4 C2 [; r: W3 A Ufrom matplotlib import pyplot as plt' D9 c. r" n. K& N0 L
import time
$ \; k+ c2 a; t Eimport cyberpi
. G% ~' H+ A3 T9 `7 z
5 g; C$ p1 Q; t8 Uloud_list = []
9 f" p9 M T4 z+ `% |bri_list = []
- f" W0 ` {7 aplt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體( q- J. T5 O9 R) o& l+ g
plt.ion()! p' }6 ~" e) W
plt.figure(figsize=(10,10)), w+ T6 A2 s& _
plt.figure(1): `" x1 e2 L" N/ u
x_locator = plt.MultipleLocator(5)
- P" C1 A1 b3 G7 q% M" j" Xy_locator = plt.MultipleLocator(5)
# Z# _5 k# w7 H, s3 Q9 iwhile True:
! ?" g% ]6 Y d/ S, O4 Z loud = cyberpi.get_loudness()
" L, ]. p7 p$ G0 H; u9 p bri = cyberpi.get_bri()% L Z9 L0 ? D+ V! |/ C; ]# I
loud_list.append(loud); l" ^8 \" C K2 ?. r
bri_list.append(bri)& e% y2 o( l/ I- M! h
battery = cyberpi.get_battery()
8 c0 @' h2 o/ O) `2 {8 w2 @) g2 i size = [battery, 100-battery]
. C2 O5 t) b- F1 w3 N status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']" h* t, j0 v& q
ax1 = plt.subplot(221)# M. y( F" \( W+ ~" i& d* ]* W! k h
plt.title('光線折線圖')
" F3 i# W2 O# y6 N% u ax1.plot(bri_list)2 S& E/ i# B8 z% M& o) r8 k
ax2 = plt.subplot(222)5 Y9 ~& H \8 M8 h( C, E1 B
plt.title('聲音柱狀圖'); a* A: }( k6 P# |0 Y! c
ax2.xaxis.set_major_locator(x_locator)
+ h9 m) Y1 E- }7 _; } ax2.yaxis.set_major_locator(y_locator) @, j6 u0 M$ c& a- n, V
plt.ylim(0,100)5 S7 H# z1 x% A. F6 g6 Z5 z. I
ax2.bar('sound', loud)/ N6 C/ o4 r) ^* U
ax3 = plt.subplot(223)6 {5 e* i& {- w: D# H2 f5 n
ax3.xaxis.set_major_locator(x_locator)2 H) u* Y# Z8 V
ax3.yaxis.set_major_locator(y_locator): a5 D+ C6 c \9 i8 i
plt.xlim(0,100)
0 d3 v1 C7 L f: x+ l' y plt.ylim(0,100)
3 o& z/ l3 P! F/ j k0 {/ ^ plt.title('聲音、音量散點圖')
; D7 u- b) ]4 Q( v" o& v ax3.scatter(loud_list,bri_list)0 n, A9 p' i# p2 W% x$ n/ f" v3 T
ax4 = plt.subplot(224)4 x& V; H/ p: R/ ?2 G5 X& [$ G
ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
, |* M. h9 I, I/ {# { plt.title('童芯派電量')
- t1 ?" r- [* |+ ]: k/ \" X plt.pause(0.2)
9 e2 \2 k2 g s2 T( g8 i8 O# u% n plt.clf()
! X, A5 z. b6 f if cyberpi.controller.is_press('a'):/ ~8 N' \7 L, w" i5 u: Q
break
8 f5 T# `5 q% v: | o if len(bri_list) > 500:/ t: e: v2 C- q7 C5 N6 I5 q1 M3 G% g
bri_list = []
' k: [. P6 V& | t loud_list = []5 j5 D" s) p: O' H2 @2 g) |2 ]
3 j$ M- c' M J& u% j+ V4 d+ _
|