本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi g% G8 h" r: _
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
2 t* a z$ p0 j; w* v7 V( ^: W
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載
- x& c8 k% o7 D- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。& X. g+ |1 g/ Z. g8 C' |; L
2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)* ]8 y2 n6 P* Y: u$ D0 ?
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
: v2 a& q- F" Y* E! X9 O
0 m3 |8 h/ ]% j. P- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
& a6 j9 A& H6 G6 J+ q4 |& A4 L
) ^! r( Y; a4 \- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。; r% g7 Q4 Q3 c4 F9 s! |9 L
/ M! \2 P/ m7 {0 b$ u
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。- N1 {2 {6 o1 r) w4 B& O/ K$ q
2 e9 v4 d' X- @. K/ _6 P7 u8 Q
3.童芯派第三方編輯器程式設計準備8 R+ t3 Z( ^0 l- {
- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。
1 i# m3 ~5 G6 o2 b) e9 |" n2 k
, L8 l% d7 {* [- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。, K, @" t) C1 C& O+ ^9 H
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。 : s: E- o- v. O- _
- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。
8 w% s+ M; z7 h6 P0 Q
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。
* c) T: T4 n& B% ^- K4 |1 O9 {+ w) Y/ N. E- c# h
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。
- F/ L! S2 ^# s- x- f: x6 u. Y
7 [5 J1 `. z4 g! u$ ~4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。
7 K6 t" v4 `, R. |" L5.一些程式設計案例( d8 u5 x5 U/ h8 z: H
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput
$ m; {3 @8 D0 Q7 Q. N2 W8 X' B- o功能介紹:
+ q: D8 w' n1 n6 m$ M8 Y* }( W% H利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。
; ]+ ~2 L3 a+ a% W/ d6 r3 i通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。
% n+ |6 r- }7 d. Y1 o& y6 M, b' f( L結合藍牙模組可以實現無線滑鼠的功能。
" p- z5 ^) c, a# i# c: S. r I7 f( H- v: S+ s! O, H
from pynput.mouse import Button,Controller; T3 T2 [8 h3 p8 C$ ?7 d
import cyberpi
7 B7 k. |. L! c( r, R1 `6 t" T4 yimport time
7 C2 a+ m' E* g' d: f, J2 I% o
2 ^+ K( |8 I7 Y4 Z+ k; ?mouse = Controller()
9 |2 o5 A- G7 x0 h% a$ \4 o
" w+ w& M2 J$ L0 S& Q3 zwhile True:3 K/ @1 n8 E2 J4 K5 w- j
if cyberpi.is_tiltback():
- N* B1 n# h1 Z7 F2 x2 y5 H mouse.move(-3, 0)
& g) |4 M: Q! h5 W7 o print(mouse.position)
: X$ n- p# }, P0 t" Y7 F" W if cyberpi.is_tiltforward():
3 t" s8 K0 K+ {% K: q6 V8 t: J1 Q0 n mouse.move(3, 0)
$ x5 E) i2 d( O if cyberpi.is_tiltleft():3 f7 I( z% i; \! @* i) ?
mouse.move(0, -3)
+ J; {/ M4 S7 A0 u) U if cyberpi.is_tiltright():' a( O5 T$ x* m
mouse.move(0, 3); X5 i& _! z; e1 h3 M$ o' @0 z
if cyberpi.controller.is_press("b"):
8 \0 L3 ~/ |9 u. i1 S# O, { mouse.press(Button.left)
! M: p$ q$ C$ i s& ^ mouse.release(Button.left)+ X2 N! A) l0 N9 A' t9 \
mouse.press(Button.left)! F/ e2 `$ I y4 S- E
mouse.release(Button.left)
9 ^# U9 n! n' ]- ^' t8 i+ T+ m if cyberpi.controller.is_press("a"):
" ]. t% b/ U) R( T+ L1 t mouse.press(Button.right)/ F7 Q) {6 g; u7 {( F* l9 h) F; ] l
mouse.release(Button.right)
# ^4 G5 P7 G9 f time.sleep(0.01): @4 k: N, w8 s$ Y4 |0 A2 k, g
( b, z# t4 C6 P& _: {
% c6 K* ~6 ]/ X c語音打字器
4 U+ a9 f' f, D: p8 J- ?4 y/ ]0 p功能介紹:
) ~ E! D, O/ _" w# @2 `利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
& _/ C4 p% T) p% H3 S. N& L將語音辨識的結果通過pynput在文檔中打出來。
1 k# J0 G7 y d$ w5 y該程式目前只能支援英文。
7 r% r/ @4 f1 ]1 R, t7 u
2 b } W1 `4 Z4 o- I: K$ a, Timport cyberpi7 T+ I$ O* v. f7 j
from pynput.keyboard import Key,Controller9 o5 B! f3 m: D) B3 d) p
import time
5 _3 m: A- E; r& h, c
1 z1 Z s, |+ a1 u3 _$ W: l& H0 [7 L$ Hkeyboard = Controller()0 r; A0 v& {6 i Z5 ~
cyberpi.console.clear()
/ r5 y3 o2 G# U4 l+ ~; x$ u' ecyberpi.led.on(0, 0, 0)$ O7 N% ]+ O1 n7 Y! {
cyberpi.set_recognition_url()
# M1 G( m z, A% A" t3 O% X1 s# hcyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得6 j- B5 Q# b1 S9 z8 B6 r
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼")' y p0 v( n7 H/ g7 | G
while not cyberpi.wifi.is_connect():- E# ^3 i/ E- p' K
pass
4 V. z% l5 y! B0 H( V* Tcyberpi.led.on(0,0,255)
# `" R* P9 T3 P5 r- ecyberpi.console.println("WIFI已連接")/ T' j) r& M: t1 b. ^- K+ Q
cyberpi.console.println("--------------")
0 G8 _# c/ y! w8 a# ccyberpi.console.println("按下A鍵開始語音辨識"). s8 m8 u5 i9 |6 Z
while True:
6 @3 N, @/ R% T+ A if cyberpi.controller.is_press('a'):/ {1 C7 ~/ N- ^* V
keyboard.press(Key.space)5 a* z) V" {4 K8 m( A
cyberpi.console.clear()+ M$ D/ }; S( j' Z% l+ P
cyberpi.led.on(100, 0, 0)6 W v4 e- I" G1 `1 c: k8 F5 U J
cyberpi.console.println("開始語音辨識")' {, ^7 B) A# S) P) _* G
cyberpi.audio.play("switch")! K) v) @" A' U1 Y
cyberpi.console.println("--------------")! R k* X( R* A4 ~/ y I) M4 H+ m
cyberpi.cloud.listen("english", 2)4 [# G% U0 Z2 I6 R/ r. A
cyberpi.led.on(0, 0, 0)
+ K2 Y; h& G4 G" t% \ say = cyberpi.cloud.listen_result()
" X% z# N2 C0 j, \7 _! [; j: S6 n0 @ cyberpi.console.println(say)
3 p/ J0 y# O/ E# ~. Q+ q; @$ P( e" C cyberpi.console.println("--------------")" x8 d% r; V1 s! v: p( [
for i in say:
( _% _7 J0 E n if i == '':' s h, P/ Q2 E# N
keyboard.press(' ')+ ~ }7 N- ^0 _# d6 m7 p' \6 C
else:1 s6 A+ k% |6 s1 _0 F2 }0 b
keyboard.press(str(i))
! q8 N2 T0 P) @# N \7 c# ^( W time.sleep(0.03) M y& D7 h% `5 r2 r# \
9 T/ h* C1 A5 e6 w2 t3 L
matplotlib音量柱狀圖 - O' Q6 ~; y0 N- W
import cyberpi
% v8 R. M4 c$ g: j cimport time# {2 H! p9 C/ O/ c% O
from matplotlib import pyplot as plt
1 X* j$ A' o, i t' W) w# q+ S# Q ; q' U: x9 ?& u, S0 d Y9 b
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']
6 v' O1 g4 S& Q7 s' ]) z9 W% aplt.ion()
8 ~* r% r3 i b, _9 Q! J
' @9 h8 U7 ]7 p4 B6 u& Vwhile True:
4 H" F& E L' b- {/ \ loud = cyberpi.get_loudness()
# k$ _8 Q( `6 O& F- `! U" J, ]- A, h plt.clf(), b3 I6 q2 V1 g
plt.xlabel("數據名稱")
) c. o6 g. n8 a plt.ylabel("音量讀值")$ n( l; ?5 r3 o A
y_locator = plt.MultipleLocator(5)
6 k t6 X9 y4 P: x ax=plt.gca()# j6 h9 q! r# |: C% I9 O
ax.yaxis.set_major_locator(y_locator)
: k, w' Q R4 c2 Y- w plt.ylim(0,100)
# ^/ {3 A* v9 c( F# G% Y5 j plt.bar('音量', loud, align='center',label=f'溫度{loud}')
. s' t1 t0 e8 A8 ? plt.title('童芯派聲音感測器讀值')
7 F) ~ z5 }- |3 e% f plt.legend()+ a# h% V( _) l; G5 ~
plt.show()
2 n8 E" @! @; X+ Y3 d2 [2 }' o8 M4 R4 G plt.pause(0.01)9 L! ?' Z L$ e; K1 a* { n
* Y3 E3 q: H! K$ k
8 H$ {, z- [4 z8 @$ E# {( amatplotlib 多圖表顯示
P- w# I1 z0 |" y9 D0 y
; d. i5 ^4 D7 ]7 R$ nfrom matplotlib import pyplot as plt
3 k) Y* `7 O. h7 ?4 {+ Eimport time
T3 }5 E9 D2 L9 S+ x7 Gimport cyberpi. ]. R8 |# K2 L, j0 X0 T
, r& c. p% L) _6 ?& V. Qloud_list = []
: W5 h* }% S" g* @8 y# l. Y, mbri_list = []
# x+ [/ U# l0 ^+ ?plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體+ i1 c3 E" ~+ H) s& `5 w* C
plt.ion()0 }# ]0 k! q6 m. W8 h4 y$ x* A, _
plt.figure(figsize=(10,10))+ S* `% ?6 F8 c2 q) U9 m
plt.figure(1)4 H- }* h! } @. i) J: O3 f5 s
x_locator = plt.MultipleLocator(5)
4 m& V: z9 `3 j; M6 _y_locator = plt.MultipleLocator(5)3 q7 u1 Y2 B& l4 A$ O1 t
while True:: G, R Q8 ^. Z1 \; t9 r
loud = cyberpi.get_loudness()
H6 u; F$ C/ o2 C) `. v3 b3 n bri = cyberpi.get_bri()
6 E; O* c+ |, M( Y+ X loud_list.append(loud)% {/ ]' J6 J/ g+ L" d3 [
bri_list.append(bri)
6 i1 E/ X! R" @* E battery = cyberpi.get_battery()- m2 |5 A- h$ _( O: ~
size = [battery, 100-battery]; g- l" H1 ]. y, ]. {1 W" N0 B
status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']
/ Y. Y* P3 p/ {; m ax1 = plt.subplot(221)
9 |4 g2 g! t+ o) c/ o" T% Z plt.title('光線折線圖')" R, o0 g2 m. ^6 `# e+ W! T+ @) l( }
ax1.plot(bri_list)
) s1 c" c, n6 `" s; j& b5 m' e8 r ax2 = plt.subplot(222)& o0 @( O) n7 L. U A/ l( K M
plt.title('聲音柱狀圖')
. t3 O, ~3 {0 T# k& a1 T$ s% Q3 G ax2.xaxis.set_major_locator(x_locator)1 c9 I& M6 V1 z. [$ s0 {) V; S
ax2.yaxis.set_major_locator(y_locator)
0 _( x/ Z" y# v- { plt.ylim(0,100)
# \$ n8 Q: P# @2 @2 n2 v ax2.bar('sound', loud)
0 D; c/ @6 P+ V" H# E ax3 = plt.subplot(223)) w9 k6 ]% L; O4 H. w- D7 e8 f+ C
ax3.xaxis.set_major_locator(x_locator)
2 y' S4 X( @: O" _6 ]5 ~( Z# ? ax3.yaxis.set_major_locator(y_locator)
; y1 ~" f; W& r plt.xlim(0,100)/ j% C ?4 ]& X* e( S
plt.ylim(0,100)4 ~4 m: U1 p6 e5 B: X7 `
plt.title('聲音、音量散點圖')
8 E8 E& A3 P u1 i* }( d ax3.scatter(loud_list,bri_list)5 |+ k7 C' d9 T# f; n4 ^
ax4 = plt.subplot(224)4 x- R( b8 z9 Z% f
ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
# A" Q) X% q+ b4 T: ~& t$ S plt.title('童芯派電量')& j# u# ^: @8 c4 p, \; J8 k
plt.pause(0.2)
- F* C7 a! U; p$ e& i5 Z plt.clf()
/ e ~/ G$ Y | if cyberpi.controller.is_press('a'):) k. r* R) n& A2 N
break$ u9 L! z w- }
if len(bri_list) > 500:
( l/ n( v* T. b1 N' l( S; t bri_list = []2 B1 N8 j& J( V; C& [1 _ `
loud_list = []
6 K" Y A3 t& C( L8 k; t, _+ i9 V) Q7 t5 b* ^$ c
|