本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi % D% t! p+ b n4 S
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
4 n, J3 D* y8 v, V) J5 E: k
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載
% @1 \6 J9 h2 F4 T) z! z- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
1 C$ t! s* W* n- Q! T- B 2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
% x6 V# u: G5 G+ C% j
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。* g3 M3 i( N8 J: p
4 b* x5 s% o9 W4 S- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)# K2 M$ i% Q; d$ d* s: F) y
: V# p; y$ S1 ~: m* D3 p2 G" w& z- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。$ y' C. T2 D/ ~2 S% M# w
2 ~1 M2 ~ `6 n+ I6 {
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。
+ G( J0 D) r P6 P- B% ^
' ~+ r8 {* X, r' Z6 n, _3 A/ X3.童芯派第三方編輯器程式設計準備4 d4 h# m+ D% q% f# s4 v# O& y
- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。
& }. a9 |. Q$ @5 I $ ?& u4 `6 k( O, K; `/ P: t/ W
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。
/ L5 _8 r; ]. X- ^, ]* ^. Y# T, Z
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。 5 J2 f a# e i: J+ r% U1 V
- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。% ]! `9 Z' W9 u! Z
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。
7 N+ `- p5 x! I4 N
8 z. U2 x9 d% s. D2 f- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。% B! A, _0 F' r f
, C R1 U0 X; E( I4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。
6 M( i3 t# x. J0 s5.一些程式設計案例7 p) E N- Q" k- [
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput
, G5 ~; p! J% k8 Q功能介紹:
& r& C! M5 @( O' i/ U2 R( x利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。
! x8 j7 S1 J4 ~) L7 i通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。
0 O4 w# {% \4 x" q" }" |結合藍牙模組可以實現無線滑鼠的功能。
7 k2 i7 V( Z. q# Y9 w
+ g$ L, b1 t mfrom pynput.mouse import Button,Controller
' v; i4 v' g+ rimport cyberpi7 ?' ]! h+ `4 y! r0 T1 J9 m
import time
" H! V/ }9 \: {; _ N
5 K$ f# B) j( r( [! Amouse = Controller()
9 w( i9 _0 l; |3 S: y
" r& b- }. l4 A' C4 s, }8 [while True:5 f8 I/ G1 B) g4 d. O( `
if cyberpi.is_tiltback():
6 Q+ U2 x! d# @% O mouse.move(-3, 0)/ x1 @8 D# |9 k
print(mouse.position)" p1 p5 W, c2 U$ x/ n# T; I
if cyberpi.is_tiltforward():
( b& F2 ?. G' D3 d. o- O mouse.move(3, 0)
9 l0 W1 A4 @" a! e; F! x if cyberpi.is_tiltleft():6 B- N. O* m) T# l- s: i6 ^
mouse.move(0, -3)
% \) o+ X+ R9 F; d1 @* `3 w if cyberpi.is_tiltright():
) D' c) v; {. c9 \3 r4 b mouse.move(0, 3)2 j0 I5 k! f9 l
if cyberpi.controller.is_press("b"):$ C; f$ h: n/ x9 y0 A0 M; k
mouse.press(Button.left)
1 c/ G: x- e2 v( O \8 C mouse.release(Button.left)
( D' S4 J" w. O5 f( W6 a mouse.press(Button.left)! D/ n" @4 M" `8 f
mouse.release(Button.left)
9 d S: N4 v" Q. j: X# l if cyberpi.controller.is_press("a"):$ h9 P; L6 o& X/ l' _1 g
mouse.press(Button.right) z; m; w. [! Q7 O) x" x
mouse.release(Button.right)
% E/ C8 j/ \# b5 S" Y+ a time.sleep(0.01)
* h+ }4 e% \. e$ j. [
8 T0 h% v9 a* f7 o( `) k
" S+ _0 M s( W# c0 D+ ^8 g Z5 l語音打字器
! `$ Z6 H' U+ w5 O0 t2 ]功能介紹:3 D& n& j" W- i9 \
利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
! _0 M0 h$ Z- o& J( c" |- V% j將語音辨識的結果通過pynput在文檔中打出來。
N& D3 w! s9 q" r) ^該程式目前只能支援英文。
" R, ~3 s. k1 K2 O$ r% u9 F3 K( X! P& ^! e+ o
import cyberpi$ d. T% r2 |- i5 ]5 B; R M& Q( C
from pynput.keyboard import Key,Controller
# O* t& D( n; t5 [2 n- G$ [. wimport time( q4 C6 z$ Y; K
\/ `! }/ J8 R- x
keyboard = Controller()
2 j7 c$ @8 K! }' q5 `cyberpi.console.clear()
. j j5 i0 y6 x' F. ?cyberpi.led.on(0, 0, 0)
* F0 ^% v0 R$ C. X$ n6 C& ycyberpi.set_recognition_url()
5 p$ C& ^8 j& g4 q+ pcyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得) I+ l8 Q6 F0 X0 R( P) v8 l5 N
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼")# d1 Y( R; ]' D1 [- ]
while not cyberpi.wifi.is_connect():
, s `3 ~2 T. F' b2 A pass
1 b3 z; y6 z9 K3 t4 Rcyberpi.led.on(0,0,255)
8 p9 m- q/ E0 Q8 V9 `cyberpi.console.println("WIFI已連接")& t# r1 [0 J6 |- _2 P( E5 `: L- |
cyberpi.console.println("--------------")
7 Q$ M9 b/ H) @8 {cyberpi.console.println("按下A鍵開始語音辨識")
; P9 t7 B" b& S$ swhile True:. [: O7 o* q( g/ ^& F7 }
if cyberpi.controller.is_press('a'):" V; @! T' i E9 B, F- E
keyboard.press(Key.space)8 X* ?: ~* i. X6 S/ U- K# L8 y
cyberpi.console.clear()) V, i6 r o7 U
cyberpi.led.on(100, 0, 0)
6 ^1 K, w3 F% b5 B4 x6 W7 O% A8 C cyberpi.console.println("開始語音辨識")' g- u$ X5 P2 C; g5 Y
cyberpi.audio.play("switch"): @% q- [# ]% t* d3 v4 \/ ~
cyberpi.console.println("--------------")0 }# |6 g! @* D' R9 V! L
cyberpi.cloud.listen("english", 2)! u }1 L0 T+ N) `' m/ }& t' j- y& t
cyberpi.led.on(0, 0, 0)6 K3 K2 p: @6 k3 Q7 i: K' `/ g* `
say = cyberpi.cloud.listen_result(): E( P1 o9 h+ h6 E+ Z
cyberpi.console.println(say)
; G1 P! |) n5 S- A cyberpi.console.println("--------------")) V' p/ k' S4 m. G
for i in say:
; W# @ K" J7 z9 c- [ if i == '':
9 p% e$ p1 `2 M1 x I4 X; z keyboard.press(' ')
% c9 @4 Z# m+ h, C- C. [4 F else:
* k5 N4 E) v2 \ Z; _' J5 R keyboard.press(str(i))5 U# A* |' m, @6 J
time.sleep(0.03)
' E& Y7 X1 o3 p' H8 E. q# A) X: p& [7 a% y' {! @$ W J" ?
matplotlib音量柱狀圖
) c" C; w3 t! J+ s S b! S6 [, vimport cyberpi* k0 r; o) ^% w# k
import time' M2 T: Z& c$ h# v# k
from matplotlib import pyplot as plt. q- V% e% l" @4 K
" t3 [; i0 k5 G" K6 B+ l; g
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']9 F3 F4 s1 M$ R+ i
plt.ion()7 F* I# \$ [- w& X1 G
0 [+ z. u) ?! `2 B- k0 V, R+ T$ Q
while True:
: w3 Y% p) Q2 H* z; f loud = cyberpi.get_loudness()
, {$ Z. j, S0 h: _" M" b) t ?( U plt.clf()1 [ i; L. p# v5 ^/ h
plt.xlabel("數據名稱"), R ]3 a! w% N$ }/ D% i
plt.ylabel("音量讀值")
& m/ {! x L* i: ~5 ~, r y_locator = plt.MultipleLocator(5)
6 w' W9 _" k( P ax=plt.gca()9 n5 L3 r& q( R& _# k' m
ax.yaxis.set_major_locator(y_locator)
; ^) b+ u, {# T4 { plt.ylim(0,100)
8 p v5 z. D5 l4 n! D* R plt.bar('音量', loud, align='center',label=f'溫度{loud}')1 C" D4 X& S9 Y: ^9 A9 a
plt.title('童芯派聲音感測器讀值')
- X' J; n5 [& F4 z plt.legend()8 P/ f, z. P4 W4 D1 { ~
plt.show()
; w. m |* s+ E3 Y9 P6 j( C plt.pause(0.01)
, C G. e% l/ }# S9 J4 Y
6 l/ _, z- p. p# L8 ~+ } n4 a; @# U( f8 H8 d
matplotlib 多圖表顯示. A) l- _- }; ]( I& a
) o2 T3 V- z/ w: f
from matplotlib import pyplot as plt
- R3 P9 ?7 z3 ^, u3 vimport time
" u, M* f0 P! nimport cyberpi
9 s6 ~; C& q5 R - W- R X& s5 H
loud_list = []2 z. E6 D2 V2 d/ g; y# b6 W, A
bri_list = []: ~( v- p! J+ F/ d! P; b6 p% f
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體% ~2 X0 z6 H( k6 P8 k
plt.ion()
) N0 w0 f! }7 a/ L$ _- i) aplt.figure(figsize=(10,10))8 d; W- j: G$ X/ B$ k
plt.figure(1)
2 T9 d3 t+ L) Nx_locator = plt.MultipleLocator(5)
D% S) N3 O" u) ?% xy_locator = plt.MultipleLocator(5)
' P7 ~2 @" l7 L3 R p9 Bwhile True:2 M+ P J$ ~) Q3 w
loud = cyberpi.get_loudness()* d- `4 `4 P' {0 X6 I$ \
bri = cyberpi.get_bri()0 D9 H) T" |9 I# i" e9 [, j
loud_list.append(loud)
0 Y' G0 X1 e" O. K bri_list.append(bri)
9 Z) ?3 w- r2 f- w battery = cyberpi.get_battery()' U2 E: o& U0 E4 d: ^& q
size = [battery, 100-battery]! H# k7 G( K/ Y$ W
status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']! _$ r; N6 g2 l5 g" b6 w
ax1 = plt.subplot(221)7 e5 f/ Z6 o4 x, Z' r
plt.title('光線折線圖')
, J, K# M) ]7 K% ?4 u& E0 r" Q" i ax1.plot(bri_list)0 q, U; f6 B( Q& x
ax2 = plt.subplot(222) [5 `% j! t y7 m- |
plt.title('聲音柱狀圖')8 o1 Q7 r' R6 l X' ^2 p6 X; x; K; W
ax2.xaxis.set_major_locator(x_locator)
5 N6 p/ E8 i* _% t! N ax2.yaxis.set_major_locator(y_locator)4 B# F( y( [: s
plt.ylim(0,100)
% i9 @% f) E5 y. O ax2.bar('sound', loud)1 c4 k6 e, d7 p% O% E
ax3 = plt.subplot(223)
% ^: Q0 E5 c# B% Q' w+ L8 \ ax3.xaxis.set_major_locator(x_locator)
) E+ i3 k l' ]: j ax3.yaxis.set_major_locator(y_locator)0 T& ~# E3 M* }4 ?3 V
plt.xlim(0,100)
$ N# g: d$ v0 |" I3 C' F plt.ylim(0,100)
* K4 S& Y! N* |; h: G8 I plt.title('聲音、音量散點圖')* l1 r& u1 A% G1 B1 x, G1 q7 u2 \
ax3.scatter(loud_list,bri_list)
( s; @( d0 B6 X ax4 = plt.subplot(224)
/ w% q! O; h# ~+ v+ s2 i ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
- ^5 ]) s7 }% v5 [2 x plt.title('童芯派電量'): H0 v6 z7 d. J+ M/ B5 a' U
plt.pause(0.2)
5 P0 u* Q& a/ y$ p2 s/ B t plt.clf()# R& U# J1 T7 d; ^( l' p
if cyberpi.controller.is_press('a'):
. V4 |6 r5 W/ M4 Z9 Z- z: a" o break1 e7 N' }/ \; p4 \; {" n
if len(bri_list) > 500:
5 u% T$ l% c3 k! m2 E" v bri_list = []4 E: x( C' j2 V# a5 h
loud_list = []5 E: ~# O; B, i8 T2 { ^
, X+ C0 }0 @/ Q' Y2 j( X3 f |