本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi
& G) O3 P- s# h0 i" w5 I1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
+ n2 [8 ~8 q3 A& T
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載
2 f+ w3 V: u3 m3 v3 u* Z1 {6 @2 B- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
- s' k' T7 f% K% N 2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
2 m: g, c9 `# `5 P% W3 Z _- g# ?
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
Z, n8 G2 H9 J7 |4 W5 i3 N9 e8 J0 i
% b' u: N$ N% @6 r' H7 X+ }/ U- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)# n8 t7 b7 p( a+ j& N) M) o9 `
* ?7 _' i# f( s. f; k# i7 d
- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。. V4 w! r; ?8 M) U' [
' @$ i @; S% q- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。
2 E9 f: A% J9 h. Q% h# V0 ] / s, R/ Q/ b' c. ~& U
3.童芯派第三方編輯器程式設計準備
: }% a `0 L! z B2 ~9 U2 ~5 S- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。
) ?' L& J: w/ O8 Y( n* { - }4 N7 B0 W! M ]- \, a
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。
; u" `! i$ }) }3 b) z" ]7 L
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。 / ~. y: j7 f$ K. l6 A1 ~& M
- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。9 v1 v# V5 m3 ^
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 * y s% h8 o, d0 Z$ \5 X& m
9 ~9 Y) s% U% q# j9 N- P$ R- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。
) k7 N( k" o3 w4 Q
7 O7 B. ]* `5 s. q# q! v' K% a4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 " k+ D7 O, w9 b
5.一些程式設計案例
3 M' L5 x+ a0 o8 M; `" K+ A; R童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput
. k1 |$ `5 n1 |3 t2 r功能介紹:; ]' u6 u7 x2 d* F
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。: F( \% Q6 h! L |
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。
. h3 f, l# X* P" g, J! I結合藍牙模組可以實現無線滑鼠的功能。: s! T0 c# T$ m; V2 N7 [- i2 X
9 Y4 y( j, o9 ~" R" o' zfrom pynput.mouse import Button,Controller. ]6 j% ^2 Y" e- c. I9 h2 Y
import cyberpi9 y* Y& |# p: Z
import time! B% i3 @' d* q& a9 G( P0 s
# a/ [9 j' S% Q# x( a- f8 r8 N
mouse = Controller() ^9 R2 W% L" A1 l' o
1 X) R! {7 w% ?" T2 Twhile True:* J) J' _( m% T ~) B9 `6 H6 s
if cyberpi.is_tiltback():- k' v c# }# P, F, J
mouse.move(-3, 0)
% E* C2 P3 E9 I' Z print(mouse.position)
1 e5 X# f, @3 G0 D if cyberpi.is_tiltforward():9 @& j/ p' d: S/ {1 k" P: i
mouse.move(3, 0)) y& j+ j" [4 w. B/ h
if cyberpi.is_tiltleft():) `5 S" t8 O8 v& ]
mouse.move(0, -3)
/ h0 t' o8 c% P6 w; H if cyberpi.is_tiltright():6 h8 @ H" T2 n5 T+ U
mouse.move(0, 3)
% A. D' m- V* s7 d# t if cyberpi.controller.is_press("b"):
# J4 i- V# t# b" Y5 R+ y8 W mouse.press(Button.left)( U4 w+ P" z0 E) y% p! P* k2 T
mouse.release(Button.left)4 s L: k$ D3 @4 ~; S3 X
mouse.press(Button.left)
7 I% t2 J$ B' h: c mouse.release(Button.left)- I9 d! w) b+ o# U9 [; T3 x2 @# n
if cyberpi.controller.is_press("a"):/ r5 q9 g6 M+ N
mouse.press(Button.right)
. }% I$ y) S' O3 R mouse.release(Button.right)
6 w. d6 a' P+ h9 ]7 D time.sleep(0.01)# A8 i3 b& u, c3 N3 x& S% c3 J
8 H1 D" |; m) X/ O m
/ X2 `: A: ]6 a3 N' Z' j) c語音打字器 + Y* M2 R1 |& d0 y4 C5 t3 I, h
功能介紹:% E$ O6 w" @- p( `% u8 j) u
利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。" f1 J, x- @0 e" Q' N
將語音辨識的結果通過pynput在文檔中打出來。
9 G1 D4 N0 ?) |9 d5 ?該程式目前只能支援英文。8 D R& l0 i0 A6 O: ?
% _7 G1 \. D* |& e! \
import cyberpi
) l4 t. G3 d6 y3 [9 G! L1 ofrom pynput.keyboard import Key,Controller
* o$ F, j8 e5 O" C7 _7 v0 Z; Iimport time
( v9 B# n' r) B) C/ f9 N1 p8 t, ^3 k& ] 6 Z; _' {3 o' R% m2 y
keyboard = Controller()* j* r# {/ g& P+ U/ v7 [
cyberpi.console.clear()" O1 F! ^1 e: }6 \8 l
cyberpi.led.on(0, 0, 0)$ x* Z9 R4 e p x
cyberpi.set_recognition_url()% w. F, y. F% S E1 {
cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得9 b. k6 O; P( a0 @/ h" O
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼")( h0 \: Z) h/ J
while not cyberpi.wifi.is_connect():
. G& Y1 B3 r W pass
3 b/ x# [; [8 H' b) o3 j. y' pcyberpi.led.on(0,0,255)
- u$ W& V% S' @8 \9 S( @cyberpi.console.println("WIFI已連接"). r3 w( A, o: ]$ C0 {& w
cyberpi.console.println("--------------")
2 e4 d) c' s. X5 \/ }cyberpi.console.println("按下A鍵開始語音辨識")
! A" }4 J5 g9 D5 ]& ywhile True:9 E- [( S6 c- p! h: c7 O5 |
if cyberpi.controller.is_press('a'):0 B* m0 O. ~0 i3 ]* y
keyboard.press(Key.space)1 V! F5 I' ]. }
cyberpi.console.clear() y% B. f$ P! z4 Z( V* _6 `
cyberpi.led.on(100, 0, 0)
* B: a& G; X/ S w8 C cyberpi.console.println("開始語音辨識")9 v! `* ` r. u' ~- W
cyberpi.audio.play("switch")# O W* Q8 G- {) V
cyberpi.console.println("--------------")0 c! P ]. @) d: @% `) R
cyberpi.cloud.listen("english", 2)* D2 t9 n1 C; R
cyberpi.led.on(0, 0, 0); _" D. w" T2 j9 _
say = cyberpi.cloud.listen_result()& j* i8 w. f; ?0 k
cyberpi.console.println(say)% @0 L" t6 A4 s) f' _! S5 k
cyberpi.console.println("--------------"); p3 D3 B2 x( G: f0 U
for i in say:
! e" s4 s! o/ ^4 F$ F" {7 y if i == '':
8 n3 R& W! S# Y keyboard.press(' ')& q: I9 _! `3 N4 T
else:
$ J, k5 ~* ?- d5 E- E keyboard.press(str(i))
/ p- A) X8 S, ?% O# A time.sleep(0.03)( H0 ]* W( z7 C: M7 B
( V# s0 i9 u% B- Z1 `6 L
matplotlib音量柱狀圖 $ e: H, m8 ^$ L
import cyberpi
/ G& ^/ P0 U6 b6 U( {0 g1 U% zimport time
/ @$ v5 u' U* L. Q1 b" [: q% ^; D: Wfrom matplotlib import pyplot as plt( r1 O4 c7 z6 I9 w5 `
2 R3 a! r4 F' `0 B& Splt.rcParams['font.sans-serif'] =['Microsoft YaHei']% a' p: J8 z( U8 J) M
plt.ion()! V3 L2 r& u0 h% I* W8 v
7 H+ o9 U! n/ g& l; O- [( S# Awhile True:
7 H" I& Y! z1 r3 Y6 k loud = cyberpi.get_loudness()3 `7 R4 q+ f' |- A
plt.clf()
9 ?7 n8 \9 G! a plt.xlabel("數據名稱")$ W3 s" e( d! U* k9 `' L! s1 u8 r
plt.ylabel("音量讀值")$ k0 S; ] z" M4 }1 R9 Z( `
y_locator = plt.MultipleLocator(5)& R2 o; Z# L0 f: C% g
ax=plt.gca()+ W2 H' }. Z1 a# H- }
ax.yaxis.set_major_locator(y_locator)
# ~5 I8 {2 G2 n, a; t plt.ylim(0,100)
& z4 u- q/ T; _0 a plt.bar('音量', loud, align='center',label=f'溫度{loud}') k( U1 v0 E" V4 ~$ A* e
plt.title('童芯派聲音感測器讀值')
+ V! R% `8 a( x$ W1 ? plt.legend()9 w, V) {# f0 ^, h
plt.show()
) H2 M, R, o4 R/ H6 [3 p3 \% m1 a plt.pause(0.01)
! M) y {- z, o4 Y) o' o( X
9 _) B1 r, H$ @! r# U0 H. ]7 K1 e$ o. ? H& v: Q! L" g# Z6 d
matplotlib 多圖表顯示
7 m* u/ Z& R# S4 M$ i% n% m) P/ s% \: |6 B) |% d2 m
from matplotlib import pyplot as plt5 H% x0 f3 ^2 Z/ e$ d' h
import time
; P. E# X7 r% Z Q) vimport cyberpi& t9 A8 Z. `3 z
, e& G D) N9 Y0 A0 c; W
loud_list = []
; v* Y z3 J4 \: nbri_list = []1 u$ M3 d1 T4 v. l2 p
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體
- i) ^4 h" G; x V( _' u, f$ [plt.ion()/ q) X! m7 Q) @3 |+ |* z
plt.figure(figsize=(10,10))& [3 [* ]8 u, ?* {, j! g- x
plt.figure(1)
3 M" V+ ]& K5 {; ?. R/ V# s* \x_locator = plt.MultipleLocator(5)# k7 t" ?, p K5 @- D& {6 K( J! e
y_locator = plt.MultipleLocator(5), Q* x7 P2 F! a! O7 E! G" }4 `
while True:; k! @- t) e; z( P$ ?
loud = cyberpi.get_loudness()
+ W# H: @9 y. m8 n bri = cyberpi.get_bri()) i* `/ P( p4 [. |4 S1 b
loud_list.append(loud)
- E1 P8 U0 W) ^" c: Z/ _! X. c0 ? bri_list.append(bri)
$ J _ w3 ~9 x+ S) G battery = cyberpi.get_battery()
$ E. X% |, W- v; t size = [battery, 100-battery]
1 Z( t! ]% h2 e& d9 O+ I status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']
0 x1 Y0 h# g6 V: \# k. | ax1 = plt.subplot(221)
" k% y t% O. T2 J q plt.title('光線折線圖')
% e0 ?, z# h9 T ax1.plot(bri_list)& K5 z4 `! H6 B$ n8 F
ax2 = plt.subplot(222)
8 `# q4 o, v! o2 t* i0 j% l$ W$ N, o plt.title('聲音柱狀圖') ]; s e1 G5 l( H2 ~) f; E4 g6 E1 R
ax2.xaxis.set_major_locator(x_locator)- X3 r3 c' c* ^& O1 ^
ax2.yaxis.set_major_locator(y_locator)/ U0 A1 y* ?' a3 ]* B" [- G
plt.ylim(0,100)
* s! v; y2 X6 A& G: q+ c ax2.bar('sound', loud)
$ f7 T9 }. R7 d0 ` ax3 = plt.subplot(223)
8 F7 P* i5 L" G, r. J6 e9 h' F ax3.xaxis.set_major_locator(x_locator)
) [0 z7 r: u0 a' C- ~ q# B ax3.yaxis.set_major_locator(y_locator)
( Q# F5 k$ q8 ` X! a; `/ h plt.xlim(0,100)
/ ^4 P! w6 s9 C plt.ylim(0,100)
. i g+ Q- |0 B; }* ` plt.title('聲音、音量散點圖')
2 Q7 q2 g# {9 u" a! N! c ax3.scatter(loud_list,bri_list)% D2 d; m$ A. \2 c" e
ax4 = plt.subplot(224)' {% _0 f. U! v: X# a& M
ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
( M: i4 C: k" @3 W( R) y plt.title('童芯派電量')
& x( y8 y; F8 f3 A5 ?/ S plt.pause(0.2)
1 n: N3 e3 C% ]7 @* e plt.clf(): ]0 y5 B& N/ v5 ~7 r: Y
if cyberpi.controller.is_press('a'):
0 A; P& K- S5 H0 v break2 a e5 w: n2 ^( N
if len(bri_list) > 500:1 r- V( N& I4 y1 i
bri_list = []& ]0 w1 B) h9 S4 u) O4 P
loud_list = []8 V, _; p+ q& F3 i: S; ~# n* P
0 b; p) s, o- r- b$ N |