本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi
4 D b8 m1 P: U! [9 h1 b1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
2 L5 W9 M9 D& Y, `/ @3 f* x
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載 ! u. N. q/ ~7 n/ q+ o
- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。" y% k. f+ |& m, X
2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
- K+ ]+ j) F" f" z j* N% n" m
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。# L% L \( |: }) D& X( _% \# G
* S" Y0 d' N9 U" U$ `- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)+ R# b$ U% q0 Q- i# J
" h6 I: O* s* F6 z% l/ |; |- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。9 j2 ^" ]6 r7 C6 M, P3 G
4 M* G; a2 h2 v+ ~) n c$ |
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。* {: V, n+ L3 ~; S( {
7 ?: w& i8 @; j0 y5 ]3 [) W- P ?, F- a7 ~
3.童芯派第三方編輯器程式設計準備
: q( ~% e- S5 |) R" f" x1 t3 L- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。* ?8 H: A% B6 [( y# O, \" a
# ~7 t9 C+ Y9 ]- ]- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。
& C0 L# H$ W; ^8 b) ?: q
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。 2 ]- E' j( k% W. ^, G* f
- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。
! |, ~3 `2 g+ D# w
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。
. i1 f3 f) F( L$ I
. V" F8 U2 S7 g# R+ |" l- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。
5 x' p9 ?$ v; R' W O7 n
" e5 p5 K4 }% ]" H( X4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 3 T& J: M) P% x$ k% \; [% x# `& R; G
5.一些程式設計案例
8 d6 A2 S: o: |* p! e+ t5 p童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput
: k# B# o- w! k# q功能介紹:7 _. k7 `) |; E
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。
' U; T$ W& c1 A1 m- y通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。4 e1 T* F% `: [+ _' p& t
結合藍牙模組可以實現無線滑鼠的功能。* f% N4 G& |3 Q: b! W( M# e/ C$ [
- z! j: i* `' T' Y) x+ zfrom pynput.mouse import Button,Controller
0 s" d. ]: \/ `! o2 ^& Q% R# ?8 g( ?import cyberpi
# {& I0 x } D, n" W8 @import time
9 b, t$ \6 {2 Q' T6 Y2 v $ d" C, b3 L' c7 d9 g+ O) n( S4 p9 r
mouse = Controller()
: x9 q$ D5 p3 @$ A! @7 b
; I; [2 T, q* C9 J# f' O7 ~- }0 p; m5 {while True:
+ I- B- i2 w9 |* }1 y9 Z; P! T$ i if cyberpi.is_tiltback():2 ~3 t: E0 O3 E' ~9 t; h
mouse.move(-3, 0)1 b/ T# P, Y: m' z O5 v6 ~1 W
print(mouse.position)
9 `" W; r; p- Y! F if cyberpi.is_tiltforward():+ h, Q5 r4 A% B! [, A; P5 Q
mouse.move(3, 0)
9 c2 O+ P1 ?, n4 u if cyberpi.is_tiltleft():
9 g6 N# l) ?- {1 p5 |% G' G mouse.move(0, -3)5 y* ?. f. q! P8 b" y
if cyberpi.is_tiltright():
) ~& H7 w: P9 j: |" n; i mouse.move(0, 3)
* O. a5 Y7 {, U if cyberpi.controller.is_press("b"):
. k, y/ p) I" w+ ]: i$ Q mouse.press(Button.left)" k) T! Q3 k$ q2 P* U( w
mouse.release(Button.left): }7 G$ W9 d$ u0 ~% s6 j8 z4 o
mouse.press(Button.left)8 W5 g- i" P8 k
mouse.release(Button.left)
/ j, F- w8 I! d; i0 N if cyberpi.controller.is_press("a"):2 a% S1 z5 Y+ J- j% l+ @
mouse.press(Button.right)
) I% B$ B$ H7 r5 L, B$ \) G mouse.release(Button.right)
' \4 o! j! y9 D6 N time.sleep(0.01)
2 S: y/ B) r0 `
* T2 }+ g, I1 ]+ ]4 N: y# z
/ h, m3 N5 N0 c0 `, I; t @: I I語音打字器 \) f) _& h" f) L) r6 h* R
功能介紹:0 x, q! N. _& @! h$ [0 ?7 ~
利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
' p4 M# M% y) i# _將語音辨識的結果通過pynput在文檔中打出來。# u9 h' {# y4 |. D! D
該程式目前只能支援英文。8 Q" C; |! h( U' w5 i
' F' p7 h) O" _
import cyberpi
; X: ^1 i, v% K: ufrom pynput.keyboard import Key,Controller
8 P+ U+ b8 C2 Eimport time, v% C6 V6 a2 T# l" a/ T7 r: t4 m
+ V y% z% c" U6 Z) kkeyboard = Controller() h) y7 V# T& z% Z, j2 M0 N
cyberpi.console.clear(), ~" O$ ~2 b$ X1 X% K$ n. ~
cyberpi.led.on(0, 0, 0)
6 i0 B1 U o: c" z0 zcyberpi.set_recognition_url(), B/ u$ z# T% n" Y1 S& `
cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得
) }- A/ {1 g: O" J0 F! scyberpi.wifi.connect("WIFI名稱", "WIFI密碼")
- O2 w8 z! G* p# r" Twhile not cyberpi.wifi.is_connect():' O' u6 A% d# n4 K" r
pass
9 R3 ^) d6 V" b7 a/ g, v" e. C8 h: Acyberpi.led.on(0,0,255): S" [7 A* \6 t' d7 J' g
cyberpi.console.println("WIFI已連接")0 v5 R( {3 e) }
cyberpi.console.println("--------------")
. p( c8 s- o8 }4 Scyberpi.console.println("按下A鍵開始語音辨識")5 K3 ~' l# F1 b$ u6 S2 }6 j2 c) r
while True:' x/ }+ }6 f2 l, ?* ]4 Z; n
if cyberpi.controller.is_press('a'):
9 \5 ~* y; m; \ keyboard.press(Key.space)
0 g. {3 d4 @9 {! c* [ cyberpi.console.clear()
; y5 |7 [% K, y9 E( [1 o1 z cyberpi.led.on(100, 0, 0)
6 k% A: ?! z6 [ cyberpi.console.println("開始語音辨識") m2 o1 ~) D+ l3 I( {& }; G/ |- D
cyberpi.audio.play("switch"), ~$ ]. C1 |; V
cyberpi.console.println("--------------")8 ?( T$ u* E0 u: I" a; I2 d
cyberpi.cloud.listen("english", 2)/ Y+ E, }0 k1 p7 Q9 ~
cyberpi.led.on(0, 0, 0)
: g- Y: O" l: W; v. g3 `9 |6 _ say = cyberpi.cloud.listen_result()/ u+ C0 g* W. I2 a/ o% U/ z
cyberpi.console.println(say)9 R' t" T4 o9 }4 ?! p: r( A, ]
cyberpi.console.println("--------------")+ z- W2 b: L F! d. e
for i in say:
A' L- v4 }6 F# c7 s! t if i == '':
+ X! i6 T; a+ \: } o1 E9 W( E7 C keyboard.press(' ')
5 Y6 k7 @+ z- o. j* R$ H9 h6 Y else:& e! T" X+ l4 P# o% G( v0 H
keyboard.press(str(i))4 b; {& E7 B6 a+ i' J5 N2 R
time.sleep(0.03)
# k0 Y0 I t, W
5 ]# y- a/ Y, @- j( I/ F7 xmatplotlib音量柱狀圖
% n4 x% ^8 X/ q" C. T6 M# k; ]7 ~import cyberpi
2 H5 Q$ k3 B) t9 E/ G6 a% q0 z+ Kimport time
. A* l0 n) Q: Q, Cfrom matplotlib import pyplot as plt7 d& e! W8 q3 a/ M! Y% l
9 Q0 t# c4 m' N# ]plt.rcParams['font.sans-serif'] =['Microsoft YaHei']
: w- r8 m, h6 J3 n/ j* \3 pplt.ion()% Q6 ?3 i. g6 `8 b) h: _ i
) |0 x2 t. ], Z2 twhile True:
. n* o0 G# W* I( E4 t, E: | loud = cyberpi.get_loudness()
9 a9 h8 l' y, r plt.clf()
$ W3 i# L$ L& X/ `& I- N plt.xlabel("數據名稱")
7 ~0 T% q! o0 Z8 a" D+ W. y! a8 o plt.ylabel("音量讀值")
2 K# G& [$ X3 j8 ]: s y_locator = plt.MultipleLocator(5), |& {/ F- h* m' D% H$ ~& E
ax=plt.gca()- D! {5 {) Y, h1 M3 p1 l
ax.yaxis.set_major_locator(y_locator)6 I/ }1 N( k$ W+ `% i
plt.ylim(0,100)
" ?8 ]. u/ O+ i0 O+ v% h plt.bar('音量', loud, align='center',label=f'溫度{loud}')( Z- Q, H6 q# U3 v) [
plt.title('童芯派聲音感測器讀值')5 S2 M1 j9 g( l+ c
plt.legend()
( Z3 x2 \; p; |5 v2 ?/ d. W plt.show()* u& S6 @! t7 U0 {
plt.pause(0.01)/ w2 \) x4 R) z4 z. V5 H
5 {, [2 l! c% a9 f# z2 S; D
' `3 X& v* q1 {4 y* j! K! t( A
matplotlib 多圖表顯示
3 o. L8 I7 g/ j; |) S
) j5 q; I6 X. I O0 D7 z6 Tfrom matplotlib import pyplot as plt
) _0 x" B5 y7 e" N l/ rimport time. z6 k: @& I! N
import cyberpi, C3 N p5 }9 _) n! p' Y% \( }. a
7 K3 J* ]' B# p9 g$ c# t. {! m8 E
loud_list = []
. D0 C+ n! `& C9 g5 Cbri_list = []0 K% D; Q" X2 y
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體7 f7 Z4 e2 J# v6 C8 I
plt.ion()9 U8 ~8 ` F$ r/ ]# l
plt.figure(figsize=(10,10)). k1 |. z9 z: x( z
plt.figure(1)
* I: S0 R2 h( Ex_locator = plt.MultipleLocator(5)
6 T. i& m* k+ D9 Hy_locator = plt.MultipleLocator(5)9 ~# ]2 h: O O6 {
while True:. F5 a, F* t, Q1 R, x7 p! j; M4 [
loud = cyberpi.get_loudness()4 ]! E, P% f/ M7 m. O, r1 }0 l
bri = cyberpi.get_bri()" _7 `6 N: y" n/ Z& h! d
loud_list.append(loud)
, [$ M& s9 R. F# ^1 U3 Q3 e( r bri_list.append(bri)
! y" e. |* S3 F) x1 E9 o battery = cyberpi.get_battery()$ u8 H4 |& K" U) \: l
size = [battery, 100-battery]/ _0 w* Y) |9 X& C2 q4 V8 h
status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']5 I5 `, O! K5 j' e. C5 I
ax1 = plt.subplot(221)2 M. S7 |( H" n2 w: B( _/ ^- d
plt.title('光線折線圖')
7 [/ o: C8 u3 a( | ax1.plot(bri_list)
% B- d" F- Y) M* j. } ax2 = plt.subplot(222)
% T8 h& O( k+ f* m plt.title('聲音柱狀圖')* s2 M( }; h7 G5 G" [9 p
ax2.xaxis.set_major_locator(x_locator)" v1 X+ U8 m* |% ^8 _8 A3 P
ax2.yaxis.set_major_locator(y_locator)
) X7 q7 J& ~: p% q# b% ~5 Q plt.ylim(0,100)
8 U6 P( w9 E/ ]% ` ax2.bar('sound', loud)2 Z/ |. @3 s. d5 d+ B
ax3 = plt.subplot(223)8 {* L3 ? d7 [5 I- N# A- i
ax3.xaxis.set_major_locator(x_locator)
# \+ w! d. s8 R6 G ax3.yaxis.set_major_locator(y_locator)
( X2 }0 c* _, A+ y7 E2 x0 i5 H plt.xlim(0,100)
2 E" C/ ?7 L% C plt.ylim(0,100)
d7 {0 v/ o1 B8 e8 N$ A" i& M plt.title('聲音、音量散點圖')
0 x* [& f- f; D+ |; i2 Q6 b d ax3.scatter(loud_list,bri_list)5 v2 x* |6 d; C3 f$ b+ ~
ax4 = plt.subplot(224)% `: k; B. \ A$ i
ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
1 X4 K l# V o6 j3 E plt.title('童芯派電量')
1 I* k2 t; m% E3 l1 p a; A plt.pause(0.2): [, e& E$ P$ T9 v7 O
plt.clf()
+ ~% K8 R5 F; o2 S( V" C if cyberpi.controller.is_press('a'):
. v4 ?; p e( i. H" q+ } break Y, }' T" X" u/ c
if len(bri_list) > 500:
3 ]2 Z$ i9 J2 i bri_list = []
2 o. `3 C. {. D `6 R loud_list = []
$ \( K5 w9 \6 u, s+ X& ?
3 x- G: u4 P4 v0 ^ |