本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi
" n# L/ `: ^' Y9 H1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
. [& i8 y# V$ g! c+ t5 ?2 a
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載 ' X8 l: x3 K _
- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。8 P0 _7 o0 x! k. t
2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)- T# F" e7 m" q+ c* Z
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
1 \5 v; i# b6 j4 v1 U* U5 p7 E: N 1 J- T9 ~/ v) C! g
- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)! Q" p9 z3 A- N H1 F, K& [
- r( @+ J% U( b# y! N: E8 p- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。 _# @6 f- _8 a# s% \' B
) Y% H% @( r2 p6 i
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。5 _$ w. c* D) x8 j0 I m% N0 h
) z: K% Z/ W- Q& S9 d0 X& S
3.童芯派第三方編輯器程式設計準備
1 M. s7 M! o9 V6 w0 i- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。
# K# s! \& N" N! H; \, K0 j
; K, s# g) I! Z( H7 A- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。
. M7 `7 p4 c6 k# t5 e- w
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。 ) n+ b8 @- X4 Z; h+ S$ M1 `; E
- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。
( x1 ^- ]$ S$ {2 u# K6 K
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 * N. |; q) @, }* n1 v
8 U" q! Z Z4 O! b! M
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。 E7 e# G5 l& L4 B2 `
; [: N% c, u! q3 r0 W6 c0 s0 l
4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 / m$ x' ^( j, R/ n* S: ~5 L: f: e
5.一些程式設計案例" F) T* z' ` p* k) R
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput - v$ v" ]( a# w9 s
功能介紹:$ ?7 B( a0 u0 e4 v. H
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。! i/ r2 q/ t" {8 D. S' k0 A
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。
1 A& _$ }. n; {5 Z6 b$ e7 y結合藍牙模組可以實現無線滑鼠的功能。
: X4 s/ b# P! M2 x+ R
4 A) c' {% w0 A5 Y2 {from pynput.mouse import Button,Controller7 _& h# e. u X' b, r9 g' e7 s
import cyberpi
" C5 I3 d5 |7 g9 I0 nimport time3 M a; z r! w$ ^1 @
6 L1 A! H% o' ?
mouse = Controller()
r+ ?3 M$ s& ?2 |) ^9 s$ i , |1 A2 k' P/ r
while True:$ f3 ^$ h+ K) h" q# `2 @
if cyberpi.is_tiltback():4 S, I: W( s( |8 i
mouse.move(-3, 0)' A% d$ R4 ^7 K& L
print(mouse.position)
% z7 w" M6 A/ t$ W% F if cyberpi.is_tiltforward():4 @8 K. Y' c/ _6 T ~6 \
mouse.move(3, 0)( K& h+ N# G) \$ B; a" u' Z
if cyberpi.is_tiltleft():1 o8 x# _! F# @, ~# ?% E
mouse.move(0, -3)1 I5 n; o7 A+ z$ c4 `+ L
if cyberpi.is_tiltright():- W4 z( l. w- f$ T2 Z
mouse.move(0, 3)
5 ~$ J6 q+ v, V2 K; L- @0 G if cyberpi.controller.is_press("b"):
* K% `! c. {0 `, e! F mouse.press(Button.left)
9 I, ~+ f7 E+ z! C( h* W. j; m/ v mouse.release(Button.left)
1 H0 {/ u4 a. v mouse.press(Button.left)
, \0 I( A# C* f" |' l mouse.release(Button.left); }' {. K, S9 {9 D6 G9 z% G/ E4 Q
if cyberpi.controller.is_press("a"):
8 q) |2 u5 x$ o# V4 A1 Q) p: s mouse.press(Button.right)
& U$ M/ s' o+ W7 a' F1 l- h mouse.release(Button.right)
% }4 ?% g1 c, ?; _ Y time.sleep(0.01)
& A$ L4 m z; [- S6 [+ G+ a3 T, T/ V( Y
' a1 I; e# o5 e- s7 C語音打字器 + Y# J1 r5 q1 b2 @4 Z+ o+ K
功能介紹:; f0 y, t3 l% A( l& t
利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
, Q) d M' l. S2 U: P將語音辨識的結果通過pynput在文檔中打出來。
3 c* Y# u: ]4 ?& w% _. ^; L) t該程式目前只能支援英文。7 w" l) r" } \
3 W! V0 \/ X" U
import cyberpi1 v6 i: ~7 Y2 A9 H
from pynput.keyboard import Key,Controller( \. y6 m$ O; q
import time% y% t* ]+ ]& r6 H
" T1 ?8 @; b0 c! c" n s2 P1 Okeyboard = Controller()3 |6 G% c( N( A
cyberpi.console.clear()1 R) Y6 C% c; p% l
cyberpi.led.on(0, 0, 0)
- C! R) r) ^! O. wcyberpi.set_recognition_url()
6 A' B& W% b* C4 _( d( F0 Dcyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得
5 @& \7 E+ M1 c; o. @8 d& ?cyberpi.wifi.connect("WIFI名稱", "WIFI密碼")* u& T9 D: c8 e' G
while not cyberpi.wifi.is_connect():
5 i; \4 b e; D& |+ @ pass
$ W. F! B1 r% t( bcyberpi.led.on(0,0,255)
) N+ u; g1 W. P8 d' `cyberpi.console.println("WIFI已連接")# N& G" p8 l& `
cyberpi.console.println("--------------") {, y* i2 o3 X; p6 X
cyberpi.console.println("按下A鍵開始語音辨識")
3 T9 W- }; C; l" ?' N( l$ R" D; ` Xwhile True:
" w. V& w: d" e- x6 I if cyberpi.controller.is_press('a'): s& H" _- ?- K& J( S: s* K
keyboard.press(Key.space)% q9 H$ k8 a: E# ^' t6 F! b
cyberpi.console.clear()
8 g5 U3 M% W5 ~- E2 i cyberpi.led.on(100, 0, 0)) \8 b8 @' n1 f( c
cyberpi.console.println("開始語音辨識")+ J! L+ N/ y. G% K5 E. U9 N4 {
cyberpi.audio.play("switch")
B( t# a) m4 m. H" t% ^ cyberpi.console.println("--------------") H3 ? ]# \: m- r6 ?
cyberpi.cloud.listen("english", 2): X8 d- V( R$ T; a
cyberpi.led.on(0, 0, 0)* j( t+ b3 y* H7 i0 N4 [
say = cyberpi.cloud.listen_result() n! V* B" C- q$ R+ L
cyberpi.console.println(say): O L' i. w) T; Y4 H6 S* q# b
cyberpi.console.println("--------------")( m1 i F5 M' m9 u( V0 l, w
for i in say:
: a- P- ^! E$ W k1 } if i == '':
6 r' Q# N# u* W) P9 G7 M keyboard.press(' ')) B6 \9 E! c4 y Z, Y
else: E8 f( s# X! ^+ @1 {* b3 `/ P
keyboard.press(str(i))
# T' l' B9 a6 N: J- j time.sleep(0.03)
J% X; D* R& H* n0 C4 {! B3 U2 ^. h2 |* y
matplotlib音量柱狀圖 ( o& b* X' N3 P' e9 Y2 D4 C; t& V
import cyberpi
% L4 b" e5 r3 U% R; h( `import time: a" F% e) ^: X, J6 j
from matplotlib import pyplot as plt: Y4 |6 T. U0 q3 R# I, z5 w+ j+ K
0 w$ f8 x5 E z- d) o
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']/ e2 o$ \3 @% B) ^, q1 G
plt.ion()5 W" W2 p* w( X! m
3 H) u3 E, e# P# G6 R
while True:
7 _4 ~9 h# G$ ] s2 E loud = cyberpi.get_loudness()' Q9 Y! Z# v% C! e
plt.clf()
! X, Z% t) h: p, L+ }% p" Z plt.xlabel("數據名稱")
% J0 I2 |4 V9 M* Z6 b: T' A plt.ylabel("音量讀值") ^1 O% L! {: `1 N
y_locator = plt.MultipleLocator(5)( Q* \2 I3 o' p8 S' [) ?: T
ax=plt.gca()
. R* t/ Z# R3 a8 e# l7 |: o ax.yaxis.set_major_locator(y_locator), L! k+ u+ g* K$ T
plt.ylim(0,100)
' v- x0 G1 C8 Q( G, G j3 y plt.bar('音量', loud, align='center',label=f'溫度{loud}')
+ G0 O M' X$ Z% c plt.title('童芯派聲音感測器讀值')5 W9 j$ m, p A7 g# i' ^
plt.legend()
: u! Z+ A+ }7 H' u4 f plt.show()
0 a; m/ ^2 H0 X" D: A plt.pause(0.01)
( G0 Y. d3 |& e# j$ Y- v3 \
: ]+ t$ C2 V5 z" F
5 H0 d; d2 v3 k, M1 G" Omatplotlib 多圖表顯示7 h* n5 |3 }/ Y6 P% y% l4 R
) v* p7 {* y0 ?( U5 bfrom matplotlib import pyplot as plt
( i; z' D$ V* W' M1 ~3 R# yimport time, h' g7 ~6 L- Z# z) K# d; m* Q8 x, K% t
import cyberpi/ d n* d2 F" n( n- Y0 \/ M
9 h5 v' }; c3 \6 p; k! L
loud_list = []
' \5 J* L" H, h8 p, t2 Ibri_list = []
5 T. d8 C6 E$ ~plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體4 O7 |% R8 ]/ t" z, u
plt.ion(); H+ x6 ?: t# i: \& N1 H# I
plt.figure(figsize=(10,10))' ?6 l% x Y8 C) e W! \6 Y0 x4 c
plt.figure(1)8 G- l% z2 s) }
x_locator = plt.MultipleLocator(5)
% J2 _2 s$ P x5 y7 V% Uy_locator = plt.MultipleLocator(5)
. c7 T, @. i: s a& }while True:
7 A: w/ {' A7 A) S: _+ @, c! D loud = cyberpi.get_loudness()
; q3 V& P% y9 s1 U bri = cyberpi.get_bri()- a6 N e5 f4 C5 S0 l1 _. u
loud_list.append(loud)$ \6 D8 ?/ ~5 D* s2 c3 e+ r& [, S
bri_list.append(bri)
2 E! W* y* l# v1 k: Y battery = cyberpi.get_battery()* @, A2 g$ a3 e4 m3 `; r. j
size = [battery, 100-battery]
; @9 X- x' O# A" m- j4 H6 ` status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']
/ z" m% t& P5 g" G' k/ a0 I; j' A7 L ax1 = plt.subplot(221)
4 h0 l8 W2 H, u" }5 s# X# ? plt.title('光線折線圖')
8 U: X4 I2 F! W' v ax1.plot(bri_list)" s) @# D& p, U+ b$ J. W
ax2 = plt.subplot(222)
3 i: G5 y5 S% I/ v. p plt.title('聲音柱狀圖'). f1 g1 K& b: |! @6 I5 d+ M) ]
ax2.xaxis.set_major_locator(x_locator)
, [; ~1 Y) ~7 w; d- g ax2.yaxis.set_major_locator(y_locator)
! F4 |& h# |$ O6 @" X0 Y plt.ylim(0,100)
4 E/ \" D( b6 H. G0 \ ax2.bar('sound', loud)2 s- ]0 U: ~9 I5 p G, s5 k) k$ L
ax3 = plt.subplot(223)
: S) `& N0 g1 o# N" O2 B, g ax3.xaxis.set_major_locator(x_locator)
+ U2 [+ B$ |* e% N% y9 k4 h' M7 M ax3.yaxis.set_major_locator(y_locator)
2 l; }/ |0 ^/ M! x. D plt.xlim(0,100)/ }% D4 ]& L1 i; ?; P5 F( X
plt.ylim(0,100)
- O, O2 H: o5 p2 Y9 U) A plt.title('聲音、音量散點圖')- f |% P7 p' m* ^$ w
ax3.scatter(loud_list,bri_list)
5 }4 X) E: d% s8 U! X ax4 = plt.subplot(224)
?. R* |" r. c ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'}): [4 o# h+ s; U2 n3 b' F
plt.title('童芯派電量')
6 e" W- D* P7 Z, p, E& I) v plt.pause(0.2)! a- l# c+ N7 t5 l
plt.clf()
7 V; M0 w1 S6 I/ H6 @$ E1 k if cyberpi.controller.is_press('a'):
/ _: d1 N; _5 ^% [7 a$ I- U/ @ break
4 C+ t# d9 G' ^" b if len(bri_list) > 500:. o7 T7 R5 b, z, x7 T& @2 h
bri_list = []6 K- u; c( R5 M& ~
loud_list = []! V/ z* i& b6 m3 k) z
1 Z5 _7 p9 \ [& |( a' S
|