本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi 3 M/ }+ D8 n1 O: E# }" X5 _# B
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
4 D5 \' H: l2 _& Q, Y8 [- Z6 x
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載
& W5 N8 {; }5 N- n# R; {& a1 L- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。# j2 D1 G$ H2 f: F: ] L
2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
9 f' s; ~5 Y( Z9 _, ^; l1 F
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。3 D" B& z% v6 g+ J% @" u
+ o# W4 [7 n, N, P. j3 M# H- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
6 Z! J8 C' O) M7 ?: { , X( K1 @% n' N0 }7 K5 X8 }; k9 O
- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。9 g/ k, z6 x! ?$ V$ I2 C. B) {
I+ p3 s5 i0 u. X% n+ U9 x: f* T7 c
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。
# V5 q+ T. J5 S. |# H' N
$ v0 Y: `- r2 K. I, j, C3.童芯派第三方編輯器程式設計準備0 [$ W" V( s/ q9 G$ ^' n) \9 ^6 u
- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。
- n3 s, I h# D- Y" ~ 4 {1 K. i9 M( J, i7 V- h
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。+ d( W& p6 I2 \9 \: c
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。 ~* [3 t7 x' C) h& @
- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。/ J$ v4 K. b1 P& n2 \* E
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 4 t" [/ q! d9 \4 S9 P2 \8 F# s- {8 }
* `: q% g' C- a9 D$ u6 ~ _' ^
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。3 y& w0 P9 O F% l/ Y' E. Y
+ ?, z( q; L8 s8 H0 i4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。
% b) V. i. z9 ~, p7 I5 |0 }5.一些程式設計案例* T, N2 z$ B5 N" Q+ C' x
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput
, C7 F# z1 N& x& J功能介紹:2 m- D; c) N* P0 y; N* @5 u% U% Y3 k
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。
3 F, _8 b, w- @' H, l- q9 O0 F I通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。0 c' f) x8 u8 l5 b5 M q' O
結合藍牙模組可以實現無線滑鼠的功能。
+ B" q; s, k0 l3 @$ g0 t$ Y
# e+ P- H1 {) p4 I$ _# D" W1 Gfrom pynput.mouse import Button,Controller
; l+ g$ O% n% Z' Q; L, P: ^8 i' E6 |import cyberpi! s4 ~. c: |: n" [- A% \
import time2 L( ]% c$ s% d- Q( o$ V
6 }& }) ?3 r% v2 V, y7 gmouse = Controller()
( R% n* h$ c, K7 l* j: ~! b
) l* o% }2 X! W1 Ywhile True:: p9 D& P. ~8 e" j" J6 ~) D
if cyberpi.is_tiltback():
5 K! r5 n1 T& s! B6 c. t a7 t( T mouse.move(-3, 0)
! [7 _% G( q6 t8 ~; D print(mouse.position)" o; H1 |" W8 ?2 U
if cyberpi.is_tiltforward():2 B4 }6 k6 Q+ w2 u* m
mouse.move(3, 0)
G+ ^5 a9 l# w& Q# ~$ J" v if cyberpi.is_tiltleft():0 u6 f7 H6 X% h+ o) T
mouse.move(0, -3)1 [7 v" k6 a) V" Z2 [6 P% Q
if cyberpi.is_tiltright():2 m9 R) Q( j4 a, a
mouse.move(0, 3)
- i# U' o6 E+ ]. P% d4 k if cyberpi.controller.is_press("b"):
) g8 d5 f; N% q& f% w# o mouse.press(Button.left)6 k4 m3 A" J+ S$ V) r
mouse.release(Button.left)
J" P0 p* T- @8 v mouse.press(Button.left)
' w6 S$ A' R9 N! X$ y mouse.release(Button.left)2 Y5 }% r/ w& p5 o
if cyberpi.controller.is_press("a"):
& ~& G* ?/ {* _ mouse.press(Button.right)! U8 `0 ]6 R9 j
mouse.release(Button.right)9 U! q6 J0 D% {$ \# U, H9 p
time.sleep(0.01)6 B! @: O, A5 a* ^" i
& l# m5 Y) C2 @
6 C8 Y2 o2 S" r語音打字器
. @( w7 M0 y U8 U功能介紹:" B. _0 m- U& B8 @* M) R
利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。! h3 W6 ]2 O4 l3 l4 A$ X
將語音辨識的結果通過pynput在文檔中打出來。* k6 U- _- ~# A6 d
該程式目前只能支援英文。/ U% ?; f8 P" a% w7 T
/ O) R8 w; ?- |( _0 `! Y7 F6 H0 `6 Y
import cyberpi+ }3 h! [+ Z& h' O. [
from pynput.keyboard import Key,Controller3 ^" q1 r" [6 Y# Q" V( W0 {
import time
( p* d9 W2 p, S7 _( r ' H `1 o+ d: d+ ]( ^
keyboard = Controller(); b7 ?6 N4 G! u$ C" e9 h0 R! f* |# C8 T
cyberpi.console.clear()5 }5 u$ Y! X6 H" }! S1 K
cyberpi.led.on(0, 0, 0)
" a) {% {1 L6 O9 rcyberpi.set_recognition_url()6 R! v. p4 {( `! S
cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得
, T ]7 A {$ C& ]1 Mcyberpi.wifi.connect("WIFI名稱", "WIFI密碼")9 q) M4 g8 \9 y3 M9 a$ v
while not cyberpi.wifi.is_connect():
0 X0 j/ B9 ~9 ^* q pass- n2 c6 }' a7 w) ^& |* W) ]
cyberpi.led.on(0,0,255)
; O+ R u1 n* Y9 K: |. Ocyberpi.console.println("WIFI已連接"): Z6 O9 B2 f4 e9 W: z G1 N9 g
cyberpi.console.println("--------------")- @& R; B5 ^& ~. g8 g1 |7 @% {
cyberpi.console.println("按下A鍵開始語音辨識")
- a( @3 ^' J. t+ i$ }$ @while True:% R, n1 O1 I; c \. D' ]. L3 n
if cyberpi.controller.is_press('a'):: ]# l5 V' A) R s# e2 X
keyboard.press(Key.space)
* P Q) M4 L6 x' h6 Q' l j' I& w cyberpi.console.clear(). C% s. R4 r. E
cyberpi.led.on(100, 0, 0)
" v f' D+ D# G cyberpi.console.println("開始語音辨識")
8 b; A$ [9 d8 r8 ]% }( S6 v4 p# C" m cyberpi.audio.play("switch")9 N2 U0 y2 H% f! C X- K& f+ k
cyberpi.console.println("--------------")" k1 X/ V9 i8 A& H0 H( r8 B7 R) |3 u
cyberpi.cloud.listen("english", 2)
6 W/ R g# R3 G* u# S cyberpi.led.on(0, 0, 0)* \' }/ l4 J5 h( ~
say = cyberpi.cloud.listen_result()2 Y3 F% v0 M g- r, `+ ^( I
cyberpi.console.println(say): K! v* s- h$ I! j) p: K& ]
cyberpi.console.println("--------------")
6 Q. C+ ], ^7 B3 U) A3 S" I for i in say:
& `0 s* E. L6 f3 ~ V if i == '':/ X) D. A6 ^6 O; v: i
keyboard.press(' ')
( H7 H& Z! H! r else:! K" X6 a, ?0 i
keyboard.press(str(i))
% b+ I& N; y2 m time.sleep(0.03)
$ t3 l( a; j; [
) o% j2 \8 e/ V0 Z* J# y2 Q$ tmatplotlib音量柱狀圖 ! t3 [4 K1 D u' f# G
import cyberpi
; X) F0 w" g) h' s( K! ~# R0 ximport time# B8 n6 j# l7 P/ j6 a$ k
from matplotlib import pyplot as plt- [, w8 n+ T# d( F9 h! p! n# k7 T
" {9 t# Q+ t T- h+ a( e
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']& j" W4 L" ]5 m' s
plt.ion()& i- \2 [: O0 A5 f
w, q1 Z- o+ C7 ewhile True:! H9 u5 x( q( N
loud = cyberpi.get_loudness(); ^5 V. W4 Q: v" {$ [
plt.clf()
1 Z7 ] `4 J E! L$ C* A1 G3 l# c plt.xlabel("數據名稱")! s0 u% x+ a% w& l
plt.ylabel("音量讀值")& G( _* f1 {4 V0 f" u
y_locator = plt.MultipleLocator(5)2 X I) Y3 F$ M7 j% ~
ax=plt.gca()
: _+ y. w4 L% o% r# [/ w ax.yaxis.set_major_locator(y_locator)
" v; i- S* a; b/ _+ s9 W5 q' h plt.ylim(0,100)2 |+ r. Y4 ]; l
plt.bar('音量', loud, align='center',label=f'溫度{loud}')
/ [& E9 H! _- o- r" k9 O, n3 c plt.title('童芯派聲音感測器讀值')/ O4 d' a! c% H+ P, F
plt.legend()
& a5 w% u' }1 | plt.show()
$ u9 E1 E4 S6 r2 y' o F plt.pause(0.01). M" q1 a; f& |. W* L* o
3 J7 j+ Z: `! x# t
5 Z$ v; y% T9 {matplotlib 多圖表顯示
* q4 ^. u9 s3 Z" P/ `
6 n0 J- [4 W8 D0 ?% L; y1 R) ^from matplotlib import pyplot as plt
6 P4 {/ x# [2 ]import time3 Y0 h. [. [3 _5 C. i
import cyberpi3 B7 E N( J4 K7 u
: v* [' d! p. m" g2 W6 M( y" A/ f4 i( mloud_list = []( i) i! d6 m$ w9 @
bri_list = []
% g& c G' I' ^5 O* uplt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體
8 @) } D' z: J0 F+ m$ Nplt.ion()
) Y2 ^3 e4 T/ I! ?6 Splt.figure(figsize=(10,10))4 J! Q6 A6 i6 Y4 W1 k
plt.figure(1)
" y5 N2 k% ^% }x_locator = plt.MultipleLocator(5)
+ H# f0 C. N7 j" D) d" Q: Qy_locator = plt.MultipleLocator(5)
- ~. r4 A6 F9 e% [/ n5 I! W( Nwhile True:
9 x* K+ K9 w! C5 \6 T K3 ?6 t loud = cyberpi.get_loudness()! E3 @; ? s) j7 E5 Z0 D
bri = cyberpi.get_bri()
* `; D0 H7 {" y! v: _ o3 P2 P loud_list.append(loud)/ v: S4 ^) ]0 L5 N
bri_list.append(bri)5 E! w# U, f, v* r$ V- o
battery = cyberpi.get_battery()+ k' B+ i% |" S5 Q9 m
size = [battery, 100-battery]$ Q, H* J7 R! k# a( Q! B( m% \8 W' O; m3 B
status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']0 f, C: `$ i+ ?& W, w
ax1 = plt.subplot(221)6 _/ w3 r' ?+ e7 Y' u# {. a2 y
plt.title('光線折線圖')8 [ K& J3 g- |* P% Z
ax1.plot(bri_list)
* I# p9 a8 t) y2 V) ` ax2 = plt.subplot(222)
8 G! u1 [# q; W4 h plt.title('聲音柱狀圖')7 `: }0 E' a% H I1 c8 p
ax2.xaxis.set_major_locator(x_locator)
0 i) T2 c2 \' d5 [( o/ k( G8 w* Q ax2.yaxis.set_major_locator(y_locator)/ f( }8 }8 ]5 @0 z* D
plt.ylim(0,100)( @/ Y( U0 }4 v) m" j# N) j
ax2.bar('sound', loud)7 F0 C+ p( N. H+ y8 m+ R/ b
ax3 = plt.subplot(223)
# w- p; F* i* T3 R ax3.xaxis.set_major_locator(x_locator)
% H) i* C( G3 { m/ X ax3.yaxis.set_major_locator(y_locator)/ T" ]& j3 ^$ Y( V# ]
plt.xlim(0,100)# o% t5 J9 `& s. s8 }' z
plt.ylim(0,100)0 X' k0 ?2 Z! n m) l5 F& i: e
plt.title('聲音、音量散點圖'), t; A' h2 i( l* L2 [
ax3.scatter(loud_list,bri_list)8 B$ v5 a* R' q( `: N6 |$ `4 z! Z
ax4 = plt.subplot(224)% C# O, ]4 H) f" g
ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'}) F$ m/ a7 b1 B, ?: ^. \* Q
plt.title('童芯派電量')& l* s z& b7 q/ i/ \0 t5 Y
plt.pause(0.2)
+ |: E. n3 H- |) j* Y# w# q plt.clf()! H8 q) ]& h' k' J
if cyberpi.controller.is_press('a'):
. N2 H( x7 f1 ~: w break
/ M6 H5 L9 M; U0 m" p if len(bri_list) > 500:
+ X- K1 T4 Z7 u; X6 v! B bri_list = []: `" Y! | E3 o1 Q
loud_list = []
% `8 ?& Z f5 b& {. J& F! K+ G. J& w1 n' b' K7 [
|