本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi
/ X2 a7 a6 D1 H- y8 x1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
) i. k" g9 f* U1 i) T: s3 [& J
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載
5 c$ F% n8 _" r- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。( c9 {. N$ M5 Y# H; l
2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)1 u# y+ v. G. Z: J2 }
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
9 N% K0 @' n$ g% B; W7 j ! a- b6 I$ s, Q& m; J0 L
- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟): w. m% ?( l4 n, t" g) ~
4 L3 _; c6 D2 D7 T+ _& z& K: y- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。0 o7 W0 g- ~+ u/ p. X. U: x
& c7 A' l; U: [8 F( h x
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。2 |- V3 ~& D3 z+ i! Z) U5 w
- K; w+ T8 ]" G5 D/ y. B* Z7 A0 q$ \4 e( v3.童芯派第三方編輯器程式設計準備( t# {& [ t( [+ x1 {
- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。3 [7 k/ v$ S" Q* l: }
) i0 K' W: U) ^7 A V, W
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。1 o: G* ]0 O5 n
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。 E8 @% C. C9 r4 P6 P& `
- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。
# x: M+ L! G/ M( F9 |8 { Q4 q
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 1 C8 r, o1 p7 L, {
_1 C- |. P$ b* L: v; Q8 V
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。
! v y6 `8 n5 d [- u+ q5 | ) j3 o$ [1 k$ g F
4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。
1 j7 X; Q6 \! P5 K; [5.一些程式設計案例! J4 b4 Q/ w0 }8 S+ |& G
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput ! K: }/ q8 j- [! I: @
功能介紹:
& B, Q+ Y4 d7 `利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。
s4 u5 j. A9 o: n0 x U通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。
/ L+ H' T: b, K/ e結合藍牙模組可以實現無線滑鼠的功能。- B8 B" P' q# G( _' T1 t
1 y* ?; f$ z& j/ p6 n3 f' j" V
from pynput.mouse import Button,Controller
7 O# A: u9 d% y' ?/ Zimport cyberpi
- q4 K% i" f; H9 M9 R2 r. D. ]/ Qimport time
5 b- R' N4 k) ` k$ r& b( l $ F6 s: d) z5 Q, k
mouse = Controller()7 H. P1 G) `# q: e% B/ d
! x6 Y! h# F6 W
while True:
7 R" `6 A/ b6 J0 r" `' ` if cyberpi.is_tiltback():
& s# ~3 k4 H) l% N5 ^/ R' h mouse.move(-3, 0)- m+ M. X% D$ i4 y) s" ` _/ a! a. ^" n
print(mouse.position)
; u4 H8 V# m; C5 N9 x% u _ if cyberpi.is_tiltforward():
5 f- x, u8 H; L$ T3 h& H0 ^ mouse.move(3, 0) g, a, j1 D( e! S+ W3 n
if cyberpi.is_tiltleft():4 D* E0 N7 S8 s0 x0 ~2 o5 k* S4 t
mouse.move(0, -3)
0 _0 O% f) Z# L if cyberpi.is_tiltright():: z% W4 B+ S/ h* J/ H8 B- N6 w
mouse.move(0, 3)# l1 C' q, z) n6 A
if cyberpi.controller.is_press("b"):7 K( t. b1 P2 k9 }0 O. o) }
mouse.press(Button.left)
" \. K& _$ p) _8 o1 C h: i0 _5 g0 I mouse.release(Button.left)8 u z# m& U- c" L0 O/ ~# q. \
mouse.press(Button.left); o2 B$ T' a4 Y" }/ O( }/ t2 |
mouse.release(Button.left)
# U) V$ q, |+ g0 y+ n1 B+ {3 W/ M if cyberpi.controller.is_press("a"):
% T& v' i: U K2 [ t; _2 U1 O' k mouse.press(Button.right); g# G$ U& M/ X
mouse.release(Button.right)) J- v8 h, e) @
time.sleep(0.01)
# j, P( | E3 b! x8 l V
7 G7 v2 s6 n2 Q
/ o( M7 i' P5 E7 k+ u% v3 C4 R語音打字器
7 Y) p+ U3 S# p3 c功能介紹:8 k. {8 ?8 a3 o6 |$ a \
利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
1 C4 D& n( ]& w( A: Y將語音辨識的結果通過pynput在文檔中打出來。
! w; `) N' T& X, d) K. a" z該程式目前只能支援英文。
2 ]& y* n8 S- v) O: g! S# j. ]6 f% }- Q
import cyberpi
6 j$ j. Y6 v2 k2 [3 n+ c/ qfrom pynput.keyboard import Key,Controller
, ]; j( {$ s6 q* yimport time7 f4 a& t" X, I. p6 N6 S4 q$ S
. G# ~- H, b% x% o& e+ @" J/ f3 X& U1 ^* Ukeyboard = Controller()
& o `- J2 `* A2 ocyberpi.console.clear()3 a) M5 f0 _: z) j
cyberpi.led.on(0, 0, 0)
; p2 T) n p- ^, Wcyberpi.set_recognition_url()
0 N* U7 r9 O# D: F; h7 `cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得8 [- h U/ }; R$ {
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼")
3 P- B% q, Z% t1 A5 ~while not cyberpi.wifi.is_connect():2 G* y9 R' u$ Q5 Z/ [- K* X2 [
pass1 V0 [5 s7 E! l- [4 o7 R
cyberpi.led.on(0,0,255)
; K- `( L6 ~2 H0 `* _/ V, N/ Pcyberpi.console.println("WIFI已連接")
* U+ s9 I% W( k- c7 V" Icyberpi.console.println("--------------")
@5 c3 v0 |. a6 f) acyberpi.console.println("按下A鍵開始語音辨識")
" M. Y+ A3 A. H' iwhile True:
' g0 v0 v9 e' J3 @/ Q% M. r if cyberpi.controller.is_press('a'):9 @; r+ |+ m8 _: c1 `5 T
keyboard.press(Key.space)
1 v9 x& z0 h- T8 j9 u* h6 Q cyberpi.console.clear()* R, [9 @: s3 P" q* ^2 X' V
cyberpi.led.on(100, 0, 0)0 I) W' v6 @9 t+ J- s. O1 _6 r
cyberpi.console.println("開始語音辨識")
' f n4 M, o# s! ^ R% C9 P# j cyberpi.audio.play("switch")
# m" p6 p% [5 v3 [ cyberpi.console.println("--------------")
: m- N8 ?! O) a cyberpi.cloud.listen("english", 2)1 s7 n( r% q8 A) m* C
cyberpi.led.on(0, 0, 0)
" t/ r4 W5 u( A; n6 P say = cyberpi.cloud.listen_result()0 b5 h/ n6 J6 k& @1 m
cyberpi.console.println(say): [4 I8 G7 \6 h5 b
cyberpi.console.println("--------------")
7 s, R0 a n1 m j' k- m! M for i in say:+ f9 f9 }, m) B z. U2 d' P: `
if i == '':# Z D! u- a! R9 V
keyboard.press(' '); x" i$ l; d4 S, y
else:6 |& o6 ]8 _! R( \: q" a8 _; k x
keyboard.press(str(i)), O# a/ i$ x M
time.sleep(0.03)$ V6 s0 X+ q1 v3 w8 R* h0 `) s; K
. d- o% Q7 U" U
matplotlib音量柱狀圖
7 ^- D+ h5 Q6 z7 iimport cyberpi
6 r. ?; U6 f, Z8 |8 \7 q fimport time4 F& L: \& M8 l# O, u9 v
from matplotlib import pyplot as plt8 M& o" r8 V% A5 p& Y9 y: G
8 i* b$ Y8 F# U b% h zplt.rcParams['font.sans-serif'] =['Microsoft YaHei']
0 N( r2 g6 j& t' H2 R* Hplt.ion()
/ D& T6 N! y, o7 Z; i l( W
0 S% R& _) j! Q* t* Z: q1 cwhile True:
) G; ~# f* {- e# H7 u7 ] loud = cyberpi.get_loudness()
6 k0 ?8 V$ K0 F plt.clf()
$ V% Y6 M! k) R plt.xlabel("數據名稱")) ?/ B. t% U: O' U+ h
plt.ylabel("音量讀值")
. o x0 [0 M# q# \; o% M* b y_locator = plt.MultipleLocator(5)
- [1 u5 n! J- ?( b, ?$ Q5 A, b ax=plt.gca()6 U* e: v$ O5 \0 d
ax.yaxis.set_major_locator(y_locator)9 d. D1 |7 [9 W6 {
plt.ylim(0,100)6 s9 Z4 `/ k4 k2 T; Q8 W
plt.bar('音量', loud, align='center',label=f'溫度{loud}')) K5 K8 T% q' T- P- G6 q
plt.title('童芯派聲音感測器讀值')
u7 e% x7 K T1 L plt.legend()
1 R* [ {% \8 \" ~ plt.show()
/ f$ ] c% v) } e( k& R7 P plt.pause(0.01)
; M5 o2 z: B2 W. u J
: u& P u' R3 q& K& N, O1 |& r2 m: S4 F8 d X0 G# ]
matplotlib 多圖表顯示5 B- r. d) l7 p/ ~) b0 X
5 h5 G. z7 z0 q D
from matplotlib import pyplot as plt; j+ r. x8 c% F" w) F! G$ J
import time# O8 q& k0 y; m5 z
import cyberpi! o7 ?& o/ n, y4 Q+ v
& V W5 O. t) n% |loud_list = []. N6 {% U" z! Z) }- ~0 ]8 ?9 `
bri_list = []
( k# X0 {! l: f) J, aplt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體
; t% { u! g0 t: o7 u- eplt.ion()+ P- P3 Z3 @/ U! b/ T# G& m
plt.figure(figsize=(10,10))# T7 f5 X2 V. D3 }% T7 R, q4 D
plt.figure(1)
' T6 l) F9 ~6 }3 Kx_locator = plt.MultipleLocator(5)
& C3 Y3 V7 n( H2 D: C: R, F O5 ]y_locator = plt.MultipleLocator(5). x* J. v$ ?9 E$ p" C
while True:
) w4 E9 I* V- W6 ` loud = cyberpi.get_loudness()" c9 v$ w. }2 O/ ^$ a
bri = cyberpi.get_bri()& a1 P' _6 H: _4 P
loud_list.append(loud)
( w% A& o; Y* X, g" n bri_list.append(bri)
& W: o2 }& d0 w4 g. L, l# ] battery = cyberpi.get_battery()
/ G8 C- t$ w3 t# x size = [battery, 100-battery]
v8 g! X, H: @6 X/ E6 M status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']
9 u% q3 M1 `8 t/ _. o8 s9 P ax1 = plt.subplot(221)
& ~( B4 V9 Z6 X' a ?8 ^4 P* @ plt.title('光線折線圖')
/ k, p9 x! P3 C5 E) g, q* y ax1.plot(bri_list)0 Q% r* g' x5 K0 N' {* g" {, t+ J
ax2 = plt.subplot(222)
+ E( C9 R; j3 u plt.title('聲音柱狀圖')
: C" e5 v6 z0 a" ^" i$ l ax2.xaxis.set_major_locator(x_locator)5 j, y. d6 \. M* P! P) X
ax2.yaxis.set_major_locator(y_locator)
; ?$ T7 H) f& n# K$ ] plt.ylim(0,100)
% U5 ^5 H( x2 s9 t9 e5 B ax2.bar('sound', loud)
+ J$ ~! c4 }. B7 y2 C ax3 = plt.subplot(223)0 V0 C! e5 n" e- V' s$ t
ax3.xaxis.set_major_locator(x_locator)2 ` a1 n) ]' Z- y; F7 ?
ax3.yaxis.set_major_locator(y_locator)$ W0 S3 L5 ]* ?0 M, K
plt.xlim(0,100)
! i% s7 ^8 u# U plt.ylim(0,100)
( H0 R/ E! m- q) F& q plt.title('聲音、音量散點圖')
! O) U% J* U) z4 d4 ~ ax3.scatter(loud_list,bri_list)
5 A7 P/ N. l6 j+ ` ax4 = plt.subplot(224)
5 B0 l/ Z$ R# n8 B ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
! S" p% r3 i* ^* D/ e plt.title('童芯派電量')& @* ^0 x0 P, E S# z! k, K/ i
plt.pause(0.2)/ P& b3 O' z } q: F3 O
plt.clf()! Y1 m" ]# {& ]" o& t0 Y T
if cyberpi.controller.is_press('a'):" B7 P/ U; A' [$ T7 d
break- h+ o: r+ ]9 z/ z% H
if len(bri_list) > 500:
- ~* ~: J. y6 h& G) q" J' U bri_list = []8 i" Q& c2 R, X( g
loud_list = []
0 v# v! _9 X5 O6 C
8 ], j2 M$ d* i3 @ |