本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi + A& ]3 g( o4 `2 B4 m9 a
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
. y' Q. s q. ^6 |. K
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載 ! r# f0 t6 P; _" _8 \! s6 A
- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
9 h# Q& r/ J" Q( |. R! v- h 2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)6 q; l2 ?' b5 B( E; p, p
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。8 b0 |: ~/ p9 Z. l9 o: i; o, z
( n) B) R3 M$ G5 \9 v- V
- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
9 ~' C9 _) u4 \ 7 Q% u8 Y: B. @7 Z- _" S
- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。/ B d5 K$ q7 p
/ h* e6 n5 v) a* ^+ H! V& _" e* v9 K
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。
3 Q) l6 G5 B1 L/ a
* I" S6 i( `& v* m! ~3.童芯派第三方編輯器程式設計準備
$ i6 p- j: L* V- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。
! D- r2 ?2 [' U ! i: z* H9 Y. i, M/ K
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。
, U6 X+ J. @# |+ w( Y1 H8 Z
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
4 X3 s* D0 D- o& Q& `; [- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。
/ ?) R5 s' J6 y! ]& j
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。
+ j5 ^' g8 G9 {) `# \) V; i: H) N1 s: H$ T) L
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。! O* }' Y6 a! \' g; y) f3 p/ h: w
, z# N& a& t3 ^5 R( d2 B
4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 - q) y9 U/ v) p. D
5.一些程式設計案例& y3 }0 l' Q* g
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput 6 F- M1 M3 l7 L% n
功能介紹:" Z- c3 k2 q) M
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。9 A9 m! E7 k$ i0 m
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。/ H4 U, U0 ?) f9 s O
結合藍牙模組可以實現無線滑鼠的功能。* b( v M7 z6 r- \" W
3 h! O/ X( Q8 l4 x% kfrom pynput.mouse import Button,Controller
( w" S* g! T; C" z# Pimport cyberpi
& k# m9 R, e9 o$ d* t. Jimport time6 y9 v s# j7 D
* K4 \7 L: k7 h- qmouse = Controller()4 j! V+ I5 E7 j1 H7 R
: X- m4 Y5 E7 L7 d) L! Q0 @& bwhile True:& D; ~# G% x* P( o
if cyberpi.is_tiltback():
3 ~: H( r9 @& d4 t4 U mouse.move(-3, 0)0 z- J5 X* R8 J9 \9 O! Z H! W
print(mouse.position)
4 U [8 [; [; C; N7 q if cyberpi.is_tiltforward():* z9 W: S/ t- E( N. T' E: Q5 U1 ^
mouse.move(3, 0)
% L7 q" A4 P% @ if cyberpi.is_tiltleft():& u" ?7 \6 b' V7 B
mouse.move(0, -3)' z, I! B! \( d
if cyberpi.is_tiltright():
5 l$ t8 r2 y7 b mouse.move(0, 3)
5 i) N; s; Q6 @4 C b8 Z4 d if cyberpi.controller.is_press("b"):
+ v* P1 Y' X7 _3 I% T/ \ mouse.press(Button.left)% J( Q, n6 o7 Y% ]
mouse.release(Button.left)
' \$ G' m) j1 t1 L. B8 b mouse.press(Button.left)
1 f/ ~: M( I/ S0 T( M y- ~, {" d mouse.release(Button.left)* ^# Z. ?# z1 M0 k
if cyberpi.controller.is_press("a"):
! C1 d/ z w9 V2 Y) b" G. p" a mouse.press(Button.right)- W8 c8 U# n# F4 h% _4 y
mouse.release(Button.right)& x) W! }/ E1 s9 t- X# H
time.sleep(0.01)
/ O+ g' J$ I9 h) z/ N0 U, u/ ~: m. v1 l/ M4 s- D- x" L
2 B; g1 c+ ?7 D- h5 N語音打字器
, E7 p4 X* r( t& W8 ~. m功能介紹:( ?, N; b& H; b+ Q- I
利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。) e! j/ ~$ a6 X" S: p
將語音辨識的結果通過pynput在文檔中打出來。
/ B3 c* i8 L. e1 z0 g& g5 | v' r該程式目前只能支援英文。
- s' N1 _# ]9 n; W( G5 e* R2 b7 R5 Q( ^+ s, w$ |
import cyberpi
1 h; W( r. o4 N8 v5 Ufrom pynput.keyboard import Key,Controller
+ e: t8 p( _8 M* E9 V) Fimport time7 t; {& O* ~, H7 z9 _
( r9 |" M0 W5 z& \. w
keyboard = Controller()
" i- i1 T( H, I$ ~8 vcyberpi.console.clear()
. }4 f2 u7 _0 O9 |! xcyberpi.led.on(0, 0, 0)
& y% ]$ e. Z( kcyberpi.set_recognition_url()
6 Y; m1 t! \; R% T9 [& w2 j/ rcyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得% b, F9 B2 M% Y: U& V
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼")8 e! _3 P1 |) [* x' c2 T
while not cyberpi.wifi.is_connect():. g8 m$ o7 v9 `% c1 {
pass3 C4 ~* r4 Z1 \) A
cyberpi.led.on(0,0,255)
. K. _3 O& a$ @; bcyberpi.console.println("WIFI已連接")# j( N6 I- M. s) S- z: W
cyberpi.console.println("--------------")1 \) H! Q( ^" L' u* ? o
cyberpi.console.println("按下A鍵開始語音辨識")
9 C8 J Q! F. k2 T) G4 ywhile True:
, r4 R# q: s8 A' o. P% y if cyberpi.controller.is_press('a'):
$ l U" g- S: z( C4 C ~# z2 j keyboard.press(Key.space)+ l8 P% p5 u4 W6 ~8 O8 g& u- k5 m1 u
cyberpi.console.clear()3 A) v! A% d |! P4 j) q
cyberpi.led.on(100, 0, 0)4 |7 Q# W' P- h. k% E; p
cyberpi.console.println("開始語音辨識")2 W# P# V, g9 |0 ]8 U# W
cyberpi.audio.play("switch")3 A0 T ^; v/ K% B, F+ W
cyberpi.console.println("--------------")% N' p0 p2 ~7 z
cyberpi.cloud.listen("english", 2)
; q$ \) J5 G5 b9 _1 H& y$ c cyberpi.led.on(0, 0, 0)# Z4 a( g; a; _4 W9 ~
say = cyberpi.cloud.listen_result()% A" F: v4 _# b( p9 {" l
cyberpi.console.println(say)# C& S3 Y/ c0 A. v
cyberpi.console.println("--------------"): O. V" @5 Q# C- ?1 X' V) ?
for i in say:
( t8 W! F [- K7 f _ if i == '':
) _% Z& q& _4 d3 T, o keyboard.press(' ')
+ U3 ^5 d# `/ T% F3 w else:: n' Q2 f$ s C# s0 T8 ?
keyboard.press(str(i))
0 T$ I: j! j4 M4 {( A time.sleep(0.03)
, p0 q8 C, @# P+ i. F) T
7 ?0 F8 a8 k; @" U7 S, }matplotlib音量柱狀圖
; K. e6 }" c& x' Q6 O: Z* A- Nimport cyberpi2 T! X' ?' a. c- ]/ f& q
import time1 t- S2 E' k2 T% M& W- |/ P
from matplotlib import pyplot as plt
8 ?, @. C& v! y4 P# @% Y# W
1 c- o: E5 `! R; Eplt.rcParams['font.sans-serif'] =['Microsoft YaHei']0 S# j% L0 p$ E7 [7 g' Q6 v, A
plt.ion()
% D' P2 d: ]$ I7 b/ }1 s
& G0 W9 {. ?8 b2 o$ Jwhile True:( S8 p4 ^4 j. Z+ n
loud = cyberpi.get_loudness()
7 K5 F" I/ x% j/ \: E plt.clf()# w; j8 |, m! Q( m, d1 R. i
plt.xlabel("數據名稱")- h5 ^3 t0 x* }# H' U7 k
plt.ylabel("音量讀值")
( a& R2 X7 F; d, K9 E! @# e# f/ O- f y_locator = plt.MultipleLocator(5)& O' x$ u' B x ?: E1 S
ax=plt.gca()
: m! S- l) E# B) Z5 z- x ax.yaxis.set_major_locator(y_locator), @; T5 P: \6 w- D9 ?9 T8 m; h
plt.ylim(0,100)
; i, J2 A# r& }6 G" S& b/ H plt.bar('音量', loud, align='center',label=f'溫度{loud}')
3 D6 I, }, j, b9 u plt.title('童芯派聲音感測器讀值')" v+ r9 T" y! L, d- T7 B. A
plt.legend()
) K' ]; l, N3 k/ N' b* ] plt.show()2 ^9 e# H/ L7 V' r! g; q
plt.pause(0.01)" _/ I7 K9 r' a! M( }' X3 P- s
4 z5 Q9 C# o' S7 `# Z
( h9 I; ~7 b1 k1 H3 s" A) k8 hmatplotlib 多圖表顯示! o' I9 |- [ B3 U7 V* h
% j r* N8 }; ` gfrom matplotlib import pyplot as plt
; J- w+ q h/ G0 U& Simport time
. o1 `0 a6 N! Fimport cyberpi
9 f2 t" t& D4 u8 `1 _7 \
# c4 F( D& j N% E8 L$ \loud_list = []# w" i( L( m0 N. e6 q& n; V
bri_list = []
( f, s2 [1 I$ X$ tplt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體6 p2 n4 i4 A9 Z' X1 @9 c
plt.ion()! A& Y* c8 Z# ]
plt.figure(figsize=(10,10))" Z0 l) r( r" O6 K" [
plt.figure(1)4 q- |! }. e9 l7 a
x_locator = plt.MultipleLocator(5)
. U) f$ { Y, ^3 L2 v/ e: E1 {$ \y_locator = plt.MultipleLocator(5): Z0 `! `& N# _' C8 C* k q
while True:( J9 x# a- _. y, e) a; v! v
loud = cyberpi.get_loudness()
: L z9 l1 K+ N; l, R! e bri = cyberpi.get_bri()
) q$ t$ X( `: e0 @* s loud_list.append(loud)
9 d2 V+ ]0 a7 Y( r; v bri_list.append(bri) c" x9 `. S2 `4 c: C% u
battery = cyberpi.get_battery(): I/ y$ a5 _2 a0 {9 Y' S( U a2 u
size = [battery, 100-battery]) [6 u/ Z$ f2 R3 V8 K; F6 T
status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']( b! p# x* l: I7 A
ax1 = plt.subplot(221)# W; P) y* x7 t* g9 ?8 P4 @
plt.title('光線折線圖')& L; I6 X0 P! _
ax1.plot(bri_list)
( [7 z2 J8 W. c. K4 C" {' p" S1 m( X ax2 = plt.subplot(222)+ e; E/ j& I2 B, B# `5 X5 y: N
plt.title('聲音柱狀圖'), j- d# R1 G6 p: m2 l2 N3 [. X% c0 V
ax2.xaxis.set_major_locator(x_locator)
( v4 c+ m5 ^+ h3 o ax2.yaxis.set_major_locator(y_locator)
: q) T) W/ d$ z$ D: F plt.ylim(0,100)
- O8 F# K+ z+ g) u8 _. j* y ax2.bar('sound', loud)
3 i H& ]1 @. U ax3 = plt.subplot(223)
9 U/ ^, g9 A( {! g ax3.xaxis.set_major_locator(x_locator)
4 m9 o7 M1 Z9 d6 J) }+ u ax3.yaxis.set_major_locator(y_locator)
/ I( d7 |/ ~# ~' O; y9 a$ A plt.xlim(0,100)
- o! |" c) G: {; W; O. m/ C1 h plt.ylim(0,100)8 g! X- G. B" U. r
plt.title('聲音、音量散點圖')
$ O3 ?$ G( C/ [7 a4 e& e ax3.scatter(loud_list,bri_list)& M8 S' R- ~$ w0 }3 b- y
ax4 = plt.subplot(224)
( x- |' |$ f8 p( z3 n( T9 q+ y ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})0 O2 m, _( m8 p/ G: N
plt.title('童芯派電量')
& A5 P* s) x7 t& w2 t* C plt.pause(0.2). m3 s X3 V/ U$ c( [) P9 ^
plt.clf()
$ z' y! W6 [' A/ \6 X) H6 } if cyberpi.controller.is_press('a'):
) S4 o* h: d8 a! v+ v5 E% ^ break' V& E+ U" ^4 ^. _& m2 d- Y
if len(bri_list) > 500:+ E9 u. `* _8 N2 \ L' x
bri_list = []* Q7 D6 i; j3 I( v
loud_list = []9 u9 A; ~6 O& M
7 C* {# ]4 ~* H8 S3 z* O |