本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi & @" B/ |6 n. D
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
) h+ w! Q8 w q/ L4 F1 C
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載
& A" Q! \% W7 j# x7 u( F- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。& i/ @* D, k' C
2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
. m; U1 u+ Y K
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
1 G0 V! X4 U0 q T% r7 W
1 u' N2 {) \$ ^& k5 p. S- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
* } {" `% W8 ^ H( A # ^3 H9 c7 S/ P! x
- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
/ `; e; m2 h% W1 f8 H. {( g: U) D 8 w6 r$ I# A8 G& x- N! u" V
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。
( D* w8 |8 g; T; b7 |2 I% f7 ^3 K ' f. j) k q" ^3 s' Q( b
3.童芯派第三方編輯器程式設計準備
, }5 O5 }) C3 G4 w- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。
, \ Z) M7 ^+ H: u ! k) k$ j7 s: V: {
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。
6 O7 z. ~3 \1 Q
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
l, K3 C8 P# U- d/ L2 U# x) x2 i- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。7 }7 S( W7 k/ n; U1 j5 C4 j
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。
0 h1 |0 v6 p9 o: \$ r4 }# O; k- q+ `' x: n7 b) V" U( A/ B
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。
% T _ P, u7 S U6 X + E! z( n9 E* L
4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。
7 i, k$ E( e+ r4 F5.一些程式設計案例4 z7 K% z. u" D. M U6 E! Z
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput & m9 N2 l& ~% H4 Q
功能介紹:6 W1 J# ?7 @& h+ z
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。% p/ e9 q7 D8 B) H/ Q/ f! b
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。 x8 U" \* s; l) u
結合藍牙模組可以實現無線滑鼠的功能。! P. R8 x, A2 C) X! ^0 [
* x% f' k1 C# K* Vfrom pynput.mouse import Button,Controller' u3 r4 k* k) a
import cyberpi
4 S6 o0 b9 u" w# V0 qimport time" ? Z9 k1 Q* y0 @$ F `
3 Y4 ^. R, f2 z& g+ a6 {5 `mouse = Controller()
! E; {1 E9 _8 l9 i2 s4 O
5 M/ ?( E$ P/ i" l% S3 c! g/ }while True:) u6 m5 @/ a! F0 f1 g: F& F
if cyberpi.is_tiltback():& J8 }# q! O+ e1 Z+ P
mouse.move(-3, 0)' E3 P" `0 m* }" s, a
print(mouse.position)# \6 Q U0 }1 m4 {: g% e
if cyberpi.is_tiltforward():1 B8 l) x/ H. R3 A! n8 F6 F/ c
mouse.move(3, 0)
- x& w8 @6 |, ]6 E& z7 w) J if cyberpi.is_tiltleft(): [( X. f1 ~ P
mouse.move(0, -3)
" d$ l: z" R; P! {. D' J if cyberpi.is_tiltright():- O, A' B/ P4 L7 n
mouse.move(0, 3)
+ Q8 D# a! Q* q7 b2 P" ^/ z# D if cyberpi.controller.is_press("b"):
) O0 w; M: q& }1 @1 X: u' a mouse.press(Button.left)+ l3 Y5 b2 K& S, m( u
mouse.release(Button.left)
( \( _! Z" ]9 S2 z( }# [6 e% c) t/ Q mouse.press(Button.left)
3 H9 S: l' |) p1 b8 }2 T mouse.release(Button.left)
2 Y6 t% k5 j* s0 [% w) @9 n, P0 W if cyberpi.controller.is_press("a"):
8 c6 ]1 R5 _6 R3 O) }0 P' J) ? mouse.press(Button.right)- _1 ^7 m' T% N' s% I
mouse.release(Button.right)& f% H; R- C t T* s0 j' a
time.sleep(0.01)
6 I5 F' o5 l, x; s/ ~
7 b* m* O5 }! V( s1 P" y1 u: C# Y f" b7 r
語音打字器 , U& n E u$ A, _% o7 b3 o3 i
功能介紹:4 j7 [2 S$ T1 S3 ^7 @: X2 U
利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
: A9 q9 h, A. g將語音辨識的結果通過pynput在文檔中打出來。( \; n- z# \, ^7 y _2 }
該程式目前只能支援英文。/ @2 r F( B; n( ?- p/ C" r
# m; d! }. m* v# }; `9 C
import cyberpi
% ^& r4 H* T& @: ^2 n. G, _" w& @from pynput.keyboard import Key,Controller" k/ j6 a u G3 ^5 t
import time
. Y! w3 Z3 N" i! L3 s- c ( s$ N5 d- T2 E/ f8 R# [ |5 ]
keyboard = Controller()6 `& D) v# I& }. \' a& o5 r
cyberpi.console.clear()
% f" u3 M3 ~/ |' D2 p* @cyberpi.led.on(0, 0, 0)
# f3 m$ H! F% }8 n# Z9 J; t/ N* hcyberpi.set_recognition_url()
, g' `+ ~ r) P& a# Z9 i g- _# Hcyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得5 ?( Y; z* @ Q0 t: g$ H3 {
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼")* C' _6 T3 X# y# E" K
while not cyberpi.wifi.is_connect():: j) g* z% n# N/ K [
pass
: F/ e# o W! j6 F. P4 gcyberpi.led.on(0,0,255)) q r# j. j6 N6 ?
cyberpi.console.println("WIFI已連接")
# U" h0 }3 Y# d. `. U4 vcyberpi.console.println("--------------"); P! _8 W4 @ Z8 C5 Z3 R e
cyberpi.console.println("按下A鍵開始語音辨識")
5 f9 D, O5 V8 F' S% Uwhile True:% j( O. s' F4 _* E# p: C- s
if cyberpi.controller.is_press('a'):& v" \1 J: H% t* ?6 l% ]
keyboard.press(Key.space)3 o0 \* N7 k K6 g; F
cyberpi.console.clear(): p3 G* G9 E( U0 o. g1 L7 i* s
cyberpi.led.on(100, 0, 0)
1 {5 e9 ~6 Y0 ^ cyberpi.console.println("開始語音辨識")$ i* i% y2 S. H2 M& W( U3 @' {
cyberpi.audio.play("switch")
7 R! C1 ^; G( x3 J6 r! i cyberpi.console.println("--------------")1 u/ @5 [' M' g: N: r& s
cyberpi.cloud.listen("english", 2)! y' r1 [* a7 W7 A: s
cyberpi.led.on(0, 0, 0)
E, j" c# k. r say = cyberpi.cloud.listen_result()
! N: _& l' i3 ?- o% M# n+ K& a0 y cyberpi.console.println(say)* H( q, w4 g# Y9 ^' R) {
cyberpi.console.println("--------------")
+ A: G e5 ?0 ~( u: _ for i in say:
8 v) u" R5 H# u; P' { if i == '':( z [% x% [; X% j( f2 I: {
keyboard.press(' ')
$ s v; I/ w- J1 ?9 k else:
! M. Q8 p5 z( q- \' b keyboard.press(str(i))9 C7 r+ _% b! L/ N
time.sleep(0.03)
2 U' n" P1 W& U% c) f& C9 N7 o
0 H8 S' j* o( @9 s4 T3 [% amatplotlib音量柱狀圖
/ T5 ]) K! h- b4 ] ~, [; |2 simport cyberpi
5 m( y# M4 i6 ?4 U9 M4 Q* \import time% X3 q) Q9 ~; B
from matplotlib import pyplot as plt! T; k! ]+ _) Z
: \# N4 z' @( |1 }' }
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] U3 u3 a n) H: z
plt.ion()
$ }. B" a- c9 E f- S' y- \
8 k U5 o. v/ B' S; s6 B& Y1 i% Dwhile True:) `1 R: O$ M% ?" V' {
loud = cyberpi.get_loudness()
( R$ s. ^5 a9 a" H, j* J% h plt.clf()& _7 h- B! b# ^" c; y5 Z1 K+ n
plt.xlabel("數據名稱")( t. S( `9 p p& N( F; `$ J8 i
plt.ylabel("音量讀值")4 o. q! A; s# _2 {7 j) N) A
y_locator = plt.MultipleLocator(5)
: P) x+ w( L2 E3 f* k! `, k ax=plt.gca()
8 F2 |5 q3 }* | c9 L7 d1 U# O2 J% F( F ax.yaxis.set_major_locator(y_locator)% `2 `2 R/ C6 ~8 J) t6 W
plt.ylim(0,100), V0 |+ X& R+ W! {2 ?: ~* Q n) D
plt.bar('音量', loud, align='center',label=f'溫度{loud}')! N7 C0 v( M R2 J7 [" y0 v m
plt.title('童芯派聲音感測器讀值')
$ \0 h* X4 t& q% T8 ?( N plt.legend()
4 ]% L% x; p4 T- a+ N8 H9 j plt.show(); V$ X3 p& H7 K; o
plt.pause(0.01): o& R: B# l6 X: N& @" o1 J
& q7 J. m! p0 t) P ], L6 Q" m$ M! D
" {" i2 Y0 I# \- V; Amatplotlib 多圖表顯示
6 u; d7 ]2 K" { W2 Y
% q- K1 `% x! s2 k* X' j/ a+ b% Efrom matplotlib import pyplot as plt6 L8 W8 N- h" }; x. w
import time
0 W8 P7 |' g; s: B, K7 B8 R& [import cyberpi% Z' I- h* @* L* F: Y( s' R
# o( I2 [9 K! s+ D4 t1 e
loud_list = []
8 d W3 b. m; @- T0 K0 |4 h% Ibri_list = []
$ I( h7 ]9 |) X C1 G6 _* Nplt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體/ K, h( J% k$ M* T, ]
plt.ion(); ^6 M" ~+ q% R5 H/ C% o7 T) B6 o
plt.figure(figsize=(10,10))' [: Y6 t( S/ v: Z7 B5 Q
plt.figure(1)5 m8 @, Y3 k+ q3 e, L% K0 G9 l3 ^
x_locator = plt.MultipleLocator(5)
6 U5 S) P8 E/ b7 t+ g0 ly_locator = plt.MultipleLocator(5)
0 {4 m. o6 I) ?5 S' Gwhile True:
& Q/ m8 w8 q( M/ c: X& V loud = cyberpi.get_loudness(): O9 U7 m' N9 K, M' [( G: W7 ~* J
bri = cyberpi.get_bri()# q; |5 ^& X6 n1 ?
loud_list.append(loud)* F. T& ~& p8 u' w$ V0 d, Z
bri_list.append(bri)
% u4 x4 ` z0 g, ]8 ^ battery = cyberpi.get_battery()
+ e( r' n/ J* q% _; a size = [battery, 100-battery]/ ] L1 c1 V6 W
status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%'] h+ p! I$ t" ]% w' B; D% E$ X& W
ax1 = plt.subplot(221)& Z9 I/ H" V1 a7 \2 S k
plt.title('光線折線圖')
' H/ ^6 Z0 \ m6 X0 f5 x4 ] ax1.plot(bri_list)
+ g+ g t I* v% @ ax2 = plt.subplot(222)6 Z$ t4 Z& B& }( {
plt.title('聲音柱狀圖')
! Y; ?) J+ k3 e6 G# Y ax2.xaxis.set_major_locator(x_locator)
7 T! m# L9 h$ @8 r( L v7 ~5 c ax2.yaxis.set_major_locator(y_locator)
2 D- x: u) Q% L plt.ylim(0,100)1 w9 U4 r! A3 \/ v, w
ax2.bar('sound', loud)
; k+ t- w6 b8 e' C) Q/ m8 W ax3 = plt.subplot(223)
( |. }' z' s1 g2 h) S! O ax3.xaxis.set_major_locator(x_locator): L5 K/ E1 d R7 N E2 u
ax3.yaxis.set_major_locator(y_locator); w0 T) L6 v9 c% x- y( A
plt.xlim(0,100)/ b# e' f, {* p& O
plt.ylim(0,100); ?, @* y/ R- q0 A3 E
plt.title('聲音、音量散點圖')
/ K, H! B. N9 P0 x& C4 O, b4 _; | ax3.scatter(loud_list,bri_list)# @: |; a6 g7 ~$ g2 F n3 T
ax4 = plt.subplot(224), h, V: h* w! X! N
ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'}), }7 Z+ u: q0 Y2 {7 {
plt.title('童芯派電量')' A3 d) j+ D# i Z/ T
plt.pause(0.2)* ^2 e3 w1 U: ^6 U$ g% M+ [
plt.clf()) w5 Y3 n+ C0 O+ b) p
if cyberpi.controller.is_press('a'):
- T7 J) s: l9 ]6 _9 p break
+ M) K( h( Z7 Q/ z( M( N if len(bri_list) > 500:
. O0 n: }# U$ o. `9 D" W5 [ bri_list = []
. _$ T) w2 n( E) i; d- N! T$ _- K loud_list = []
2 _% o7 k A: ~2 f2 g$ R* s1 K2 m- d) B% M
|