本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi
. d3 G( o" o6 N n' B1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。( o. ^, R; ^. V% V% ~5 _
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載 / p/ W6 _, u8 B( A# [; ~+ |
- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。# O7 s6 }; x- Q3 c4 a6 Y. |) d. R
2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
$ U* r; w2 N6 o- ^% ~
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。+ O" P, y) `# g- R6 ?
2 z- z1 Z. J D: x' Z/ G
- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
0 E* S+ g: U& d, Z; j
% U' \: k0 w0 a' U$ t9 Y- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
8 Q. J; ~5 p9 e6 N9 D _; _
5 U8 w1 u. |9 F, O& U) h- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。8 i& m+ i( W4 y: W6 S
+ _# T, f5 [$ D2 l! g, O( i Y
3.童芯派第三方編輯器程式設計準備7 M+ ~% ~+ U% u* T( {
- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。
- t$ ~2 j, E. N
4 W1 f/ a7 t( J8 _# I- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。5 A5 z e2 t! Q% f; f
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。 8 _- g) \ D8 V9 C
- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。( o/ h3 m t) e/ u" z2 K
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。
. `" B$ T8 w8 F* z" A
9 d" ]* K. q( k$ t- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。
, E& K0 y+ r$ o( P6 P
+ q2 v" h. c8 V. U! {/ E- x. {6 y4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。
, S! K2 g: K: @+ c/ h" v* k* a8 F5.一些程式設計案例# \0 _3 o) i, }' I
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput * U6 o, s/ k5 p& |( y1 j
功能介紹:
8 h) A+ T2 G4 a/ ^: V利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。
I- u4 \1 E, v8 }$ L通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。
2 {, @, f: U8 n( z結合藍牙模組可以實現無線滑鼠的功能。1 |2 _; j' n# K
6 R2 A- v% r3 [
from pynput.mouse import Button,Controller
* M6 y* P( n) y$ Jimport cyberpi4 M( D' _1 v; c( g5 Z: q
import time0 q8 \7 J; ?' H( r
8 \3 h6 t5 Q4 k4 o6 z
mouse = Controller()9 f; h& l% V- t/ @, P
+ v$ M \! P, C+ ^9 F; ^while True:
3 y# E7 u* K, r) n9 k" U if cyberpi.is_tiltback():+ {" o, Q |6 g1 Y1 `' D
mouse.move(-3, 0)5 J# i4 b" ?/ x1 ^
print(mouse.position)
1 H) A' ?2 {/ P& s# |# h n if cyberpi.is_tiltforward():1 ?, X* e, s* ]5 Q; P# T0 l0 m
mouse.move(3, 0)
( S4 w9 H- b9 K if cyberpi.is_tiltleft():+ m6 S9 u! g' j
mouse.move(0, -3)
a9 B/ ?; M2 B" E! z) D3 h if cyberpi.is_tiltright():* A8 u- j f. L9 n; H) W
mouse.move(0, 3)
1 P! i) B' z% L. q4 H if cyberpi.controller.is_press("b"):
; h5 Q3 a4 n) j; R' |# c' I mouse.press(Button.left)
, x3 t% S Z8 D5 Z6 V mouse.release(Button.left)
6 s# f9 y1 {* y" }$ i$ e2 c mouse.press(Button.left)7 {8 E; m% n7 ` B/ O; R2 M0 m( D- \) ?
mouse.release(Button.left)
9 `- h# J2 M2 a/ R7 v2 R) X if cyberpi.controller.is_press("a"):
/ r6 T/ n% z4 Q mouse.press(Button.right)
# o* I) `+ | H& G# X/ Z mouse.release(Button.right)
4 {2 G( x4 z ]* d3 } time.sleep(0.01)7 _( a. J; \) A+ v9 e
5 N, B, U5 E! j7 b3 L0 W6 d" Y2 m1 p; U, ^- C
語音打字器
' d' d5 f- n, I: E+ G4 l功能介紹:3 c# A+ c/ F* L/ G
利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
( N' D5 s6 t8 }, l, v將語音辨識的結果通過pynput在文檔中打出來。
`: m( b: _% M. ?/ b4 _; {該程式目前只能支援英文。
4 T2 G$ l3 A% I' W. e6 A H U$ k1 i2 r% d1 u: _$ M# S
import cyberpi
, | p: J$ k E+ Gfrom pynput.keyboard import Key,Controller' O ^. h; q5 d, q$ X- J5 w: u
import time4 X: `, B Y `& m
; t9 ?% S4 _2 [, Okeyboard = Controller(), l0 Z7 O3 {- h8 f( |; u; r
cyberpi.console.clear()
0 |# e# T& E/ y9 f! N1 e& hcyberpi.led.on(0, 0, 0)9 }$ I! [2 D& P1 g. _
cyberpi.set_recognition_url()0 C& t# N6 k& [' Y$ i# J
cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得# X4 e9 V9 c2 t1 V# a
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼")) O% ?: K7 M: \. S+ u5 u* e* i
while not cyberpi.wifi.is_connect():& b r Y2 T( z1 q1 O" l
pass
$ M* S, J7 O' G% D6 Q# C( Bcyberpi.led.on(0,0,255)
% o' V: C6 c- H7 x% K+ T. m5 d$ Rcyberpi.console.println("WIFI已連接")
6 j5 g) r7 \$ Ncyberpi.console.println("--------------")
! a6 g1 _/ l7 W* Y" \cyberpi.console.println("按下A鍵開始語音辨識")0 r" T2 j& j" n: \( j
while True:- s o. @* N$ ]' h# {+ l- U. a/ \
if cyberpi.controller.is_press('a'):
& J2 s" u: @2 G1 G. Y- V" } keyboard.press(Key.space)% o0 T& O3 w+ D3 u! V
cyberpi.console.clear()+ ~% ^2 h' |0 j4 S( w/ }& V1 F3 M ]9 G
cyberpi.led.on(100, 0, 0)9 P* N- B% e! Y/ U, l! r2 {
cyberpi.console.println("開始語音辨識"). ^+ j1 u9 w% H7 V4 } _8 R
cyberpi.audio.play("switch")
# c" u3 W/ T8 k cyberpi.console.println("--------------")
+ Y% E% V; L7 V# P4 F! [ m cyberpi.cloud.listen("english", 2). ?5 `; u3 V. [! u2 w q
cyberpi.led.on(0, 0, 0)5 x5 w/ t Z, J# z4 c
say = cyberpi.cloud.listen_result(); x4 M' f) I6 v+ j
cyberpi.console.println(say)! q8 z. \# w4 z
cyberpi.console.println("--------------")3 ]% F& Z4 o; l. ?4 Y
for i in say:3 g% S6 [: {! F2 p( R" J
if i == '':
. y% `! o) f3 S$ u& z) P0 m keyboard.press(' ')
8 J$ J4 }2 U) c else:
! v6 B$ B# r3 C% U keyboard.press(str(i))
& T+ S& t, x5 G- j time.sleep(0.03)7 U; R9 g/ @8 H
i' ]( _2 j/ D( Q8 h8 J: {
matplotlib音量柱狀圖 6 }" N2 N: D$ [" o6 y: ?% I
import cyberpi" T g% p* }' f* p
import time, `# e7 `* v6 b. w) t
from matplotlib import pyplot as plt+ {2 B# s: n+ [# Q1 u. Q2 H- I) ?
) o: Z; p- y% S' J/ nplt.rcParams['font.sans-serif'] =['Microsoft YaHei']
+ F. s9 v; Y, {) `plt.ion()
; E i: V* C, f& y& b8 S# r
0 f6 M$ n2 t) j1 mwhile True:: o2 p! G: w1 R: Q _
loud = cyberpi.get_loudness()
0 y- A9 ^3 ] X, }* s- ? plt.clf()
" C" ~9 a: D" p4 a plt.xlabel("數據名稱")
" t7 y9 p/ T5 M1 w L Y plt.ylabel("音量讀值")
" { P9 f7 O" `' Y$ C/ ]4 A, \ y_locator = plt.MultipleLocator(5) A( t# h2 O' E* G$ R$ x
ax=plt.gca()
5 s, }8 U# F1 @4 q ax.yaxis.set_major_locator(y_locator). A$ A0 k9 b9 B; l' c/ R
plt.ylim(0,100) n" M1 I; o/ X3 U9 }
plt.bar('音量', loud, align='center',label=f'溫度{loud}'): V& |2 a8 v! N. Y9 B, ?9 E: E
plt.title('童芯派聲音感測器讀值')
2 m! n1 l+ _: V% x- k plt.legend()2 r y9 Z9 K7 g! j! Q
plt.show()' f) O9 x0 p. t+ q
plt.pause(0.01)$ @& l8 t: h- N) W. K3 m. E7 z
" }' Y5 t6 ^3 D+ S9 y8 Q! x! F' u5 o( C( ]* T* {6 R
matplotlib 多圖表顯示
* \) A4 |) m6 ~4 u" }1 m0 y
+ B. w! Y r3 }; W+ O: c1 V) c+ rfrom matplotlib import pyplot as plt
) F4 a2 r* Q5 g4 ~import time
# r' l3 e& H+ k9 A8 u/ h6 ?4 d+ j2 Qimport cyberpi! S. u+ y z5 M5 Y( y% A
0 |5 X. q) z% \" |* g: Qloud_list = []6 j6 c. h" G5 R
bri_list = []
) T" G+ a6 j2 ?6 @plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體2 H! t& l3 k$ O
plt.ion()4 q( A" p9 s$ d) R! J
plt.figure(figsize=(10,10))
. c4 `" t. ]4 p* |; P2 N0 V Tplt.figure(1)
0 V7 d7 w- D9 y! C: Cx_locator = plt.MultipleLocator(5)
2 f t! U, n/ l- E9 \4 Cy_locator = plt.MultipleLocator(5)5 p W' b( T" h( y+ P& d: v z
while True:# v# C$ X: L# x4 Y9 U0 l
loud = cyberpi.get_loudness() n1 q+ ^8 L: s& k: ~1 @$ u3 K
bri = cyberpi.get_bri() e. o( T' N; y4 Z% @1 Z
loud_list.append(loud)3 e4 r( p% o( Z, j9 A
bri_list.append(bri)0 F) }+ b5 C3 V
battery = cyberpi.get_battery(), I6 N3 L, _5 _: \! H* Q& C
size = [battery, 100-battery]$ C& x: A' o- H- z! h
status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']# f6 p! ], N/ o) v
ax1 = plt.subplot(221)! q- d$ O* y0 l$ a
plt.title('光線折線圖')
1 m0 A0 {, Z' P: u9 D6 ?8 k; e3 @ ax1.plot(bri_list)
' ]0 }8 _2 C, g, A ax2 = plt.subplot(222)+ K8 D5 L" I; S& m2 l9 c6 X
plt.title('聲音柱狀圖')
* A* }$ K4 K5 |- ~' f9 i& _. E ax2.xaxis.set_major_locator(x_locator)
3 `! X, o+ C, T4 K$ t ax2.yaxis.set_major_locator(y_locator)
9 Q6 @' I1 `1 C" P plt.ylim(0,100)
% a# W) E- e+ e2 y0 y ax2.bar('sound', loud)# |& l2 z! {4 Q! d# U: z% \
ax3 = plt.subplot(223)$ k0 i9 _$ A5 Z0 I
ax3.xaxis.set_major_locator(x_locator)
+ O% h* D( s" {7 w# ? ax3.yaxis.set_major_locator(y_locator)
; k, L) U; o% p+ e6 X; L plt.xlim(0,100)* g8 i" @! ~. O, X, S9 Q+ ^0 J
plt.ylim(0,100); {1 d7 n$ b( E6 K" [
plt.title('聲音、音量散點圖') `" T0 [6 O D U0 @
ax3.scatter(loud_list,bri_list)
4 L) O8 x1 Z8 L, ]& j' k; a! }! f ax4 = plt.subplot(224)
) N( ]9 o5 b/ @0 m8 C4 Q' \ ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
1 o2 N2 m* N& F2 |& r% X8 A# J( }6 N plt.title('童芯派電量')
' H: o& |- O! q: {/ h2 [+ \ plt.pause(0.2)
0 P* p' s# {9 |7 ]7 U4 e O. J plt.clf()1 W6 f: m! q& w/ \- t
if cyberpi.controller.is_press('a'):
5 a. n9 g3 J2 E: P, o break
) t7 C5 b- m0 z- b if len(bri_list) > 500:1 |5 O$ F2 S9 W
bri_list = []+ u! d+ q; Z* d
loud_list = []
# C) q: z$ D" U; C! U
. v3 {! Y/ s. k0 O |