本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi
/ x, v z! T- M: j& |# V1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。, B- z, L7 J7 Z; ] D, x/ E
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載 9 C. U9 H6 r9 x
- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。3 c4 a. p7 a3 k: k1 y$ B- I& m7 m
2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)* B- l# N f& U% ~9 {
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
$ ~9 N4 e+ O+ J. ]; m' ?1 ^; b$ ] 9 s: v: H0 H5 ]& V. ^6 \7 q
- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
6 g# P0 s9 ]; _9 }! K! i 8 g2 A5 S7 _# x2 c$ b
- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
3 U$ L$ T& B: p , X1 O# ]8 _! d& N& Q3 L) @
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。& i6 g' x; D6 k" ^, K2 e
7 D& i$ a+ w' q7 B
3.童芯派第三方編輯器程式設計準備
- O* A" b3 G4 R! v9 \, c- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。. [% f9 e5 [$ T; `9 Y, W- F
3 M& I7 D3 O6 g0 y
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。0 R) v# h P3 M' @: w+ |* o# S6 b
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
) k, g0 Y" g) u/ r; W2 U8 l- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。& b$ O7 \1 p) c* e6 H8 n
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。
0 q9 x8 _+ H7 {0 c
5 m/ E+ b* t1 ?8 @% ?9 C" d- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。
5 Q U# y# N" ^ @- @ 2 F) u" C) V3 P* n. o
4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 2 J* E9 n h7 k5 M
5.一些程式設計案例6 H% e9 x3 i$ M: o8 Z
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput
. u' T9 f G4 l: c: N0 m$ l功能介紹:
( }7 [; c- C% a4 [利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。
% b' D# }5 v, Y" s通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。
0 z; X: E$ g h結合藍牙模組可以實現無線滑鼠的功能。
, M7 m* o( |: U' ?3 e4 v7 \" n( V/ j4 I5 y5 u, ^: Q }
from pynput.mouse import Button,Controller
, T# a0 A( y: p% ~4 k" n% simport cyberpi
% Z& q( |. \& C# u4 o0 l% vimport time) x; B& s& V, B$ v B& o' k2 k4 v
1 a2 Z8 o; o' Q ^5 Y5 J }3 e
mouse = Controller(): ^# ]1 A9 _# ~- L' t% m
. Y1 u4 U" N+ l5 H/ Z6 ]$ I
while True:
6 T/ Q! q4 W& D3 | q if cyberpi.is_tiltback(): Y, r* ?. p P' n- I3 J
mouse.move(-3, 0)6 ?3 v/ |& ^( R- o$ M( W
print(mouse.position)
* h- @7 Y7 [; x, V; ? if cyberpi.is_tiltforward(): Y9 W0 _$ O( r) ]6 n
mouse.move(3, 0)
8 z2 d% |- Q% i1 n& R4 q if cyberpi.is_tiltleft():" l, a, E; c6 J5 B. v
mouse.move(0, -3)8 X# V1 j6 i7 G
if cyberpi.is_tiltright():
- t! s. Q7 a% Q/ ]) `# C; R mouse.move(0, 3)2 W3 x y- T- h5 _7 e2 }- U0 `0 a
if cyberpi.controller.is_press("b"):
! a2 j% m% ?7 \. u' u mouse.press(Button.left)+ x3 h: d7 d4 s2 }* `# j3 u1 ]
mouse.release(Button.left)6 B7 g: d0 Z4 k+ u9 ~0 Z6 j6 `
mouse.press(Button.left)9 y) I* L0 q3 j+ L
mouse.release(Button.left)" i0 m4 M, s8 b2 @9 Y! q1 W
if cyberpi.controller.is_press("a"):
2 g- K: V9 p/ t9 K' U, @2 ~$ y mouse.press(Button.right)8 \% o, p/ A2 N2 V. \
mouse.release(Button.right)
! O! l" J1 s, Q e time.sleep(0.01)# q4 @. w; c) r* B: E
- D- N0 n6 a3 B
D# j5 ]8 X+ s語音打字器 9 e$ r8 y% L- ~- x, Y
功能介紹:
$ i& \& b/ u& t% f6 x; Q利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
( n8 I- `" N( l& |* _4 I7 T將語音辨識的結果通過pynput在文檔中打出來。
! f" s+ T% B4 W) h$ a! U& M7 h該程式目前只能支援英文。
6 k A, X1 o6 o8 h' }8 c5 ]0 H$ i8 k
import cyberpi% j$ F2 S7 u6 Y3 O
from pynput.keyboard import Key,Controller! H1 ]% W5 _; J8 g+ Q
import time* g+ J% r" P3 H( ]- v# y5 @# q$ \
$ E0 S9 W; N# E5 }5 Q |keyboard = Controller(). U$ y- m" a" T) m" Q p
cyberpi.console.clear()' g' h- X7 n/ H! [( O
cyberpi.led.on(0, 0, 0)1 V/ O1 |! w' ~1 A* N6 ?4 ?
cyberpi.set_recognition_url()
8 q( f9 J9 z* Ycyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得
. j/ l+ |+ U! n% kcyberpi.wifi.connect("WIFI名稱", "WIFI密碼")
% O$ U! X: n0 N1 V! J2 |while not cyberpi.wifi.is_connect():8 \# Y* b1 E1 O& ]- H# F. B0 h
pass
4 b- `( e9 M0 ^! ~cyberpi.led.on(0,0,255)* V$ W: I; q* U
cyberpi.console.println("WIFI已連接")% x( `, g" |+ J1 f
cyberpi.console.println("--------------"); [: U6 @' a% {( [+ V8 Q1 A
cyberpi.console.println("按下A鍵開始語音辨識")# U+ |1 H5 n$ O5 Z1 x( ~- R
while True:0 c9 a& R7 d+ F2 b
if cyberpi.controller.is_press('a'):
& V/ T+ T( f6 z% n# O% [6 j5 {, C keyboard.press(Key.space)) X0 x* O4 A$ [+ ?# n4 S2 |( W7 K
cyberpi.console.clear()
. p, d5 t4 |) G( F' e7 @3 P5 Y8 V( D cyberpi.led.on(100, 0, 0)
5 B- V+ U4 `4 `+ ~. s8 q. s cyberpi.console.println("開始語音辨識")" _8 I9 C2 o- M) V- p
cyberpi.audio.play("switch")
0 [6 O! e; R/ o& Z: F cyberpi.console.println("--------------")9 O0 t' I0 ?' n& s0 m3 @! {
cyberpi.cloud.listen("english", 2)5 P, {7 W4 C- ], b) T
cyberpi.led.on(0, 0, 0). n$ c, e# k$ n7 a' F6 b
say = cyberpi.cloud.listen_result()7 c& |4 D2 ?% y- I2 m+ r6 {* Y
cyberpi.console.println(say)
6 E4 m8 W, v4 |! r( } cyberpi.console.println("--------------")2 H, z- N- Y( Y9 j; U
for i in say:
* V9 c. g+ W6 v if i == '':5 r3 U! k5 O$ i3 K( n% x- a1 l
keyboard.press(' ')$ |2 P" L5 `/ e2 X/ X- v
else:0 \$ N7 z: n0 F- B/ B" M5 C
keyboard.press(str(i))
( W! t& F9 V. q d+ A7 o5 O1 H time.sleep(0.03)
* E: f- }8 W5 c! j7 m5 l* f/ B4 F1 t
matplotlib音量柱狀圖
, v4 I, P" g* Zimport cyberpi
5 s$ j% C; F* [+ W" ]import time
5 y* `! ~' W0 {. `* Lfrom matplotlib import pyplot as plt
9 r+ x& N4 j8 N: F1 ]3 U& B
& X% q3 Q$ y$ ~8 [1 mplt.rcParams['font.sans-serif'] =['Microsoft YaHei']* s3 J' C8 E. ~+ v
plt.ion(): N" H, ^/ j7 Z x) G" S0 Y3 P
) j5 N5 `' y" V x3 M
while True:" ^& ]1 [8 n& u8 h9 w6 F
loud = cyberpi.get_loudness()
* J- n! i. ]) v3 ]; k& o t0 d plt.clf()
# ^1 H, L( q1 x# g/ o& a plt.xlabel("數據名稱"). o- V4 g8 V# U( Y. I5 Z
plt.ylabel("音量讀值")5 J0 m+ \ @; Z: y0 a; X# |
y_locator = plt.MultipleLocator(5)4 P$ b; k4 Z# Q% o
ax=plt.gca()2 Y/ t3 k, A) G( z6 S
ax.yaxis.set_major_locator(y_locator)
- x: ~1 ?9 h3 a8 t& C4 Z plt.ylim(0,100)! B3 h* H! j6 s H
plt.bar('音量', loud, align='center',label=f'溫度{loud}')
' m3 p. E: p! ] h9 o plt.title('童芯派聲音感測器讀值')( _' i/ w# T: ~- Y) h2 m
plt.legend()$ x2 `7 [; {/ w8 p7 w8 \
plt.show(), v" O; H" @' r' C% c/ ~; u' s$ g
plt.pause(0.01)" z+ I% P; Y, W& Z( M
7 J( V, k X! `8 ?% V9 i1 `
& H& l9 ?+ d/ V4 e/ Hmatplotlib 多圖表顯示
7 s* _! E1 p% R1 j- o& ^
; v7 d8 i" y9 S5 T+ L& j- Q) tfrom matplotlib import pyplot as plt
4 O Y8 p. l4 }# [% C: \0 vimport time) ]/ h. f) M) B j: Y2 U3 D
import cyberpi
$ y2 ?) e) K' y) U p& \ 2 L4 t6 t, S+ g$ W z/ X6 I) y8 g
loud_list = []
3 a8 W. G+ R p- R* @bri_list = []" R. Y/ L8 q3 K; T/ r
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體% m& @" N, g7 h( Q; p
plt.ion()
2 G. S% X1 B& lplt.figure(figsize=(10,10))
& e/ C& \* Z% k4 s: J* v) h, aplt.figure(1)% {7 e" }! ]! T! }0 d
x_locator = plt.MultipleLocator(5)
, A/ [9 o5 ^ ~' B% R+ e! vy_locator = plt.MultipleLocator(5) }1 u" Z% j* w1 v) f& V
while True:* K! Q9 N4 e. n6 \8 U! z' h" u
loud = cyberpi.get_loudness()
. m3 O% M- y* }' L, `7 M bri = cyberpi.get_bri()
: D/ F3 Q' C" G5 w! S4 S loud_list.append(loud)
B0 b$ O$ {- q8 r6 K9 b bri_list.append(bri)
+ k$ ?8 N% A; D battery = cyberpi.get_battery()! \$ }4 J; n* i( T$ r
size = [battery, 100-battery]
; @9 C% U5 I7 n" g3 W status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']
; g& Q6 F9 Y3 h& Q. x5 F ax1 = plt.subplot(221)
. o0 {3 p1 @. e( t plt.title('光線折線圖'): J* @, P0 }3 y! w- g! x* B3 d2 X
ax1.plot(bri_list)
0 q' [8 l$ n3 p0 Y" c/ L ax2 = plt.subplot(222)- }: ~* \; v% _0 ` ]$ j' h! s* R
plt.title('聲音柱狀圖')
3 _# ^0 _/ m4 |, c8 {2 W ax2.xaxis.set_major_locator(x_locator)/ h K% Y$ V( R
ax2.yaxis.set_major_locator(y_locator)9 d* t N' h- ~/ |) ?( A( A: G
plt.ylim(0,100)/ ^1 d1 O) ~# I7 d: }
ax2.bar('sound', loud). b9 U6 N( R% Q* v0 T! p( T
ax3 = plt.subplot(223)' o" W1 K0 t, `$ `, y
ax3.xaxis.set_major_locator(x_locator)
" W- B! k( ~; s, H e+ { ax3.yaxis.set_major_locator(y_locator)
0 Y7 Q* {/ L3 b2 t plt.xlim(0,100)0 z" B) U+ M& | A* w
plt.ylim(0,100). ?; ^ D2 X( N2 [7 H1 ]
plt.title('聲音、音量散點圖')
: G+ c1 `% X, v. S+ [! F2 s ax3.scatter(loud_list,bri_list)1 y" I) i! ~+ i/ \3 \3 w4 d* b
ax4 = plt.subplot(224)
: M0 P# R6 @2 N# [2 s$ T ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})2 z* ~# K9 Q$ E9 y# p% `/ V) p0 ^
plt.title('童芯派電量')
& a8 z @1 J+ u' T3 L plt.pause(0.2)8 x1 o; D$ _1 O+ }6 j" U2 w
plt.clf(); ^* e+ J2 k/ Y" B9 f1 I5 H5 T+ ` V
if cyberpi.controller.is_press('a'):
8 J) n O7 z! | M g, { break j: }/ u+ X- Y/ s3 ?; O( {
if len(bri_list) > 500:
) m1 e. k+ j/ R" ~' ]* z( w6 q bri_list = []
) m& n8 T- n. _' v- M0 t" k% Q loud_list = []
) |5 J- e: Z( j: G) ]' I/ @/ h; ~ l1 v, y
|