本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi
+ e7 j6 K5 I4 y3 h) x& d1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。' o% f9 ]0 K6 w# {9 G: b+ |
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載
' d5 f7 j* ]5 ]; N b- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。" {, u$ }# M! _+ t8 ~
2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)6 s- ?: }7 m5 \0 [6 b7 a. G
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。 S. B9 U- i8 k
9 \: V: U, U! F) P. p1 [5 V
- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
* _3 Y3 ?7 U5 \
3 `( T8 m) y) A( P' Q- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
% n8 D, @- s+ f8 t
" w* K, {8 @+ Z! u' q3 Q- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。. U3 {* z1 i l, H" K
: C* c _) ]4 y) b& a; O3.童芯派第三方編輯器程式設計準備9 M- m3 a* ~% Q9 w9 }; E) B
- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。2 R" U- L. p5 X5 N/ G9 l. D! [
B+ @8 U ^) `) o( l
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。
6 E0 H8 [6 r7 W1 g
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
* [! p3 y7 V* h. s& R2 G: x- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。# H5 q$ a) t% z9 h: l# Z5 C j
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。
o; x0 T8 U- C w, t3 p( J0 C; R1 E7 u% ]7 ~5 t' }
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。3 E! l; K0 E0 C. C
; u: d3 j: E2 \% o* W$ U& K4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 ! i9 ^3 x) O( k5 _( L
5.一些程式設計案例' Z, l' ]* g9 D& \( E# o
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput
2 H. ?5 V( c3 f0 `- {9 S) a功能介紹:8 V3 U9 @" O+ P9 _4 _! T# e0 K' f* d
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。5 J; E0 z0 K5 [4 O2 } |
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。
' S" ^0 t* i: v) R結合藍牙模組可以實現無線滑鼠的功能。4 `" W. @, r. w8 ], V
, i" @4 h# N3 \2 [5 Ufrom pynput.mouse import Button,Controller$ x+ {: k( E9 S- x! W1 f, l
import cyberpi& d$ [/ n7 ?& @' y4 X2 N
import time7 w+ i2 |$ H$ e
2 X5 D! B6 C+ u
mouse = Controller()( `/ q T" ?+ \7 v7 J
3 o0 s4 L5 e" i: W$ k
while True:* |. d8 D6 U! s8 Q2 {0 s
if cyberpi.is_tiltback():1 V% L9 z! ?* R6 a
mouse.move(-3, 0)
0 w) z6 R7 ~, r7 _3 [% [7 b* O print(mouse.position)
3 U( u6 {, e9 W; n& t if cyberpi.is_tiltforward():6 j( ~% [2 S( V. y
mouse.move(3, 0)' }4 n/ {! U3 A* t2 o4 [# m
if cyberpi.is_tiltleft():( G7 ]0 Y) b: W( Y
mouse.move(0, -3)
5 e6 y! c3 [" ? if cyberpi.is_tiltright():
: ~0 r1 k$ A( M" N8 \ mouse.move(0, 3)
1 ~* b% B* l. p4 f3 E, K' j if cyberpi.controller.is_press("b"):& D- T8 `% [$ X+ r
mouse.press(Button.left)
5 r* ?& N4 P4 b( _7 } mouse.release(Button.left)8 _# h9 I s4 i% {! ?+ `7 C
mouse.press(Button.left)
- ~5 v4 {4 |% m mouse.release(Button.left)
9 h. S0 E$ x0 F, g& J: A5 ^ if cyberpi.controller.is_press("a"):+ C: B2 C# g7 u5 D1 Z1 s
mouse.press(Button.right): w9 g8 Q% S' \5 ^! V
mouse.release(Button.right)
6 u' X. c( ]4 j4 \- |, L time.sleep(0.01)! P. Z* }: G' B
8 x2 a x% G, |+ R- R, V4 J4 P' L$ {( @- Z5 g5 O
語音打字器 ! d4 n. a! ], n# @+ x3 H. m+ C# v
功能介紹:
9 \8 N. P% q: B7 i利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
; B o9 [2 O5 C) n將語音辨識的結果通過pynput在文檔中打出來。3 m: h' Q% d' ^5 v8 C- g
該程式目前只能支援英文。: ^5 R5 ^& v% B( d# R
& R3 v" f, b1 a" w( |/ L
import cyberpi/ t7 A1 X5 Y( d7 G! Q6 L
from pynput.keyboard import Key,Controller
5 U1 l+ K1 o2 v: J0 Z N+ c. p- Timport time
2 t; D* [8 A+ R
0 R: b, a0 f$ \5 d+ g+ xkeyboard = Controller()' V4 m' O9 s0 e' r0 H; j' n
cyberpi.console.clear(); T" g+ W' V& a' F, d' m6 d$ Q' u$ [/ b
cyberpi.led.on(0, 0, 0)
9 Z- @, `+ L. {. a1 Fcyberpi.set_recognition_url()& ~$ ~8 j# F6 J1 c0 Q: g
cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得
4 d# r& S" u% R: u2 Z' acyberpi.wifi.connect("WIFI名稱", "WIFI密碼")4 N; {, W4 a; b$ C
while not cyberpi.wifi.is_connect():1 b0 c/ T3 r! [" w
pass. I! ^, O( u) q% k# W3 P
cyberpi.led.on(0,0,255)2 o4 |4 b* A* J% m/ h! b4 [* t$ m
cyberpi.console.println("WIFI已連接")
* m% [+ q6 [3 ~5 B7 rcyberpi.console.println("--------------")
9 l: z! q- q7 W- ~( y+ \cyberpi.console.println("按下A鍵開始語音辨識"), E2 I0 l. p+ I
while True:% W8 e* z$ Q4 L* Q2 ^* F' g; e
if cyberpi.controller.is_press('a'):. y# q- ]" n' g7 U% ]; V0 W
keyboard.press(Key.space)* G9 ~0 p0 k5 I9 S& c3 g/ T8 c+ Z
cyberpi.console.clear()
- g! {' H3 b) G5 ?8 j- T. M cyberpi.led.on(100, 0, 0)
% z% ?$ }4 v% n6 | cyberpi.console.println("開始語音辨識") [& Y+ E5 W& W* G
cyberpi.audio.play("switch")( {5 j; u7 s" P4 t# `5 {' F
cyberpi.console.println("--------------"). @; o5 p# n. F8 L
cyberpi.cloud.listen("english", 2)
9 O5 S3 _4 a* q& z" z# x. ]8 s cyberpi.led.on(0, 0, 0)6 S1 r2 l% Y, ^# q0 a i5 R4 E; L3 ]
say = cyberpi.cloud.listen_result()
7 M* x$ ~+ C% R( P- E cyberpi.console.println(say)
, v' [! N5 r B: {4 W cyberpi.console.println("--------------")
+ |/ [6 p3 C- T, i; D. w( M0 y for i in say:
9 x" T1 w7 C7 A& O) ?2 x! y) ^ if i == '':
& r2 \# q4 C1 @) R2 f/ J4 o keyboard.press(' ')
# q [/ J, d$ z" J) m else:
' ~' ~$ W- q5 M7 H- i; k keyboard.press(str(i))
% a% V8 M; S# Y+ a time.sleep(0.03)7 f8 {2 d! g4 ^0 Z; F; G Z/ K
4 K, X1 ? h$ N4 umatplotlib音量柱狀圖
& a6 A$ {, h4 ]/ uimport cyberpi
0 X8 w+ c0 j6 E Z8 \. Fimport time0 i6 G! b- b$ Z2 [6 ~
from matplotlib import pyplot as plt. A6 [) ?' r% V5 p
; r8 k1 Z" ?( Z& o+ q2 Q V
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']. o. ]7 \0 n& U$ {0 @4 H3 ]6 g
plt.ion()
8 A5 |$ P0 {. R f { $ B$ B' {. s" L: h4 p H
while True:% F" K3 k, j. a% i. p
loud = cyberpi.get_loudness()& j* C x: n2 o+ R Y$ u5 B
plt.clf()) e, S2 s2 J$ w" ^3 ~/ v
plt.xlabel("數據名稱")0 [, D D' ] n. A( [9 i
plt.ylabel("音量讀值")* ~& k* z! x. L4 Z
y_locator = plt.MultipleLocator(5) s B( ~5 E, b
ax=plt.gca()6 C: M ]) P) I& W
ax.yaxis.set_major_locator(y_locator)
& x9 n& S6 `+ \' { plt.ylim(0,100)+ Z8 t8 p2 G7 Y. z: w W
plt.bar('音量', loud, align='center',label=f'溫度{loud}')
$ p3 Q. d& ]4 `# P plt.title('童芯派聲音感測器讀值')& \* }' R7 r, q+ T8 q9 o
plt.legend()
8 L9 F% P/ ~1 h6 _0 N2 E plt.show()1 {$ B- @3 c }
plt.pause(0.01)! N" d, x3 z- Y R
! J: [0 \7 @8 b# r+ Y, ~. {+ J# [
" g7 M1 |0 E# T g" Z) U1 ^matplotlib 多圖表顯示$ f0 e f7 ~* J' O' b
4 W6 y2 `& T+ K8 R* W# Y( C% B+ z
from matplotlib import pyplot as plt
0 l J9 K! H4 V- Eimport time' R. ~, E$ c* M0 `
import cyberpi8 K5 n6 T7 `9 I* b- ]- \+ o
% ]7 v6 ^" K2 P& q- a" S0 m k
loud_list = []+ y9 p# M- b) n! t8 `6 c
bri_list = []
1 G: c- R) q: r9 q( S; {* vplt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體5 R* V& h! D& d4 p0 _, P* x
plt.ion()( o0 O' h U2 _5 v1 H* W5 k6 x
plt.figure(figsize=(10,10))7 f2 \% u+ l, d% H% x
plt.figure(1)
1 }8 Q8 l' \0 o q* Y' z |# [x_locator = plt.MultipleLocator(5)
6 ^1 G! Z5 [2 c, K/ j* hy_locator = plt.MultipleLocator(5)( A7 ?; f2 n6 H! s; l8 L& S
while True:
0 ]3 B5 k% H. j& m loud = cyberpi.get_loudness()
$ V8 P% N4 s5 {, M bri = cyberpi.get_bri()
3 c7 E: d( n6 p$ _2 Z/ h+ G loud_list.append(loud)+ d' m1 f0 P8 c f" E6 F! k
bri_list.append(bri)! x3 T8 h* i/ U2 M9 O2 h" [3 s
battery = cyberpi.get_battery()8 |- W% Q( ^0 }
size = [battery, 100-battery]
2 c" L3 y$ I6 P/ o status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']% L/ q1 \) d% ]8 D7 J# t
ax1 = plt.subplot(221)$ {2 u3 w' y( p; Y" Y
plt.title('光線折線圖')& K' l9 y0 ]/ V9 O; p5 X
ax1.plot(bri_list) j! }4 e. @+ d" \
ax2 = plt.subplot(222); {; v: y( U; m9 K( R3 A
plt.title('聲音柱狀圖')
2 X+ A/ Y. C2 \+ x: } ax2.xaxis.set_major_locator(x_locator)
) P7 C4 M) d" z* A7 t1 M. z, [2 c ^ ax2.yaxis.set_major_locator(y_locator)% ~. S3 x! t; t. R# O6 U$ ?6 A; s
plt.ylim(0,100)
. k0 ^" b" z6 t ax2.bar('sound', loud)
" X; O/ _8 b3 i A, m6 L, I) } ax3 = plt.subplot(223)2 K) @' G! f0 T/ k: U8 ?, P: u
ax3.xaxis.set_major_locator(x_locator)( ^: G; G+ w$ _ u% K
ax3.yaxis.set_major_locator(y_locator)3 I3 L+ O% u8 J4 O
plt.xlim(0,100)
* L6 a; a/ U- w9 R0 L2 ? plt.ylim(0,100)& H S5 ~, F1 f& Z, y- K, F" J5 O2 P
plt.title('聲音、音量散點圖')1 p5 @+ B+ m8 x4 F
ax3.scatter(loud_list,bri_list)
. X0 j- k8 c5 L ax4 = plt.subplot(224)
( y6 S" h4 R. |4 _ ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})' i; A" [9 d( h
plt.title('童芯派電量')+ C% C. n3 [) e8 I2 x: I. i) E
plt.pause(0.2); v3 k- w$ e' Y; C. E/ ^6 W
plt.clf()
; e( Y) t/ G5 [, t if cyberpi.controller.is_press('a'):; v7 L4 ]7 e0 v" t E4 |$ l) c. }
break3 I' D: _. B1 G* ]% c
if len(bri_list) > 500:
/ v' Q1 _$ u6 j: d; e bri_list = []
7 ^7 V$ ~) k+ E; w9 } loud_list = []
9 z. _& Q* u' y0 r6 v, H4 |( C$ j( s& R$ m
|