本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi }+ h; h2 G' \, h
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
9 r6 x; R' c4 T6 a7 p+ s9 g, l
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載
, }* G7 k5 g* g I- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
' x2 h6 E7 v7 X5 o0 B& m M) i 2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可); ?4 w- l: u `# v
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
; L1 C9 k: t0 T0 ~5 o4 n $ y$ ]( e. Y7 E4 V% b& a- B
- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)" I! D4 f4 A% v" @# u
; o) s/ K9 ?+ h9 J6 r$ l/ M2 @
- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。- I* S0 A1 l; l/ i7 h
" V: x$ V9 B$ M% D! n
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。1 t: A! Y4 ]7 U, ?
" A# S3 i3 v$ g8 ?( h3.童芯派第三方編輯器程式設計準備9 q0 z8 O" y. z/ v
- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。
% y! e7 J4 {7 S; R# @9 @& F 8 R+ [* N# R- f: Q# m% @
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。
1 I$ k- }: M" \- R
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。 1 g- {) i0 S1 C
- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。
4 U) r! ~# u& ]6 |9 v+ Q. N2 P
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 & N: T/ S3 j ]; n; |- J
* a- T4 }2 Y2 b- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。
- v+ ^8 O; ]1 d3 R
5 h4 u3 j2 c/ g, }% j: j4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。
* T2 D1 R8 Q1 S! E+ V5.一些程式設計案例& d% o* }7 ^1 H
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput 0 x8 t! p5 t( O8 E* r I/ h
功能介紹:
3 ~) F0 B( o6 O8 s# F7 @利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。% T$ i2 J* x/ x' _! K2 h
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。
5 q2 r( j, s( _) Q結合藍牙模組可以實現無線滑鼠的功能。
2 h r) B9 g* f4 {' u p7 ~1 r/ V& c! G$ f5 e7 N# \
from pynput.mouse import Button,Controller2 {# \" j# M; d
import cyberpi# _ |" J2 x# ^- l& T* l
import time7 M% B* S2 v/ }! A0 _5 t
2 I% m; H& t( S# d) K9 z
mouse = Controller()
; f5 m; x: ~: }: v! \+ G. r 4 a3 S3 Q# q+ {8 R
while True:
8 K5 E+ k1 ~) y2 w' Z! @7 O$ L if cyberpi.is_tiltback():/ I4 ]9 l+ N) U7 J8 Y
mouse.move(-3, 0)
8 l+ v/ o/ S/ H print(mouse.position)
2 C& Z7 ~0 K- ]. r6 K if cyberpi.is_tiltforward():$ w: W; j% o2 y+ h9 X' o5 \
mouse.move(3, 0)
( m+ M1 |: G. U5 i1 b, M2 P$ ? if cyberpi.is_tiltleft():
/ L# b/ r" J# M. t, v mouse.move(0, -3)
1 |8 K8 ?5 C% ?" K if cyberpi.is_tiltright():
" U$ m h. k X7 c+ w% r& l2 \ mouse.move(0, 3)
! o* u8 p; `- R& [; s& s$ p @! @3 Q, I w if cyberpi.controller.is_press("b"):
2 g& Y/ ?7 }: ` N- d4 l mouse.press(Button.left)* c: g7 g& O7 M. t' e
mouse.release(Button.left)8 g' _$ D: a# b* z2 O2 u5 e
mouse.press(Button.left)
1 z+ E. G* a+ W7 h mouse.release(Button.left)0 z6 }) k- b$ ^; w
if cyberpi.controller.is_press("a"):
" ^- t, V0 J0 J. l ]- P1 T9 m mouse.press(Button.right)2 k: b3 y8 K* ]7 P' @9 n: h' K; k
mouse.release(Button.right)
9 C: W5 ~4 _% g) L) F time.sleep(0.01)/ m0 P9 y) ~8 V$ g; j
* T8 X/ J# r/ c9 |8 d
- B. T8 \. [& k" R# _0 c: Y語音打字器 ' G% Y' C! X/ z: W2 k+ ~
功能介紹:
@, f. D( M+ m y$ a1 m. T& |利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
: o' u. l4 C3 @5 k7 _1 D將語音辨識的結果通過pynput在文檔中打出來。
: F E. o: e5 e8 j* r$ O& n7 ~, S該程式目前只能支援英文。' y" E* O" k" p5 q+ \
+ L4 N1 a! n+ O) C' m8 Y9 @5 @! w0 Q
import cyberpi) u" ^9 O+ B# N5 N |1 v: Y) M, I# R
from pynput.keyboard import Key,Controller" s6 ^( M: b! Z# @$ u' s8 W1 p
import time& e/ e1 w y: \- V {4 Q
k! H1 c+ I: g9 M6 [
keyboard = Controller()
. [# |# T" N' i: d" A( c7 j5 y. r. G' ccyberpi.console.clear()% V! i: l6 O+ J2 N9 h- c+ e
cyberpi.led.on(0, 0, 0)
3 v; C5 b/ v! c! \2 _cyberpi.set_recognition_url()+ G: W# |9 \: {
cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得
2 x: i) B F' @cyberpi.wifi.connect("WIFI名稱", "WIFI密碼")
7 ]- z2 L) k. @" ^# L' Ywhile not cyberpi.wifi.is_connect():0 \: `- ?; v$ b& A4 L. d
pass7 A0 r; x) ^+ @2 P/ S. t( x
cyberpi.led.on(0,0,255)& s9 K. h- Z) E( q' M
cyberpi.console.println("WIFI已連接")
4 @. l# z5 A' Wcyberpi.console.println("--------------")
" O! Y+ K/ J# h! e/ qcyberpi.console.println("按下A鍵開始語音辨識")4 j$ w. f5 o: l8 A8 o
while True:
7 j3 N' a. I+ r5 m/ Q! }2 V if cyberpi.controller.is_press('a'):
+ K- Y5 L: S3 s5 t% l keyboard.press(Key.space), T' e# A/ i+ `; ~
cyberpi.console.clear()
! X+ X, o9 C% U! r& B. P' @3 ^ cyberpi.led.on(100, 0, 0) O: m. |# ?5 @4 Y; h: t7 i
cyberpi.console.println("開始語音辨識")
1 Q h& [+ v7 `' w t9 y7 ? cyberpi.audio.play("switch")4 o+ C* ^6 ]$ I- a3 }
cyberpi.console.println("--------------")! ?, z5 x- z: T0 ]
cyberpi.cloud.listen("english", 2)
4 B1 Y+ c( c5 z) A cyberpi.led.on(0, 0, 0)
2 I X1 y+ v4 W; z5 @, R" Y say = cyberpi.cloud.listen_result()
- O2 t0 n" \" W1 ^8 Z( J0 n' _ cyberpi.console.println(say)3 [" g- D0 [4 N4 B. }
cyberpi.console.println("--------------")0 H3 B, E! k5 [6 W' z* _" z
for i in say:$ n n1 h6 |2 @( s# x4 W7 Z; [
if i == '':1 g4 N/ M9 p9 r: P! I
keyboard.press(' ')
% R# P* \+ r* v4 _1 X else:, i# q$ j* V. X+ P+ C
keyboard.press(str(i))# U: ^" \& _3 G: y8 U( o
time.sleep(0.03); H7 S) \6 v0 e
/ a& O3 D% r( I& V9 z2 X! nmatplotlib音量柱狀圖
6 S9 o: Q3 {$ D& D: i- ?import cyberpi
% T: S) ^& O+ ^( _import time
6 h8 W- R' ]( H7 Y: v: m2 ]from matplotlib import pyplot as plt
/ q4 j( o8 c* z$ R, L8 u
' k7 i8 g& \4 `/ F4 j* `0 `; Vplt.rcParams['font.sans-serif'] =['Microsoft YaHei']
: U7 l2 W- [& j0 F; H3 |4 K* [plt.ion()
6 X' o/ x' V' g1 J: b
2 A/ {0 M8 t, p; S7 Twhile True:
4 l( D" l% i6 r1 O; u; A! h* y loud = cyberpi.get_loudness()/ m6 O: o. x8 I+ }7 t8 K" q
plt.clf()
! K8 C: U Q: V1 ]: l0 c plt.xlabel("數據名稱")
: }+ b( \& C% L* B8 n3 j* V- r6 K plt.ylabel("音量讀值"). L" A* t+ Q4 d
y_locator = plt.MultipleLocator(5)- k9 j: A8 Z1 J6 j. q }3 U
ax=plt.gca()- I$ N9 {) y- z8 P9 L% R
ax.yaxis.set_major_locator(y_locator). {3 N4 I! y" g$ J
plt.ylim(0,100)
9 h: S9 J0 c; H0 i/ ^ plt.bar('音量', loud, align='center',label=f'溫度{loud}'); r7 A6 V! ?" c! U q. t) i
plt.title('童芯派聲音感測器讀值')3 |; z) Y z @4 f0 P b V; Z
plt.legend()- Q9 v# {3 Y) U# {* c1 X3 V
plt.show()7 v; U& v. w' o
plt.pause(0.01)& _. f3 Z4 h* X. [6 o! g) I3 @
; k9 h2 b2 T* W/ a
% k, p# L8 v2 E" U5 i# F" I
matplotlib 多圖表顯示
! M, O- {& {" @
4 h0 n5 \8 h. n: f+ ^from matplotlib import pyplot as plt% ~0 Y8 j$ ?. \* {# I: X
import time
9 h1 K$ ?* u" D& r1 Gimport cyberpi
2 h9 @3 Y4 C$ u; q
% [$ j" O$ R6 _/ X0 tloud_list = []2 w8 O: `2 k H w8 y$ M
bri_list = []
9 W# f& o! W. mplt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體5 H3 c# E5 l8 d' a
plt.ion()) x) E3 e* i" ]0 D! ~" s
plt.figure(figsize=(10,10))* q: [, t2 \0 h6 C" O" X; F
plt.figure(1)
' e/ G. {. c, H' O- lx_locator = plt.MultipleLocator(5)" g( U* ], X {( m
y_locator = plt.MultipleLocator(5)
$ b; M: k& }4 j- vwhile True:2 I6 [3 K1 v- r1 j; {+ D
loud = cyberpi.get_loudness() ~ H- Q/ u- M
bri = cyberpi.get_bri()
) Q0 s: t8 w8 M6 f' ]7 n loud_list.append(loud)1 D9 `* }+ B6 b+ I) a& p; c$ @
bri_list.append(bri)
' d( l9 `" T/ ~, K* ?3 ?9 D battery = cyberpi.get_battery()7 c$ _( _( b( I: o- @% J. \, o
size = [battery, 100-battery]! Y$ w6 H. l( d2 Z o! q: x
status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']
" ]- u" U& d! `) d0 e! | ax1 = plt.subplot(221), H% u4 ^5 z# v/ D
plt.title('光線折線圖')
# _) c' n& u5 t( l% T- b* x, B# n- o ax1.plot(bri_list)" S" P$ f. G4 s+ e; K
ax2 = plt.subplot(222)" Q: C( Y( z' G8 Q; v- Q
plt.title('聲音柱狀圖')
- I; r4 d* ]) c K ax2.xaxis.set_major_locator(x_locator)
! r% j* c% t- h [* E ax2.yaxis.set_major_locator(y_locator)
: Q; ?; p8 C- k! {! N- \ plt.ylim(0,100)
) W9 x& `6 S8 j+ P. Q7 B ax2.bar('sound', loud)
# A3 s7 X/ V8 o$ s7 w' j8 y/ g5 M ax3 = plt.subplot(223)
/ Q% N6 }" f y' Z$ E) W% R( M0 u: \2 [ ax3.xaxis.set_major_locator(x_locator)& L5 j4 V* f7 H& z: w
ax3.yaxis.set_major_locator(y_locator)7 ?/ `% a5 f5 c
plt.xlim(0,100)' Z8 ~9 C. f( ~) {7 y9 A
plt.ylim(0,100)
6 ?4 c3 ]* w; m* ~8 v' _ plt.title('聲音、音量散點圖')* Y5 V# K8 r* T; u2 ?
ax3.scatter(loud_list,bri_list)
3 w$ j: z S' C ax4 = plt.subplot(224)
M( b3 y$ j d) S7 v' C ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})9 ^ x4 n6 D3 g$ {% F
plt.title('童芯派電量')1 G& d- {. Z6 Y
plt.pause(0.2)
" x9 t+ p& g; u7 X; r0 a: F plt.clf()
9 t3 v9 V. }' x4 _ e- {& T if cyberpi.controller.is_press('a'):( n+ X: c( Y& d$ m6 j
break \' d; C+ E$ P' d) j! ^
if len(bri_list) > 500:
8 \) h* B2 ~7 U+ B9 N2 ` bri_list = []
5 c7 E( M b ~( I: h loud_list = []9 r# C& H9 x) W- J( b! a
$ Y; |+ |0 f8 k/ v
|