本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi
' y8 Y/ b( Z. ^: X# R* _" J. V0 \1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。2 S0 G- n3 k3 b" `
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載
0 J3 Y. a; {2 E) N% a- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
# R' k( }+ k1 g% o! J 2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
g2 {9 G+ z- n9 n# X% [( ]' E
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
( x+ ?$ G+ _# ?8 A0 B; H4 _
# ~9 [9 l2 `6 y! f/ R- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)- t$ P& ~. H' @. T8 g) i
6 O- V$ }4 W% I5 F; @) L
- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
5 Z& L* e2 Y' E5 u$ ^7 }
- N5 q1 n) @0 B, g+ `- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。
6 E9 E, @: m+ H% F6 ^ 7 j9 f4 e' _7 N) p) h; Z# @
3.童芯派第三方編輯器程式設計準備
~0 z7 h, p: }2 R* ? e& x% D9 ~& m- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。
3 b, c* Y6 M" N3 ~3 u
+ v- r8 w- ^$ y* O/ U& a7 ~- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。4 f9 k6 C, q+ m( f9 q2 b
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。 ( P/ E) x; X: j
- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。
: U' u0 ^7 ]; C, s
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 4 I) l+ m/ C' S: R8 Q
6 ?6 z& K7 J* e0 o
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。7 [. N/ X1 E5 K! ~" [/ q2 _, B N
2 `2 m, y* V: l( p
4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。
j5 q ^, d/ I2 y$ d$ }* t- P5.一些程式設計案例 j2 I' ^3 z& |/ a+ m; M
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput ! s6 x, i" q0 f- _: U- T
功能介紹:
) `) F* M+ Z) ^) a* O% Q% l$ H利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。
9 q1 X7 j4 b2 R6 L# i6 u通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。
' x9 R( i5 C1 c% D h k) L結合藍牙模組可以實現無線滑鼠的功能。" O0 H" l3 c6 e7 [- j( L3 A
8 Z5 K$ k6 q- B" f, x$ t
from pynput.mouse import Button,Controller
; A c6 d3 _- i$ ^import cyberpi
% V+ n% N( M! ~import time
2 N6 ]& A! x* k% [3 n& Q: u) o ; U! e5 l/ X" o% M# ?; Q6 c
mouse = Controller()* m7 g/ S# I% j& s
! ?7 A9 z' _& }% Y3 J b
while True:
0 a5 l" }, Z' L& l- \ if cyberpi.is_tiltback():; E" \- X3 b6 y% c7 a6 m" T, h" r
mouse.move(-3, 0)7 W$ g$ |) p" _
print(mouse.position): T$ F/ M7 A, A" h v) C
if cyberpi.is_tiltforward():
/ c. W9 c: }3 q+ g% M mouse.move(3, 0)' a. o# W2 F' n5 O$ d
if cyberpi.is_tiltleft():& I$ _6 R( m0 t+ a0 \4 |# e
mouse.move(0, -3); n: n" ~* F+ w, u8 X
if cyberpi.is_tiltright():/ L: r: O% n( A: I
mouse.move(0, 3)* _( {% G9 K8 |" @+ c8 N3 K& z5 i' N
if cyberpi.controller.is_press("b"):6 P$ U" l0 ?5 q
mouse.press(Button.left)
" X8 `4 K3 K+ a: I6 H( z) A6 P mouse.release(Button.left)
: C* N, m& U' G* ]$ f mouse.press(Button.left)2 R* V! f! {% e% L! W' b
mouse.release(Button.left)
' k* \7 Q6 R' h6 o+ t: p- _7 K% m if cyberpi.controller.is_press("a"):; }! G$ z1 Z5 G5 `' j
mouse.press(Button.right)" Q2 y" @; [4 S9 b+ a/ i: F
mouse.release(Button.right)
3 T$ F c8 ^3 I6 G time.sleep(0.01)
V" m" v! ^5 ]! |( @6 ~3 p
! C4 Q4 y: \ s* ?8 m5 m+ v8 s$ ]$ ?* _
語音打字器 . N0 g5 O. ]0 E
功能介紹:/ J! W, ]. |+ m9 Z" A* m! i
利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。+ n P0 z* s. m Z5 J2 i
將語音辨識的結果通過pynput在文檔中打出來。
6 U0 j1 c" q8 _9 t! D5 W) f該程式目前只能支援英文。
3 s8 B* [* B. p8 C
8 B. q. |$ U4 ?& Rimport cyberpi: t5 S; M; _. ]1 `
from pynput.keyboard import Key,Controller+ w- F4 _4 L% F1 H: U! E8 u
import time( l* `. M$ W* i n, M
8 |$ Z. } X9 g$ Z6 A1 ?5 @; Ikeyboard = Controller()
# c) `; w, _% X0 P6 a0 Vcyberpi.console.clear()* o) {. m) {! ]' |4 V
cyberpi.led.on(0, 0, 0)
" q, J7 O) ]) K+ K. Ncyberpi.set_recognition_url()
{- }8 D& l' T, @cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得
, E+ ?' P! T! j8 e2 ycyberpi.wifi.connect("WIFI名稱", "WIFI密碼")9 ~8 c( K' e# N% u( B E( k8 P
while not cyberpi.wifi.is_connect():
0 i; K2 N' W4 u }8 b pass
6 G/ I8 T; z7 o0 D' n8 Qcyberpi.led.on(0,0,255); a- o/ a4 g6 u* P. b
cyberpi.console.println("WIFI已連接")
6 r4 C3 U' S2 M2 J/ Z' E+ tcyberpi.console.println("--------------")$ t1 J X- ~$ h" o* ?" a
cyberpi.console.println("按下A鍵開始語音辨識")8 M( B2 A0 d9 S! [9 L$ B+ t& _6 F1 i
while True:
2 z" x( Z$ B" K! @ if cyberpi.controller.is_press('a'):
/ d: l# s9 l9 i( l) C! _2 w keyboard.press(Key.space)
, a7 k( ?5 c4 f7 W- | O cyberpi.console.clear()
7 u8 `3 B& h! B" G6 _$ z# e cyberpi.led.on(100, 0, 0)# l( O9 j( l. {! j9 k O
cyberpi.console.println("開始語音辨識")
1 u" ~" T& e2 w9 k cyberpi.audio.play("switch")
$ N) m1 v) T' d' U9 K cyberpi.console.println("--------------")2 Y4 X& H& m& h$ y% N2 B+ d- B# B- P
cyberpi.cloud.listen("english", 2)0 n0 [ z; f9 F# }# L
cyberpi.led.on(0, 0, 0); A. d% i8 E F: N
say = cyberpi.cloud.listen_result()
" B: n% E; Q# v* j; n& O. w% i8 u cyberpi.console.println(say)
- R3 a& Q7 p0 P9 R: J cyberpi.console.println("--------------")
* z8 |/ e3 Z, Z' e y& `, l for i in say:
5 Z( g7 s8 ^+ o! e0 P3 E if i == '':
3 V2 ~) v: f4 B! ]3 l keyboard.press(' ')
) D O. d: p% j$ Q# N2 H else:0 x- |- P8 j) r4 ?
keyboard.press(str(i))9 O7 J7 d6 l! G [5 `8 ^) K( _& b
time.sleep(0.03)8 m8 n6 r7 T$ [$ B
, \1 N M" Z8 x. d" Q& _5 K
matplotlib音量柱狀圖 5 s! J% T' x! T+ \8 j& i
import cyberpi. a& m# r$ u7 X# P- [# O
import time# G4 J6 `; O) r5 `5 H, w6 {
from matplotlib import pyplot as plt3 U. n; t5 N! M, D" d
8 G& k; v& D) v" G2 |; f F4 y4 yplt.rcParams['font.sans-serif'] =['Microsoft YaHei']5 U6 u+ Y6 v' h& P+ N' ^. P
plt.ion()8 R" p- f" ~$ H9 A+ N6 a' v
: j* K4 N+ d' O$ v# L1 W$ \
while True:
$ {, `2 ?2 E$ v; c/ C loud = cyberpi.get_loudness()5 Y8 _. a) y; m# k9 B& `
plt.clf()" y7 Y/ Q0 q- n+ h r V& ]4 A
plt.xlabel("數據名稱")
7 W0 q6 `, J. o/ O plt.ylabel("音量讀值")- _" r- y1 z: J& Q8 b0 {; `
y_locator = plt.MultipleLocator(5)7 X7 {, l/ y4 T/ [% X
ax=plt.gca()& c6 k/ w$ B( K _) m4 l: U
ax.yaxis.set_major_locator(y_locator)
9 i+ R/ v+ u. \8 E& ^. A plt.ylim(0,100)$ C- ~& y! Y1 W y
plt.bar('音量', loud, align='center',label=f'溫度{loud}')
" _6 A5 P$ e$ I8 \ plt.title('童芯派聲音感測器讀值')
% E% q" p2 l& d' ~% O+ ?+ H& j9 i plt.legend()
& h% [2 V* p3 o/ W2 G5 A plt.show()2 z2 L5 @8 ~; r! J' ^
plt.pause(0.01); [. P- x4 E) m6 C
( L5 ~4 ^' r1 W# _2 K/ V3 g+ \
; e& Y5 V3 g1 p: @matplotlib 多圖表顯示2 S! p0 B4 F H- x; R( ?' j
( n& U; b4 e3 Q7 q
from matplotlib import pyplot as plt
, \. m* S6 e. x2 F8 a i. Vimport time5 Y- T" A$ P5 c# X
import cyberpi5 \$ X2 m& i7 {" ^
0 `- u" D$ X! q/ a2 Tloud_list = []0 k T9 N2 U4 [& v
bri_list = []
( X2 M) ?( q2 W! Lplt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體
6 {5 ?! C" r2 g$ E9 Y* G) {* eplt.ion()
, E) r, h% m9 k# X6 P! eplt.figure(figsize=(10,10))2 b1 `* r6 f y" p% e
plt.figure(1)
. g$ m3 F' r; M1 j1 sx_locator = plt.MultipleLocator(5)! u% f( \6 F7 S$ E1 }: b9 o
y_locator = plt.MultipleLocator(5)8 ~3 H6 F! |1 z# `6 @
while True:
! H9 I, [6 V* Z$ U: ^6 P loud = cyberpi.get_loudness()( ?+ e7 _5 z! ?+ t; ?$ { K
bri = cyberpi.get_bri()( q! p: |/ `) u. J
loud_list.append(loud)& X- a- J" P/ X% N+ z* Q8 L
bri_list.append(bri)
3 N. z6 |4 z1 I battery = cyberpi.get_battery()
( {, C! c2 Q8 ^+ g. W7 l# p size = [battery, 100-battery]" x" R1 w9 D- P# z; B
status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']
: l+ ^; K! @$ u u/ K- y% j ax1 = plt.subplot(221)
% y3 P) B7 G7 a plt.title('光線折線圖')
6 r [9 v+ o7 v7 j. `* }# k7 B' s ax1.plot(bri_list)
9 F' ]9 [0 I, L1 `, ~ ax2 = plt.subplot(222)- L6 ]! n' O" R N/ t1 ^, O
plt.title('聲音柱狀圖')9 c( k) o6 t- S* M/ O( K, Z
ax2.xaxis.set_major_locator(x_locator)& u }/ z! `! b% h
ax2.yaxis.set_major_locator(y_locator)# G/ t4 F1 n' T5 E+ P5 {& U0 _
plt.ylim(0,100)1 _( M/ @5 W. \2 X8 E/ j- m! z( A& O
ax2.bar('sound', loud) M. r g+ K5 V8 D7 ~
ax3 = plt.subplot(223)3 m- N e: C0 C
ax3.xaxis.set_major_locator(x_locator)
. ?. z5 A7 E1 t6 k' d/ p ax3.yaxis.set_major_locator(y_locator)2 a! ^0 ?& D) q: b( ~
plt.xlim(0,100)
2 l8 Q) ^9 L5 y plt.ylim(0,100)5 k3 Z6 u2 b3 D7 Y+ N
plt.title('聲音、音量散點圖')
9 @2 o. k% g7 L ax3.scatter(loud_list,bri_list)
) _$ y8 s- D, ^8 W+ G ax4 = plt.subplot(224)
# ]8 T: A- j ~$ k( Y9 c" C S q ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
0 a$ A( E& a3 e, M plt.title('童芯派電量')+ S6 {' z6 U4 f8 A8 Z
plt.pause(0.2): I1 j# ^& x5 N# L1 i; V9 A/ P5 n
plt.clf()
' O2 g7 F/ S( O! q) d4 Q& I9 e: H if cyberpi.controller.is_press('a'):" \7 O( a3 ]# Z0 F1 M
break2 Z' {% a% {+ y+ g* x! c" I
if len(bri_list) > 500:
% P! v+ I3 p4 ^ bri_list = []
4 d# d* w1 D) [* D" d loud_list = []
( R) t: {$ Z% V% j$ y8 c& H
( T( l. r& m6 Y/ P7 Q2 U |