本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi
- a+ c6 E' y9 Y1 [- g( I: N, ?1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。7 H! L; u: Q, Y7 K2 i8 B; e) x+ w
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載
# v! F4 A) U7 J6 y- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
. y( }- F' y: j; w/ @8 R, }2 J 2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
) |) L ?# V3 P, v h' y
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
3 `2 o/ |* T/ K8 Y! L 0 t4 t: A4 u) f
- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
* a! @- |8 V1 R- f- x ! e4 i. i# s8 h7 t- W4 b# e# \
- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。; H0 ]# \( L* p# V/ l5 o8 y, z
/ z/ w; l' r* L8 k6 Z1 y+ ?2 i- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。5 S4 \& r" B+ \3 M3 C8 b2 y
. m" ]/ l9 I0 r! ^% V
3.童芯派第三方編輯器程式設計準備
4 T: |) r, Q* Y- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。* _' J% l3 T; |# s
! c. ?# Q' x* g2 w- P7 t9 ?+ M- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。
Z) a" z: @& T6 J4 X# E1 X. A
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
) X/ K9 e0 @0 u- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。6 s& f3 b( g$ I3 T
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。
; R1 J7 k6 C! j( e# e& Z0 `- m" ^. t* ]! b: J) r5 d) Y
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。( A. a! R6 Y! P# U4 e+ N4 ~
8 _" s2 ]" U- ~4 q s# M4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。
% Y8 b4 j5 W" j$ p; |5.一些程式設計案例! y7 i! q( c5 S; K# D& ^) I" P
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput
3 f W1 d Y* u7 i功能介紹:/ ?9 k' I. z0 A3 w* V
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。 M. f) A C {5 ^3 D
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。3 R2 h ~# Q+ Q* N( X
結合藍牙模組可以實現無線滑鼠的功能。
) z9 Z$ H- k9 ?4 R6 G V7 _6 t3 u& o, h' t' W- @5 D) G
from pynput.mouse import Button,Controller, R2 q% T! U% @2 I4 Q% g ]
import cyberpi& q2 U: l, @/ k% u- K7 Y b
import time8 P$ x# T% s" k2 D
6 d. ~- C4 H& m6 B1 c1 c
mouse = Controller()
# A0 C( J8 b5 O; W. f! V : ?* ^3 h9 q+ w: K5 n* A+ F
while True:" ^9 ?: o! [2 Q& e; ^
if cyberpi.is_tiltback():
7 N7 F" N6 z2 u mouse.move(-3, 0)6 k2 q4 e6 y9 f; C, o
print(mouse.position)
1 F B {+ P( _) d7 U. A" N$ c0 g) M9 I if cyberpi.is_tiltforward():
3 e3 K; ?& q& f8 a5 u9 a; L mouse.move(3, 0)
1 ?1 ^( b, ^+ u& l' U% N7 Q m if cyberpi.is_tiltleft(): K, p% r" _7 a0 h" ?4 ?, H
mouse.move(0, -3)
9 Y3 g- Z5 {7 P% Z, c if cyberpi.is_tiltright():2 J7 |( g/ E4 d5 m
mouse.move(0, 3)
1 W& U v2 P& @% [ if cyberpi.controller.is_press("b"):( f; m5 a) s8 G1 I, R* A% ^7 O: F
mouse.press(Button.left)' z. a @' h0 G! V1 _. y
mouse.release(Button.left)4 J4 ?: c7 M4 s+ F$ a! ^
mouse.press(Button.left)
- a( S* F2 X! k' O mouse.release(Button.left)" a n8 U% L1 m* o
if cyberpi.controller.is_press("a"):
- s0 l. J4 e7 h3 ~3 M mouse.press(Button.right)
8 a6 `& j( w' u, K, {# ]' n9 I% E6 N mouse.release(Button.right)2 J2 F0 v: e' M( w) \8 n6 C) `
time.sleep(0.01)
; i# m0 [& R6 ? d a! S) x [7 N
7 ]) T1 r* J7 j3 N+ \: p6 o I" a$ W
語音打字器 # G. J' T p8 y+ q/ }
功能介紹: s' g8 k) K' O, q) D
利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
; R8 z+ N7 B3 t' y9 H* `將語音辨識的結果通過pynput在文檔中打出來。
+ {; r) o0 N% B7 x) t& L6 [* X該程式目前只能支援英文。
, v/ t! ?& C: a) L0 t' t! g) M3 c, D; ]; D5 }; \
import cyberpi( Y) p/ K3 h* m
from pynput.keyboard import Key,Controller
% o+ f8 E4 H8 [; Mimport time+ |( m7 W* [7 G. M4 n
" G. } G8 Z2 f# Z
keyboard = Controller()2 T+ g% n: d* d. T/ G
cyberpi.console.clear()
0 h7 J) [- D i x" h$ k6 ]cyberpi.led.on(0, 0, 0)
1 R$ W* K8 K/ M. y6 fcyberpi.set_recognition_url()# \4 _; @( C' [% M. T
cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得# ]3 Q% w3 u( U
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼") b% C) X! z0 Q, k( }7 C
while not cyberpi.wifi.is_connect():
: W( f/ O) F" T( ` pass
8 O/ C. v* c& S5 l: M. _cyberpi.led.on(0,0,255)1 x% u; k4 l2 ] c- P' m
cyberpi.console.println("WIFI已連接")
0 h9 E: d7 `- Ocyberpi.console.println("--------------")6 p2 K: _& ~+ d" p
cyberpi.console.println("按下A鍵開始語音辨識")
& Q: W* O: [2 |7 C0 [- Bwhile True:
* @, g# f6 U8 }1 K! c if cyberpi.controller.is_press('a'):
]/ H/ W. e, H7 a1 H: \, l keyboard.press(Key.space)
+ Q0 T) O& ?. k- \5 V% m cyberpi.console.clear()
1 b9 |) I) o, a3 k+ X+ @6 p cyberpi.led.on(100, 0, 0)$ b8 v0 T+ U. ]# \$ C
cyberpi.console.println("開始語音辨識")9 E2 E$ k$ I, Y i7 O0 Q
cyberpi.audio.play("switch"); Y& D' I' r) T; J# P9 x, _& }. \8 I
cyberpi.console.println("--------------")3 @$ d" k. Z7 Z
cyberpi.cloud.listen("english", 2)
^! [' B9 j6 u7 T( e cyberpi.led.on(0, 0, 0)
/ h: t$ W- g% s+ i say = cyberpi.cloud.listen_result()
& N# F; i9 f" R& E1 f1 A. f% _* C! {$ o cyberpi.console.println(say)1 m; o; v' c- n) ~7 t3 @
cyberpi.console.println("--------------")/ @! D+ z* I. l' d
for i in say:
9 }, q a" R+ Q if i == '':/ h# G3 ]$ L' e( `- v! z1 M
keyboard.press(' ')
. X3 `1 T- s" A4 z else:6 R P4 J- J( ~1 X' e0 q6 g
keyboard.press(str(i))
# ?$ M* G- W" m2 I* D3 T1 Y. r. @# ` time.sleep(0.03)
$ K( i6 ?" }8 {; v9 G7 I5 N$ B' z; }( j/ h, [
matplotlib音量柱狀圖
1 x7 I/ _. r& X) Simport cyberpi" |( z! T/ M5 M! L. C9 F# i5 m
import time
( Y' L& T) G# K' q) C4 Hfrom matplotlib import pyplot as plt0 @/ {- D" G( [. ?) I6 q0 g# L: `
! T+ t! D) K* e, o5 Y0 @% b
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'], p$ e: K, O1 Y+ N- ~9 J
plt.ion()
- ^0 ~2 w9 I. H1 [4 a w
, V8 q/ c' g' R$ @0 t! N' owhile True:
3 _( A3 o) l* d! z- `9 b loud = cyberpi.get_loudness()$ w( ^. [5 e0 E
plt.clf()0 o5 v4 [* z |& E" `- {. S
plt.xlabel("數據名稱")
2 O4 F" O( Q5 K' A6 H4 E7 l plt.ylabel("音量讀值")7 ^# l/ w2 N3 G: B% Q
y_locator = plt.MultipleLocator(5)
- P0 I. p' y* x; d ax=plt.gca()& m/ t( V0 O9 [6 c1 M5 {
ax.yaxis.set_major_locator(y_locator)
R% l" u: W+ O- K; O plt.ylim(0,100)
' }3 G; h! N6 [, r; n+ } plt.bar('音量', loud, align='center',label=f'溫度{loud}')
" L6 U0 |- b& z: y6 u3 R( ^5 l1 G plt.title('童芯派聲音感測器讀值')
Q) u4 P0 |$ T- m8 R* m% M5 a/ i$ E plt.legend()
* i: l, i+ u) O1 o# l* d% C plt.show()
) W4 n/ x* I! z% f9 q0 T6 Q# S plt.pause(0.01)6 W- G! U& s+ ]0 L- D" Y: V
* c6 L/ \5 F, d2 i/ O" v1 K
2 ^, ~7 I( q# g0 D) @matplotlib 多圖表顯示
; o3 u, o& i0 l. G: K' d; J5 T" q3 H4 ~/ H7 d% c
from matplotlib import pyplot as plt6 w0 ~( K# ^# T/ }; v
import time* |# G5 H. }+ a0 C* @' V
import cyberpi
9 j4 L0 W0 T; y! N7 }7 y . ?& G4 t6 O I1 R9 n9 e1 j' x
loud_list = []4 h+ I! p- Z# P; j0 q
bri_list = []# s9 R) R4 _2 ]. K8 G4 `
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體- n1 _' b( Y$ H6 V- J6 P
plt.ion()" L* F% m2 M. Q' t3 e$ s7 ~+ C
plt.figure(figsize=(10,10))( k4 p2 D0 `% L1 v- R0 D
plt.figure(1)* h. {+ O7 K% | z, f! K' f9 f
x_locator = plt.MultipleLocator(5)5 S6 R c. `0 S4 } Z9 j
y_locator = plt.MultipleLocator(5)
5 Y/ S) L" |9 K2 @% |3 c. v: J& Iwhile True:7 D3 X/ F! h" ^0 D0 O
loud = cyberpi.get_loudness()
2 W' J# \& O/ w | bri = cyberpi.get_bri()3 |4 ?$ i; I$ ~' S2 U% D
loud_list.append(loud)
' ~. V8 ~) n) p+ U J+ w bri_list.append(bri)6 K/ J( r8 f2 H- {, t
battery = cyberpi.get_battery()
7 {! m0 K7 s1 W7 B$ v4 a2 ]; q/ g: g size = [battery, 100-battery]7 T" S! I0 t, \) N9 }; U! J; @4 n1 x
status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']2 O: N1 P, ]6 j
ax1 = plt.subplot(221)
7 Q4 c7 C# t" ~ D6 ^" U$ d5 `5 Q plt.title('光線折線圖')
D0 e" K& a: L7 P2 p7 E ax1.plot(bri_list)* g# ?4 [7 V J# \" q P+ w+ t! |
ax2 = plt.subplot(222)8 D7 G5 g+ R5 O) n0 Z1 ~
plt.title('聲音柱狀圖')
$ [! {/ o" Y3 U# E( \# K ax2.xaxis.set_major_locator(x_locator)
9 P( m+ _3 Y' y9 v. T- C. f3 k ax2.yaxis.set_major_locator(y_locator)( N4 ^9 \8 f) e
plt.ylim(0,100)
+ ], @- f7 Z) C, |8 T* ^ ax2.bar('sound', loud)
/ m& H7 I% ]1 l: m/ h" H# Y ax3 = plt.subplot(223)( a+ {& i. l: [ E4 l5 T& ~
ax3.xaxis.set_major_locator(x_locator)
( N# y" W/ r3 J1 H ax3.yaxis.set_major_locator(y_locator)
# m5 ]; s. n( e plt.xlim(0,100)4 q2 A9 C1 T6 q: U7 e/ d
plt.ylim(0,100)& N( Q1 @9 ^& e' n
plt.title('聲音、音量散點圖'), {" O2 M9 ~, J; L
ax3.scatter(loud_list,bri_list)
' m! J) _& D1 j( w+ l' D ax4 = plt.subplot(224)
" O5 _3 c ? c- m ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
6 C3 {0 {) }1 \* K; P( z plt.title('童芯派電量')
) h/ S% x% ^* _4 e; v plt.pause(0.2)4 C! u" y" v9 c# g+ W) A
plt.clf()
, Q8 \: M4 Y; r/ u# M if cyberpi.controller.is_press('a'):
1 E5 W, V6 i0 R3 Y9 V A0 J break
6 a; r# t* |3 j8 O$ t2 G5 A if len(bri_list) > 500:
2 d3 M- l+ P# P1 x bri_list = []
# `3 K( M9 v9 m- d3 { loud_list = []# ^" I' P8 }- E$ t0 e" d0 l
) i! d0 j& {7 Z, t) l9 b O! x
|