本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi 6 [- L1 {! Q1 ?" v' g
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
8 E# g1 G5 t5 T+ O1 t4 x
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載 ! Y8 l6 i' m9 I" D" }& u$ |
- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
3 c2 E$ `! J3 U, |+ m8 t! M9 g5 l# D 2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)0 v* B; h' n2 |7 i* W
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。: G' F9 }0 P. N% y5 U5 b
! w, v( \' ^ _3 L! U" W- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
& n, O0 X% L; w) s5 q 6 r b2 ^6 U. M+ ?" y
- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
8 Q: ]6 ]" w% |- S & s3 w6 e) ^7 a& O/ }$ K# \
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。
5 F) |/ g7 m: X/ H0 H
- V+ \( k. y; i9 |3.童芯派第三方編輯器程式設計準備
2 Z' m- G: Z: ^- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。
/ _5 |0 V! H4 A. U' ?! M
5 ^8 B0 z7 z- o- q9 f8 L4 K- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。$ Y. i8 |9 e! n6 L2 H
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
( p% \# L+ b. l- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。
& @$ `0 y$ t$ v; g
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 1 q; a" l0 s/ F- j% C
0 O: X' X/ d! H g7 Z9 m- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。' C2 x2 ?" L; ~5 u! H
4 U' ^" l/ x# Z/ e: J& T$ Y6 f5 W
4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 6 C/ e; N& c: V
5.一些程式設計案例
/ t T: [' m. M% F$ P童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput ( Q: [5 {- O% ], c2 D
功能介紹:
$ K) ?, x t6 ^利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。- y+ ]* U# l( a& i- f
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。9 E% ^) K: b& J6 z
結合藍牙模組可以實現無線滑鼠的功能。8 x7 ~* Y: `3 G3 l
, _! e% Y( _- r" n+ J
from pynput.mouse import Button,Controller
3 T$ z/ V/ V- Q- c, rimport cyberpi
- `* }, D$ }. `% k( U K! Simport time
7 f$ R! @8 D/ U& y
, E" t& c, [ v& H6 u, mmouse = Controller()
( x, i s% v/ ?0 h4 S0 U% s
: m( E- Y; E. S5 F. Twhile True:1 T/ W, q- \0 s, a/ J* D0 \$ ~* G
if cyberpi.is_tiltback():* _; s8 F( k. \ [% n# M
mouse.move(-3, 0): F) T0 O R! m
print(mouse.position)
) F1 i" M* z5 K3 J& {) H+ H7 B if cyberpi.is_tiltforward():
. W1 K* n! H/ V5 w! c9 j" u mouse.move(3, 0)
1 _! L$ e+ S! u! w1 k0 g* Z3 C if cyberpi.is_tiltleft():
" s5 N% F3 j9 m) M/ p mouse.move(0, -3)0 H8 {9 s9 D( q4 V" v! z' J
if cyberpi.is_tiltright():9 r" ]9 ~" E- @
mouse.move(0, 3)
8 X4 p9 ^/ {! B& P9 K if cyberpi.controller.is_press("b"):* X* d) v I2 E
mouse.press(Button.left)
- m) ?7 E8 ~- R) p# G mouse.release(Button.left)
$ r* H' ~% s, M mouse.press(Button.left)& i8 y4 u' W5 |* n0 ~% Z; k
mouse.release(Button.left)
4 S% T9 K0 n4 ?6 I if cyberpi.controller.is_press("a"):" G9 H& r" W2 n( @0 M* s) |) V- |
mouse.press(Button.right)
5 y, \; d* }! d mouse.release(Button.right)
, B9 |2 J& D0 n V time.sleep(0.01)3 w ]# ~. \3 M( h/ o* r
* @( g3 x8 _% _) t& T* E# q
7 a5 f N3 J' w
語音打字器
4 s7 w/ R* h' Y3 K. U. W3 H2 E" k功能介紹:
0 d. J* K- S1 Q5 S2 o0 d8 {9 a* k- M利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
+ A% [$ f1 t* I- N! K! D+ ^. g9 J將語音辨識的結果通過pynput在文檔中打出來。
6 r& L2 f7 M5 O7 E. F該程式目前只能支援英文。! `6 P' @$ g! j# ?8 S# y" E: I
8 P% W" _/ Y8 b7 X% }import cyberpi5 l" z) Y6 B$ b, K! C3 K" d$ I
from pynput.keyboard import Key,Controller" s' e7 Q/ O0 T6 i
import time, d/ `9 y/ U2 N; n7 P
( C4 L! H* L* j9 j+ |
keyboard = Controller()! @, R3 Z8 m' x6 u. \- b
cyberpi.console.clear(): }) L1 P! R* n9 G! m. I# Q% Q; V
cyberpi.led.on(0, 0, 0)
q' v( S" _" D+ i; Gcyberpi.set_recognition_url()+ a6 @8 N7 u7 V/ U4 u, K1 B
cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得 a$ n. z7 s$ ^! X3 ^
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼")
4 x: i8 K; L. O9 swhile not cyberpi.wifi.is_connect():
/ h1 w# ?( x, j6 `7 K, L5 e+ x pass' J# U: A0 J# o' q* W% }
cyberpi.led.on(0,0,255)
9 d- |, x- }! Bcyberpi.console.println("WIFI已連接")1 T/ b2 { ]5 I8 a# K$ x
cyberpi.console.println("--------------")
; P- s* U4 A! Z. l( xcyberpi.console.println("按下A鍵開始語音辨識")
8 j; q3 P1 F% y+ Lwhile True:
' l3 T K7 e. M' Z/ \) M0 G1 V if cyberpi.controller.is_press('a'):
5 z7 u0 f. s4 p6 @' G, C, I keyboard.press(Key.space)/ H. F ^/ h. V/ Z$ B
cyberpi.console.clear()% L0 R/ E8 t$ x1 L8 `
cyberpi.led.on(100, 0, 0)' F" Q9 B) L3 L" e8 V" N3 R
cyberpi.console.println("開始語音辨識")
( m1 @' u+ _# M) J1 E- M cyberpi.audio.play("switch")( D* W J6 K( d/ O- p3 X
cyberpi.console.println("--------------")$ k. n$ a1 E0 G1 d
cyberpi.cloud.listen("english", 2)# P0 D V7 N y, y0 \
cyberpi.led.on(0, 0, 0)4 n& N( Y& N/ Z! y
say = cyberpi.cloud.listen_result()0 B! \" ^/ I- Y; o
cyberpi.console.println(say): s' l% U$ i. l6 w7 q
cyberpi.console.println("--------------") D7 h+ F3 f6 Y. L
for i in say:
/ U$ ^% j9 _+ R. Z) W if i == '':
( t& Y1 ^" C, X+ J# m" I' \ keyboard.press(' ')
, {( S! J( J0 T% e else:
0 K! s- `$ V' x& R/ c keyboard.press(str(i)), y6 |9 @) ]- h$ k3 o2 u
time.sleep(0.03)
7 q, o( V, H- n) A ?) }" v
! @+ W4 x1 |6 t$ C s' Tmatplotlib音量柱狀圖 5 c9 a& B* c9 K5 @( [
import cyberpi8 b& ?3 T f: p" c
import time
2 y# I$ h7 g5 M6 H. P z8 ]from matplotlib import pyplot as plt
7 C( f9 v8 L Z. P" z8 Z8 W
) X) a& U) n, k: d6 d& _plt.rcParams['font.sans-serif'] =['Microsoft YaHei']. f1 c6 q4 u9 ]# N4 H
plt.ion()
& P& }) z" j8 D, T' Y# h
2 F" G. S" |7 c- m+ ]5 k" b2 wwhile True:1 g' o" `/ j( t
loud = cyberpi.get_loudness()
; C; l6 F) M: i! t' e1 J plt.clf()+ e$ Y6 {; x& w& m! t$ y: y6 C
plt.xlabel("數據名稱")" x8 q! _# j1 x# H7 X! ]
plt.ylabel("音量讀值")" t! m, }. N; O4 k' y, X- D( W
y_locator = plt.MultipleLocator(5)" R9 X7 M. Q W4 ^9 h4 K* N
ax=plt.gca()
# }+ p* H9 I% P& s0 a9 x) X5 b ax.yaxis.set_major_locator(y_locator)
\4 d% D* i9 P& Y plt.ylim(0,100)
0 w. X$ q% w/ U1 y3 W, J6 W& ~ plt.bar('音量', loud, align='center',label=f'溫度{loud}')
8 b+ I! O% L. T, J$ g8 \5 D plt.title('童芯派聲音感測器讀值')( m* u( ~ ?" Z: O, G
plt.legend()
6 |% H3 Z) f2 c4 \ plt.show()
5 K0 ?# S- b: ]# C. u* i plt.pause(0.01) x" T) f1 j% ~+ Y! @! W4 k
$ [0 X* G( U/ T: T& v7 w; Y( D
* @0 R$ F: B& o1 y2 E! zmatplotlib 多圖表顯示$ H( m' `6 r1 D- r. K
: ?3 O! a B5 ?, {
from matplotlib import pyplot as plt, v$ j' B: m' ]( V6 w j% N
import time
' K: i. ?# y% y8 Nimport cyberpi
" k( l8 p, g& v& y: C$ B! s
7 H" b5 [- D( m- g& q( F# rloud_list = []
2 @$ W: @6 T" k% B0 c0 _bri_list = []* p1 I b6 I$ t5 r
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體5 \6 S6 \. t( i9 B6 ~
plt.ion()
4 W+ i3 m7 N; Zplt.figure(figsize=(10,10))
: @6 q) \) C) d e cplt.figure(1). i) \: _: l$ a- j# {
x_locator = plt.MultipleLocator(5)% M2 B4 h: @ Y; P
y_locator = plt.MultipleLocator(5)
7 W# h7 B7 q) U& e: Dwhile True:, l+ g0 N5 i! k( }
loud = cyberpi.get_loudness()* l, \* J& S6 c9 \7 b, k
bri = cyberpi.get_bri()0 n' W0 B9 f* L
loud_list.append(loud)
+ m" t/ k5 w. F bri_list.append(bri)
$ N3 S3 {3 P- a1 A$ v4 S battery = cyberpi.get_battery(); i- }1 d! r* B _9 G% E
size = [battery, 100-battery]
& C# j' Z4 N: U status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']9 |2 |" j" ?) l: X
ax1 = plt.subplot(221): k4 n* y/ ?& S5 `9 @3 a6 e9 M5 U
plt.title('光線折線圖')1 a7 b7 g9 P0 w. D# B
ax1.plot(bri_list)
) p; w1 R7 J, @/ ] r ax2 = plt.subplot(222)! L, Q4 u8 f# g# i. l; m; R, n6 k
plt.title('聲音柱狀圖')
+ Q! E' A' s# D ax2.xaxis.set_major_locator(x_locator)
8 u7 J& ?7 H6 B2 Q/ M ax2.yaxis.set_major_locator(y_locator)
8 Z, p: e/ k9 Z6 H' ^ plt.ylim(0,100)" a1 z& x' r" q
ax2.bar('sound', loud)
1 \9 d5 l( M3 i) Q( K9 I ax3 = plt.subplot(223)4 p6 ?& S# U! g
ax3.xaxis.set_major_locator(x_locator)( f7 i* i6 k, h! d& ^
ax3.yaxis.set_major_locator(y_locator)+ B9 v3 F2 h7 M. q w! V
plt.xlim(0,100)
, g1 u2 f& |7 H; y# y5 m+ N, t( Y plt.ylim(0,100)# I' N& J7 ?3 U8 R8 z
plt.title('聲音、音量散點圖')6 b2 V. a0 r! S* `
ax3.scatter(loud_list,bri_list)
+ X8 @/ h9 U6 d/ I' L ax4 = plt.subplot(224)4 s2 n; p7 M* m
ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})! F V; f3 S2 d8 R1 f
plt.title('童芯派電量')/ Y( H5 e1 e C: g* T: w
plt.pause(0.2)7 g c& {. V+ a
plt.clf(); Q, t- r5 `9 A _) ]& y: t
if cyberpi.controller.is_press('a'):3 W# }9 v& ~) d9 ]
break7 p; w( `! _6 c9 L" ^' Y$ b
if len(bri_list) > 500:
+ Z$ A/ K2 e0 Z ^' {# P bri_list = []
7 k) T3 @, \' y1 [6 i loud_list = []
9 \# T- Z4 t3 n W p9 y8 K* U( t: @/ \
|