本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi
7 A+ z8 {& {% O# j# V1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
$ u7 f/ X0 n, M/ X. F
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載 * r! h: U% _/ P' N2 O9 |, x# Q
- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
1 D* D4 l# f: ^ 2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)1 Q! R* T) K7 P
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
. u5 u* Q" O. D; z6 G
+ Y# {1 V+ V# `3 s8 r# U4 t- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)$ e% L5 e4 [1 D
0 i+ E. r, c2 }$ P0 z/ [
- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
1 g9 X) d( ]) p - c, u5 e) w# `- b8 ^
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。
+ E/ d. i- r) r* l; n- c % _% }2 y+ ?! t# S7 v7 K3 P
3.童芯派第三方編輯器程式設計準備
) l5 l5 s c D1 M6 L2 w- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。
H% u5 Y6 t2 W# t2 s- \ , f7 e7 J1 ?7 R. ^
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。3 ]( a: V( t @8 a. W h
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。 . ~! c3 j5 N9 o0 N5 Q( N5 b
- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。/ M% W- R; g @: ~: J
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 2 M" q8 [6 h1 c4 m: s
' z" n3 T+ C* Y, O% N
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。2 u' X" C7 \6 P8 E! ~7 ~
, w9 @) e. J" g- t6 P5 V* N" W4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 5 f8 p- d$ y4 }! J; R
5.一些程式設計案例1 q$ t8 J6 Z1 M) o7 j$ @, j3 F6 _+ n5 q
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput " c0 F! x. }& } H
功能介紹:3 L6 n. I( ~2 ~1 ]
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。3 v6 ?9 i5 p" Z d% T6 N& d
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。
- f, q0 p! r; ^( `結合藍牙模組可以實現無線滑鼠的功能。
9 M) l4 {0 g- F: P( ^
( j0 N+ _) B% G" {8 C8 F) Kfrom pynput.mouse import Button,Controller' j/ k1 V( \8 t$ X9 ?8 h
import cyberpi
: W! U% z1 ]8 R$ m+ w5 Uimport time! w# F7 V1 Z: J5 \
7 B. H0 a3 M8 O* C. l+ H" Mmouse = Controller()
2 B m$ S; t2 H
5 t7 ]* U \% Y! V/ C- }while True:5 W0 v) m% u. I5 M8 m' K7 F- M, F
if cyberpi.is_tiltback():
{0 b- \: }& r2 s mouse.move(-3, 0)
5 z4 E+ O6 b0 w+ E/ Z, B" O print(mouse.position)& I7 P- P) I! g, N, E
if cyberpi.is_tiltforward():/ \/ F* U0 Y5 b& L7 j4 z: T0 ~ G3 k
mouse.move(3, 0)
! y/ }$ ]7 o d3 Y1 X. j. K if cyberpi.is_tiltleft():: h2 t5 ^" T. d% ?; T
mouse.move(0, -3)
. B2 |* ?5 Y( j2 G2 o1 _! O9 T if cyberpi.is_tiltright():
- r) g$ o& c* P4 R! x0 E+ W5 h mouse.move(0, 3)
) {4 v; @) D: Y& [ if cyberpi.controller.is_press("b"):. S' `* b9 c( o/ E1 y
mouse.press(Button.left)
+ z' @6 V0 t7 _3 a( ? mouse.release(Button.left)
/ I0 I9 r2 R6 ] q0 }0 E3 D9 X) R mouse.press(Button.left)# k. \+ _ l ^% O; Y# W1 |" H# Z
mouse.release(Button.left)6 T$ {( [3 X, u* l) J
if cyberpi.controller.is_press("a"):
. {* |' i4 U& q5 }! U e mouse.press(Button.right)( e7 H% @/ F$ h; n
mouse.release(Button.right)
" v% D3 j8 [4 e4 } r time.sleep(0.01)
* G, t& g1 g* G! B. Y5 J8 |9 X, ]; t* _) I% ~" R) e1 B2 P$ g
& K) F" j& f/ s5 |; ]
語音打字器
2 Y( P/ i5 e; m/ C% x$ T$ v# J+ ?$ R* d功能介紹:
4 E" f) ~ O; C! D5 u利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
* [( T' b1 D: V N將語音辨識的結果通過pynput在文檔中打出來。
* C/ d) k4 D) R; k該程式目前只能支援英文。
9 E6 z- i. S: J
6 Z, e! V% Y/ j) A w! O+ M! x9 himport cyberpi
\7 F. f2 H0 q4 s& `$ c9 ifrom pynput.keyboard import Key,Controller9 }3 }: ~, f1 M5 Z, w( Q0 a
import time
/ `8 r8 b: C2 j ! o4 ]4 z. q' I3 X+ y: q& {
keyboard = Controller()! t# j6 G$ U ?; d2 x
cyberpi.console.clear()" G. \2 v" R/ M K
cyberpi.led.on(0, 0, 0)$ G z6 N! Z2 B; I1 @/ I
cyberpi.set_recognition_url(). n2 m! s3 ]' C/ o
cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得8 \# v1 T0 B: R- L
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼")7 d3 o6 c: @( ^ P1 t3 _. y8 R
while not cyberpi.wifi.is_connect():# k6 l P% ~: F% |( Y0 E! J: Y
pass. L+ N' ]4 Q" Z; v
cyberpi.led.on(0,0,255)
" Q' [2 f2 g4 C8 K; N) ecyberpi.console.println("WIFI已連接")) q, Y( T: a$ j2 y6 o* @
cyberpi.console.println("--------------")
/ R* o8 c5 w% x% W4 W3 k4 ^$ V- ?cyberpi.console.println("按下A鍵開始語音辨識")
+ U0 B- |( y' F# I! i( Y+ jwhile True:$ j3 `$ ^8 B2 G
if cyberpi.controller.is_press('a'):5 i1 R7 v- h, c& J
keyboard.press(Key.space)
% c8 I0 P4 e( Y3 d! [ cyberpi.console.clear()" J- ` y. n" l
cyberpi.led.on(100, 0, 0); U3 U- u Q3 f) W9 H4 ]( S& j
cyberpi.console.println("開始語音辨識")8 u; L+ |1 C8 V" b: s
cyberpi.audio.play("switch")9 S1 i- r% b# T$ ~+ u6 F
cyberpi.console.println("--------------")+ Q& {+ r7 ~' [! v9 o
cyberpi.cloud.listen("english", 2)! b% Q4 U7 j2 W N, S
cyberpi.led.on(0, 0, 0)
2 K2 Q; {1 u) k, y6 @ say = cyberpi.cloud.listen_result()
1 y0 v$ K4 v M8 ~5 A4 g3 X" a5 a cyberpi.console.println(say)
; z2 b8 V1 ?. z% b' p) \6 N2 G cyberpi.console.println("--------------")8 I; `% h- E0 }
for i in say:1 f$ x3 Z$ A; O, S8 I K
if i == '':9 N+ n0 ]2 H4 M5 j
keyboard.press(' ')3 x; F5 w( r; o# k" X5 a- f& G
else:
$ f \) ^$ t) l: x+ Q+ D& l9 q2 E keyboard.press(str(i))" i+ y- w q. A' V, S3 L
time.sleep(0.03)( |& e9 T" t; `
$ H* E+ z! z+ amatplotlib音量柱狀圖
0 @0 z3 o# v2 }+ yimport cyberpi& Q) k; |/ e2 Y) ` k4 b
import time0 {& v. U% c+ K
from matplotlib import pyplot as plt
# X9 [& y6 L3 L5 g % Q5 L9 L/ \) @8 o( a" F
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']) S; ~" I. Y3 X" N2 n* B% X
plt.ion()* [* `$ J6 U* v S, [
M# h, b9 a/ L% B1 Y8 Qwhile True:! V) i4 n: S6 u3 i! |
loud = cyberpi.get_loudness()
% k: E* V; B# u$ [- \6 R plt.clf()
4 X& B/ Q- x, |$ Y plt.xlabel("數據名稱")
. X8 u( v6 w$ w; X0 a3 N, ? plt.ylabel("音量讀值")$ N+ ~9 f+ s. s+ ?3 q" ]2 P
y_locator = plt.MultipleLocator(5)4 ~+ i; M; I1 K
ax=plt.gca()
3 Y$ j: W$ v& C% ^, S" E8 X% } ax.yaxis.set_major_locator(y_locator)
% |7 Y9 W# `3 O2 R! V" N# Q, b plt.ylim(0,100)& J" a% ?; P& r
plt.bar('音量', loud, align='center',label=f'溫度{loud}')
y3 _' s5 i \1 N7 R' g- @ plt.title('童芯派聲音感測器讀值')! ]* Z) n, W- J4 x f3 S7 ?
plt.legend()
7 y# q n9 c/ v' ^+ X5 F" K plt.show()/ Q( u: {* O1 P5 x
plt.pause(0.01)
1 ~. ^7 o x- c, u1 R; I
0 V# Z& F2 q; k, x; u3 x! N
! P2 Q2 h2 g8 ^0 }matplotlib 多圖表顯示
- D0 i+ } N" l$ s5 M4 |; f8 o+ I; G
from matplotlib import pyplot as plt. E, o* a* x: W u3 R
import time9 s( N1 l( L1 F2 q' z* x
import cyberpi* }1 W2 g( i4 |3 R1 o. o' p
8 i& Q7 R. U* u9 L
loud_list = []
S$ Q& o' D: @bri_list = []- i" E9 v d0 Y# d4 R* h! u
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體
" I T. a+ j. e+ c" a \plt.ion()
# x" x; D0 q% ~2 r |% Qplt.figure(figsize=(10,10)): s' F' y4 f! p% g, l3 E, y8 ]
plt.figure(1)6 p8 z; v c& h4 H. Z% A
x_locator = plt.MultipleLocator(5)9 x% M5 I; ~& A: q4 F9 n# i
y_locator = plt.MultipleLocator(5)
- R! ]$ H: o1 O6 |2 {while True:) J% s4 W7 { o8 k5 t z
loud = cyberpi.get_loudness()
+ j, Y) X- ^" ~9 ~8 w bri = cyberpi.get_bri()
& V- c6 a6 J4 J# P* P6 C; N. z. Z loud_list.append(loud)
0 _+ Z) x: y7 Z7 m bri_list.append(bri)
, d5 S" o/ p1 L# u- Z7 `. | battery = cyberpi.get_battery()4 B/ s1 ^) V+ k3 i: n) [# S
size = [battery, 100-battery]. }( {9 x0 Q, o+ P7 R7 T
status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']1 t7 l& s2 l. O3 n# I
ax1 = plt.subplot(221)2 L: I( j8 `9 b) G3 S
plt.title('光線折線圖')
- L5 ^, m. F# v ax1.plot(bri_list)
+ m2 h- \$ T. F" Q ax2 = plt.subplot(222)" c* F7 p1 p( T
plt.title('聲音柱狀圖')+ \% f8 q- ]3 b; `7 b* |6 C6 C! P
ax2.xaxis.set_major_locator(x_locator)4 c5 F0 T$ f* G6 ~3 X
ax2.yaxis.set_major_locator(y_locator) a9 d! a! y. W
plt.ylim(0,100)' Z# b3 ]. s y: O
ax2.bar('sound', loud)9 p" T4 F0 M {4 p
ax3 = plt.subplot(223)# C3 `5 O% a; w8 M: a" W
ax3.xaxis.set_major_locator(x_locator)5 g7 Q0 g- _- @6 a% {9 t& z I; M
ax3.yaxis.set_major_locator(y_locator)
$ ~* ]2 J9 v0 i0 V9 I! B1 C& k plt.xlim(0,100)
8 s: P6 m7 U+ K+ X plt.ylim(0,100)
. e! u- R" e* t1 H6 s D plt.title('聲音、音量散點圖') V$ v+ W4 @# ]! q- t) L
ax3.scatter(loud_list,bri_list)6 C) v. a! L" e# M. Y- v
ax4 = plt.subplot(224)
: c- E) d( `# [2 e" C3 M- Q f ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
8 M: O, z# m4 B6 [% C; i' J plt.title('童芯派電量')
% q/ L) r q; G) }% O5 Q( r3 c/ a plt.pause(0.2)& F1 X( r1 [3 V% o3 v3 n V
plt.clf()2 G- x. ] y* z: ^- s
if cyberpi.controller.is_press('a'):
9 [( z: L5 ~, {, C break4 X, h) A5 m0 [& a/ G k
if len(bri_list) > 500:
# }0 j+ P( {6 N& H bri_list = []% d. D u4 G7 q5 X: w# O( a
loud_list = []1 K' Z2 E1 V0 H9 E5 {
. |0 L6 ]3 I, f0 U
|