本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi - E: G- _1 H1 |' t% G* `
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。6 q$ ^! ~$ m4 C0 t" S+ e; v
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載
/ r! ` i! t% f( a- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
6 e8 @$ F, |/ a4 _# c7 z$ c* f 2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)+ T$ e/ e, W$ t& L7 W
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
& r& k, t4 @, G/ k- c4 u 6 H3 H/ N; s! Z& X1 ?1 w
- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
# {3 x$ W/ O7 u. c; S8 }' I 1 f! t C" g/ Z# w2 Y& \5 t5 u
- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
) T* b" q0 x' ^. C! B% P : X0 w5 b! A( b3 Y' v5 V. v1 A
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。
- Z$ i# m' n0 J ] N . W8 v* |! v0 q8 F( t4 T; @
3.童芯派第三方編輯器程式設計準備
' S! |: W) G7 s; S5 F- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。4 ^3 C; @; u) }& e d& f3 S
8 n% H" X9 t: `' K. g
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。
4 B0 p+ l6 k/ X7 F$ a# O9 B5 A. O
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。 2 `5 n& z0 F6 L; e) z2 U$ w0 L
- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。
+ z0 ]7 M4 }: W
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。
$ Z; F. Q, X' B5 c" w
# L* F7 X! s( _4 O# k9 z- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。; O4 H w7 Z. a0 D/ G- z
3 b/ X7 K/ G8 X) T4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。
; R& V* m, K/ U& t5 ~6 m d5.一些程式設計案例6 }8 l2 L, q5 ^) j6 n
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput 1 }; K' E# R' H3 _" F: _
功能介紹:" L9 k0 I/ g/ j2 e9 S8 a8 Q
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。
. B9 A: \- Y+ p0 O1 t通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。
- U9 d V x# A$ x7 S5 \( \ M結合藍牙模組可以實現無線滑鼠的功能。
. K& h K- e- Y( F
+ p4 f9 r2 c4 tfrom pynput.mouse import Button,Controller9 H6 i4 P' W' B+ C" V S" R8 B# r% I) ]+ [
import cyberpi
& u% R5 |/ [! x x# {9 Fimport time! R. Y& ?: v7 @
. n8 K: C1 q$ @: _: O
mouse = Controller()
4 q: D6 \! `/ i # h5 R& ?# z( e+ w2 _" R, @; c
while True:% F; ], R0 L" E# I
if cyberpi.is_tiltback():2 E% f& j" ?4 q! Y, Q7 k/ c8 l% X
mouse.move(-3, 0)
! R. f/ G/ G$ o O print(mouse.position) G$ C) D, Q) y
if cyberpi.is_tiltforward():
7 A6 U7 K8 m X+ t$ g( x' d$ Z" d mouse.move(3, 0)0 `/ y# B8 H& ?1 n) g
if cyberpi.is_tiltleft():( b' ` c: {( i5 \2 R6 j7 g
mouse.move(0, -3)8 o- j( A. ?- I
if cyberpi.is_tiltright():
4 J0 N3 Y& _8 x6 l |; L mouse.move(0, 3)
! d* _7 t6 @8 z if cyberpi.controller.is_press("b"):$ G0 R% B e I; g
mouse.press(Button.left)
" j5 d) e4 B2 w8 ~$ }' C, ^ mouse.release(Button.left)
& L8 R; Z$ k& [/ D+ [. Z/ r mouse.press(Button.left)" N, }- R: e ~, y, K& Y
mouse.release(Button.left)
' A5 K* F! z+ D* [: j$ q% b* { if cyberpi.controller.is_press("a"):, T; l8 Z( I! T. i, a4 Q& p7 H
mouse.press(Button.right)
; ?/ e& C8 u/ B' D. @5 R* }, g y mouse.release(Button.right). o9 }( C# z6 O+ v, ]
time.sleep(0.01)
5 }. ^. C4 Q$ a' b: h$ ]8 G( q: P% r% C
/ C, g% \/ h: P3 v* z0 `語音打字器 7 L$ s1 k( X" _
功能介紹:
! Q! h* X$ M% C0 \: g* d0 }利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。4 q- D: u" a1 L: Y ^, G
將語音辨識的結果通過pynput在文檔中打出來。. G, l4 ^6 K: h ^
該程式目前只能支援英文。- W& q7 G( V* ?3 z4 z2 k" W
6 ~; u; S% A( B5 |3 E* Cimport cyberpi
& A* t7 ~6 u; d( \from pynput.keyboard import Key,Controller# O" N' k2 M0 p+ q' W$ l( C$ Q
import time
+ Q. e0 }0 y5 P1 S & Y" n! t$ k6 b% ]5 W
keyboard = Controller(): q. j4 l: ]% _. b5 U
cyberpi.console.clear()
0 b a9 B+ \+ V8 L1 A) F$ [3 Icyberpi.led.on(0, 0, 0)+ U( Y# W& o: n
cyberpi.set_recognition_url()
% |5 X& I. E" w0 lcyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得9 ]( S5 H7 Z' ?! M
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼")/ K8 t1 L' G8 U0 }+ t. D
while not cyberpi.wifi.is_connect():: `# \4 Y% A, l4 n; e. E
pass
5 F/ U( f+ p) b- h' S, rcyberpi.led.on(0,0,255)
' ]1 W2 \9 a6 v0 {! J/ N* v" ucyberpi.console.println("WIFI已連接")
$ ]! ?+ N4 a& c) y8 M2 a& a( mcyberpi.console.println("--------------")
W) B5 Q3 v% e* w3 tcyberpi.console.println("按下A鍵開始語音辨識")1 x! |6 n, S0 O% [: ^
while True:
3 A$ d+ C9 Y$ O8 c/ X if cyberpi.controller.is_press('a'):
; A: G) x# N& o' e/ ^ keyboard.press(Key.space)
! |: O/ E" h/ o3 O1 g, G& a, {( K cyberpi.console.clear()5 R/ v4 Q/ a3 A# F) |; E
cyberpi.led.on(100, 0, 0)
: s' Q4 l4 f" _1 j cyberpi.console.println("開始語音辨識")$ _% N; Q7 J' |8 }9 x$ j
cyberpi.audio.play("switch")! A- y+ E0 R% B: p- i: k7 Y* l
cyberpi.console.println("--------------")
) I- @; E' p$ B5 w( @ cyberpi.cloud.listen("english", 2)
6 \9 l4 Z/ o1 D5 [9 O) f cyberpi.led.on(0, 0, 0)
3 _+ e5 Z/ M$ H say = cyberpi.cloud.listen_result()
. N; f1 ~$ |5 n cyberpi.console.println(say)
0 Y9 D0 w2 J9 ]) Q cyberpi.console.println("--------------"). N, O$ ~6 U& n- j
for i in say:
4 X) o5 n: N5 n if i == '':
. f& Y% |9 e0 \; d keyboard.press(' '): n6 @6 a& F4 C; w5 q7 k8 P% E
else:
* b/ R! P8 }) |+ ? keyboard.press(str(i)); E6 D0 _2 s9 I. R+ D! m8 G, b% w6 H
time.sleep(0.03)
3 b' A9 U R- F- g9 h' E( U% m5 N4 u" h, x) ^* z1 h7 g. i
matplotlib音量柱狀圖
( I* H( e R/ D# a, O# j- ?import cyberpi0 p: ^' a9 V4 T* Z2 Q
import time% t2 K2 W; Q( T- i
from matplotlib import pyplot as plt9 \; s, o2 b" c' l- H0 R3 I" T
9 H% L' _7 b+ B* ^( K0 p) C# R# h
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']0 S1 T6 v8 z+ w% J6 I
plt.ion()
: D4 W! y- }/ p" i 4 D% F, I& |' c) V2 w5 t- [7 S
while True:
( s3 ~. i" a6 j loud = cyberpi.get_loudness()
' N) U$ ^1 q r$ ` N/ Y plt.clf()
$ L3 \, h& p- ?, }% @0 {. w2 d plt.xlabel("數據名稱"), S: i, c6 W; Z- r
plt.ylabel("音量讀值")
( x/ Y5 c4 ^' z y_locator = plt.MultipleLocator(5)( S) e: C m l) \" X: e0 S' X
ax=plt.gca()
+ P+ g- _# H+ Y' s" J. v- V9 } ax.yaxis.set_major_locator(y_locator)- J5 s: y* P; T" J$ F
plt.ylim(0,100)
% u+ y* Z, B; ?) X: C% C% Q plt.bar('音量', loud, align='center',label=f'溫度{loud}')9 o8 t+ a5 l( K: R% H, h( g
plt.title('童芯派聲音感測器讀值')
$ H! L' W; S- K2 n3 y% Q plt.legend()) O. F* K) v+ P# r4 s# Q$ j
plt.show()
" t- t& |) W2 a( u plt.pause(0.01)
& A7 y% a Z5 L) B v0 j7 I, u4 O/ v- T1 M) F$ B1 s. S7 V% e3 ~
+ a$ H! x4 l- n' M) M
matplotlib 多圖表顯示
; c8 W7 f6 C, v5 M/ V$ m# G, t
9 P5 T8 k5 v ~; A, ^& }" ]from matplotlib import pyplot as plt" _( b6 K- N$ x
import time
, R( k3 E' m3 y2 Q5 p! a4 Yimport cyberpi
1 Y+ [5 Y& X8 o! K
- z& H* w4 T7 M- nloud_list = []
2 t' `5 I! d7 Hbri_list = []
! g4 Y# B9 `& r+ P& L, _plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體) x0 e; U2 C4 ^9 r8 J. N: q- y
plt.ion()
+ Z) h& T" Y; ~: Pplt.figure(figsize=(10,10)), K5 t* \+ j- n/ x6 S
plt.figure(1)
$ f) i. t1 o/ V7 a9 B: c$ h) Ix_locator = plt.MultipleLocator(5)
: ~6 A! |' n9 _y_locator = plt.MultipleLocator(5). o4 F4 J3 Q2 d" ~. C* b
while True:; o0 V+ @8 M+ E3 W7 H! @
loud = cyberpi.get_loudness()
3 h) r$ U4 ~" s0 v+ p bri = cyberpi.get_bri()* ?# B; e; ~8 U4 {
loud_list.append(loud)' q8 ^) [1 j0 T2 {; o3 @8 H( Y
bri_list.append(bri)3 s n7 C* f9 L3 Y' |7 C# [4 j% T
battery = cyberpi.get_battery()
( I2 t! B1 Q5 R4 x size = [battery, 100-battery]6 W: F$ {% L: T5 T6 M1 {+ f7 W
status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']$ Y1 ]4 U: o3 s1 G
ax1 = plt.subplot(221)
% h' X( {( ^- A5 ~5 b plt.title('光線折線圖')
1 V+ X0 Q& ?2 D9 t: J) K+ c7 J ax1.plot(bri_list)2 M) E5 d, k' D3 h
ax2 = plt.subplot(222)3 A! v0 b$ m! S
plt.title('聲音柱狀圖')
% C1 `7 {5 l( y ax2.xaxis.set_major_locator(x_locator)7 r* Y7 }( L# m% ^* x
ax2.yaxis.set_major_locator(y_locator)8 f! R+ h7 M. f8 Z4 k; x y
plt.ylim(0,100)
& _: \3 v5 O# m/ g( d6 N ax2.bar('sound', loud)9 j, Y! \# j' C) P5 M0 `; {1 k
ax3 = plt.subplot(223)4 y. u0 q3 S9 X" p+ }# \
ax3.xaxis.set_major_locator(x_locator)) y0 w2 P3 e2 l6 b# ?4 ~9 P) {
ax3.yaxis.set_major_locator(y_locator); _! n% {+ Z; U
plt.xlim(0,100)
7 c8 k1 m6 K& T U/ x plt.ylim(0,100)/ U$ h) f. g2 k4 \ A
plt.title('聲音、音量散點圖'), \" J' ^! f* w4 ~4 e0 J
ax3.scatter(loud_list,bri_list)5 C2 J0 T; @, K9 _' r+ _; K9 A
ax4 = plt.subplot(224)! u) D h: @# y# `/ h( \
ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
( w1 x' J8 j0 f ~3 r$ b plt.title('童芯派電量')
' P, U8 q n2 ^ o plt.pause(0.2)3 b- m8 F1 k* F9 O- T* { s d. j8 P6 K
plt.clf()
7 Y* p3 p- n9 {" _$ y$ o* l if cyberpi.controller.is_press('a'):0 G5 @5 _ |2 K3 q6 \6 g3 ?
break
4 {6 x ~6 R8 m" u, G; D if len(bri_list) > 500:
* T& L2 f8 U J& ~; ]6 _: V( H bri_list = []
" F- m4 x H" }! ^ loud_list = []
* m" C F& ]) A! K
8 D5 v: e- {) G' S0 s" A |