本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi 9 G' r* x9 @/ e' [& B& y, z. w
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。8 J! b% y- N/ M& d7 h
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載 0 k& b) q+ Q7 i
- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。) m- Y0 }' D& B( ~: d8 f
2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
1 z) l9 E3 H% B6 q3 y. J
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。% O2 J( Q' O5 Q) q, k. |3 U4 A
* q% J% S! o" L5 O- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟) Z3 v5 E& d! m
( H. o* r6 {3 ?; [0 f
- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
6 Q7 L: G0 G6 a
5 F; R& }1 R5 T9 x7 c) h9 b- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。
4 j9 J: A3 i% ~# K( z' h
' u N W8 H' }9 A2 X# }$ Y# g2 w3.童芯派第三方編輯器程式設計準備5 N8 h" D& |2 X R& c8 I, K
- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。7 `, A8 U4 I: ~1 n: L( d
4 V$ y9 B( [5 {7 F1 o- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。
( `( S- @0 O, W) _+ n7 R/ g3 ~+ ]4 L
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
+ Q5 n( G/ }7 ]- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。4 Q0 Q. X: g& h
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。
& C* j* Y- ~ ?) }* S& H [* ^
+ M) f0 D1 m W5 W1 {! b1 J; o- F+ s- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。3 a% X. Q7 R& [, [' o: R$ \' d& t
% ]: v, h: b" i8 @- B. s2 e$ A
4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 7 u+ E% g+ w9 u
5.一些程式設計案例. W1 n6 d0 F, u
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput ! `0 O8 B6 @0 ?2 B* O
功能介紹:6 Q/ W# n9 @9 K& F/ x( j
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。+ B A8 d/ g5 \- {
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。
5 u8 R0 C7 x/ ~- |結合藍牙模組可以實現無線滑鼠的功能。: T4 F$ d4 c# J# F
& R9 |- n% \* A" K, p, p: F4 kfrom pynput.mouse import Button,Controller& [1 y, s- ?0 l. k/ `( `" \; O: _0 i
import cyberpi
2 e, a/ r8 E& Zimport time
* b1 S3 G3 X; d/ t5 D7 J0 E H7 P7 b0 a; P( e
mouse = Controller()
$ g0 i0 f3 }' e9 m4 g0 _9 B1 s; } 3 l" d2 z% H9 t2 c, ]
while True:! p9 U, x) e9 U4 s2 J6 N0 o
if cyberpi.is_tiltback():
% g/ ^/ a1 Q. f; z7 I mouse.move(-3, 0)
, h" p( K* d. b print(mouse.position)# a# b# b5 @: z d: W
if cyberpi.is_tiltforward():+ J- g, b( `9 u6 b) y% I2 d
mouse.move(3, 0)
) u' l' ]3 C$ \; f if cyberpi.is_tiltleft():
, {& A: ?) e" ~7 X! |5 K mouse.move(0, -3)
( Q7 W: k p/ i& j$ l; T! s A3 m if cyberpi.is_tiltright():
! E3 B4 `* J5 ^, { mouse.move(0, 3)
/ |+ Z% U$ @, m: k+ Q Q" y8 P if cyberpi.controller.is_press("b"):
% `* b% `8 l# n( v8 p4 T: t I, B mouse.press(Button.left)& S' r) x s5 U& T3 d
mouse.release(Button.left)
7 l, i$ F. p1 ^1 K1 N/ [" p8 [ mouse.press(Button.left)- p- a5 Q4 `. x* f( j- |$ p& ^
mouse.release(Button.left)
u& Y' H+ a- k9 ~ if cyberpi.controller.is_press("a"):2 N6 B* {9 }/ j% N7 O' }, U4 `
mouse.press(Button.right)
: O: B0 c( w0 l: v0 B# a; V mouse.release(Button.right)
, _& |9 p, Z; u$ i5 Q time.sleep(0.01)# J* q) S& M+ G# Q( m: k
- g: D; E; Z/ b
d/ G, U6 r' t
語音打字器
6 P5 Y% [. U6 |功能介紹:
! t2 o. T: }, |# g' N5 d+ F3 ~利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。5 {" z( W8 Q3 N) v
將語音辨識的結果通過pynput在文檔中打出來。) B3 b9 `! |# R9 q R0 ~
該程式目前只能支援英文。
; K+ M1 S: S5 o! ~( s! p# e( Z% B
n. d! a. g& _+ s/ l3 ~import cyberpi4 T* v4 U8 A9 x
from pynput.keyboard import Key,Controller8 x0 G% V' M- g3 a; w x5 S z
import time
5 y; E4 `; m7 R0 y4 R ( e# T! M; x1 x3 P5 H
keyboard = Controller()3 f! d; G! u2 d/ x" i
cyberpi.console.clear()$ F8 Q! d4 _$ l5 {
cyberpi.led.on(0, 0, 0)
4 j" h4 J" Z$ i! Y9 v$ Wcyberpi.set_recognition_url()/ M( k- k, C- T% N3 Q5 a. e
cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得
6 J' r) s j4 hcyberpi.wifi.connect("WIFI名稱", "WIFI密碼")
4 R2 F) D% o; S0 N4 l4 [0 m# m. xwhile not cyberpi.wifi.is_connect():
, m2 A( |2 O% ~7 R9 V/ K, a pass
$ q2 L5 Y" [( m) N7 a- \+ ]cyberpi.led.on(0,0,255); L z$ _9 B: @0 Z
cyberpi.console.println("WIFI已連接")# _8 s4 l5 K- k" U9 w w" M
cyberpi.console.println("--------------")
* g8 v9 }* z' ?( Tcyberpi.console.println("按下A鍵開始語音辨識")5 |0 [7 q/ t8 E5 V, |) O) q0 g
while True:
/ k. x- r0 q4 @9 o! ~, i2 e0 | if cyberpi.controller.is_press('a'):
/ O- K& b+ Z! i: ]3 }1 a" u keyboard.press(Key.space)% `9 Y4 o- f& x2 |/ _
cyberpi.console.clear()
4 W/ y: Y7 F5 j7 D* ^& f: G# Y$ z2 b t cyberpi.led.on(100, 0, 0)
7 p- w6 O) U ~9 O7 W2 F cyberpi.console.println("開始語音辨識")6 N- t, o* h3 e# t! F. c% n
cyberpi.audio.play("switch")
$ F3 F3 w) d) s7 L cyberpi.console.println("--------------")
9 E0 g9 o& l3 X- C cyberpi.cloud.listen("english", 2)0 t; f- z1 g# {- `; a9 N5 ?
cyberpi.led.on(0, 0, 0)
& w( f( g. ^4 |7 ?! w6 n* i. b say = cyberpi.cloud.listen_result()4 _" v3 K/ J e
cyberpi.console.println(say)
- X3 G# k, s5 E! e& s! s cyberpi.console.println("--------------"): D& n9 y' i5 e/ Z& R& M
for i in say:
7 E* t1 m$ B& Z& a$ L9 T if i == '':
" r1 G9 h9 |) t' U( D' n0 M5 E keyboard.press(' ')
/ J7 X" R8 {& e4 L% G- V& R else:
# A/ ^- H! c8 G T7 |- g keyboard.press(str(i))7 ^; [3 Z! ?( j: ?3 {% @7 [+ c
time.sleep(0.03)
5 H' L& r9 N% n; _. u5 i
1 H3 G5 H+ w# b- kmatplotlib音量柱狀圖 ) p ]( j* U9 T2 ]% B8 M) P
import cyberpi
- P8 C/ M/ D1 u0 \& p3 b+ ]import time
# I& v) Q) y3 sfrom matplotlib import pyplot as plt
8 T" F5 U( ~, l/ e, o, n5 e& X& B 8 T8 D# C2 C( ?$ `5 T
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']
! l" ^1 _0 q5 z# oplt.ion()
2 X+ X- q% P _+ K4 U
$ f* C5 f+ y4 A2 |5 I$ |while True:
7 X3 v% s' O+ F& E' n6 X$ d, M loud = cyberpi.get_loudness()
' E0 Z q w$ l1 T; f7 I9 n plt.clf()2 l. j$ s h0 i3 z3 m# t
plt.xlabel("數據名稱")3 s [- D/ s/ z1 k( L; U$ Y/ ^0 e
plt.ylabel("音量讀值")9 q% O2 n* j3 m0 o& q1 e/ [4 c
y_locator = plt.MultipleLocator(5)' Y" v8 V6 G: e
ax=plt.gca()# L" }/ C) k, n& P$ A
ax.yaxis.set_major_locator(y_locator)
6 g& ]/ c8 q9 E% z8 M) Y plt.ylim(0,100)( |% ?: w8 \4 `" ^7 I" y
plt.bar('音量', loud, align='center',label=f'溫度{loud}')8 E& T6 i7 t% A0 z! i, W7 k
plt.title('童芯派聲音感測器讀值')
4 s, D0 R! m+ Q$ A plt.legend()
6 B' C; H4 I" ]2 k& j plt.show()
' ~. N, y5 `" A3 K( w. W plt.pause(0.01)% ~7 v% w5 ^+ t" Y0 z A# M
) ^4 O; A0 m, q+ A0 x
' g, F7 c3 |# \: n$ w! @5 Umatplotlib 多圖表顯示
2 p. h0 I; S7 W% H; k+ u) V+ X
$ c2 w8 e$ r6 i7 u9 T8 y3 kfrom matplotlib import pyplot as plt4 ?3 n/ x5 w# E$ }. H' R
import time" j! w* k7 V+ X, r6 Q, o. m
import cyberpi
6 S9 n, d8 r& E2 a) i 4 N: d# c4 e: U$ ^: L( t) y
loud_list = []) c( q% v, ~# @+ Y. s( c
bri_list = []
6 @$ c9 x4 ]* Z, ?plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體3 }( Q5 w5 M# j: Y
plt.ion()
, c: a/ _: q; o Wplt.figure(figsize=(10,10))
# Y4 x. Z1 D, Wplt.figure(1)
! m7 {& i! w% J0 y9 h* rx_locator = plt.MultipleLocator(5)! ~& m9 E& f& j
y_locator = plt.MultipleLocator(5)( w1 s, C3 _# F: K$ n, l
while True:
0 x! N/ }) x7 I- b6 m loud = cyberpi.get_loudness()9 w: `& n/ p5 k& E: G/ F5 P9 _- A
bri = cyberpi.get_bri()7 B( a5 r* |6 D0 C K% j& U
loud_list.append(loud)# |) I2 O9 J* j8 M' h6 q
bri_list.append(bri)- _5 W# o. W( v* L: J/ q
battery = cyberpi.get_battery()" g9 E/ |& J3 [8 k+ ^1 p
size = [battery, 100-battery]
" N( Q y/ A) E( ~6 t status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']" S3 l6 ]& k$ z& @, P- b
ax1 = plt.subplot(221)* b9 A3 q- D. y2 h( t
plt.title('光線折線圖')
4 ^8 b, D/ Y! S, Z7 z ax1.plot(bri_list)
$ | Z' R( n) C0 N ax2 = plt.subplot(222)
9 U3 _6 X8 H( F3 A i8 @ plt.title('聲音柱狀圖')
% w5 p$ C3 l5 p1 S ax2.xaxis.set_major_locator(x_locator)& u, v2 U l5 a1 Z4 B7 T, F
ax2.yaxis.set_major_locator(y_locator)
; t9 z* J ?, f' y- ^1 _$ W2 A plt.ylim(0,100)
/ r" W: b. R d: L ax2.bar('sound', loud)
! D) L" F! T" F4 K ax3 = plt.subplot(223)
8 E) l% x( ?( y3 Y7 F7 a ax3.xaxis.set_major_locator(x_locator)! k* x, ~& H2 f) T' g P) \2 @
ax3.yaxis.set_major_locator(y_locator)* O" M2 r/ R# u# \& h
plt.xlim(0,100)
4 H# b) W/ O- x, Q! W4 _+ X% A" i plt.ylim(0,100)5 U$ B3 Y7 P: J
plt.title('聲音、音量散點圖')/ t# A/ C2 ]# E5 H" g' L& l; G
ax3.scatter(loud_list,bri_list)1 ^6 f2 @( U. R( s
ax4 = plt.subplot(224)) x. ~$ n# I. P7 T; o/ I
ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})8 P0 \/ \3 K. y" V. `3 n
plt.title('童芯派電量')1 | a. O3 A5 v6 h5 F* t4 b7 H
plt.pause(0.2)( T8 I A3 z) G% z* R0 ~
plt.clf()6 X# p4 \% _5 K) x' ~1 \8 X9 e
if cyberpi.controller.is_press('a'):9 ]* ^4 ~% e2 G
break# S# I. O: Y" z; O" ?* |' l: z {7 H
if len(bri_list) > 500:
2 N" O/ O3 L9 f8 B! h* m7 I" z5 Y bri_list = []5 _# b& X4 R0 f5 c' h% ]. t$ ^
loud_list = []
# \2 l! j* z/ f! g+ L. D! d; Z4 v4 {( e8 Q) B/ R; |
|