本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi
5 b" S/ Q% ~2 n- q# ^$ h1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。4 |7 [, w; n5 M
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載 1 V$ v# K/ {3 @. G
- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
! f: r w$ G |/ R, ~* r 2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)8 R5 N3 E; V, [+ D7 L3 B+ a
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。! |. t: G! t3 k( f' g- Q* j7 _$ I, }
2 E3 n$ X5 P' A k- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟), H( ?8 h6 m8 V$ `$ [$ |
5 Y+ x" o" H- @0 D
- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
% c- ]1 k# [8 j* s( v 0 a, l$ p3 L' `, Y7 o' e
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。) j ?' \: [. k
4 F R r2 h9 J3 d+ r3.童芯派第三方編輯器程式設計準備
2 L7 Y7 i5 Z$ g- [- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。
. s: S, F% r* s! e2 |: }, Z# r" U$ S 6 }0 H7 g4 g* _2 u/ K
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。
% m" i8 y" n5 Q; k& e
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
# ~) `) ^0 R' |. Y4 _/ j- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。
) b" ?( U+ E5 H( G$ W
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。
% t- l5 Y" f; u9 i# S+ S( n1 [7 l5 T, d
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。/ X! ]2 D" p0 i2 z8 K, d9 f
6 ]& c- _9 a( ~2 `7 A4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。
0 j" R; `5 z; ] d' |' |, W5.一些程式設計案例
' W% J6 ]% T2 N9 V童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput 6 K: R$ C/ f' ]9 @4 }
功能介紹:2 g' Q6 @9 X8 C9 H" Y: y) ?6 G3 i0 ^" U
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。
4 O1 |1 m. @& ?2 T: w9 r通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。
: a. J. o2 t3 ?/ `" ^# X, y; J結合藍牙模組可以實現無線滑鼠的功能。& g) I' y$ o! }2 D* i2 l% |# C
; E( v! B3 H9 z
from pynput.mouse import Button,Controller
, }7 Y9 Q* R6 d/ Uimport cyberpi8 C" @5 @- `$ E
import time
) Z/ g0 G5 H! |* _) d8 N
) r6 ~/ B& |: k8 qmouse = Controller()
& y* y( [+ U6 r. i1 Z2 B% I) _
5 D( n @' @0 rwhile True:
: _4 a; h- e: \ | if cyberpi.is_tiltback():
) X' o) C3 l3 M mouse.move(-3, 0)
$ p. F+ r D F* Z print(mouse.position)
6 o, E6 q# c1 e7 T if cyberpi.is_tiltforward():9 _" l! m' R- z
mouse.move(3, 0)0 X( c2 f( l: T8 X9 w
if cyberpi.is_tiltleft():
9 y9 K, T/ [/ k: L2 ~ mouse.move(0, -3)
5 t( e' p5 b" o+ l* P% G if cyberpi.is_tiltright():4 J: Q3 m% N: ^" T* j
mouse.move(0, 3)
5 g& S0 g5 ^3 Z& ?( K% W. C if cyberpi.controller.is_press("b"):
4 ?* m; z4 Y' I- n0 }8 L mouse.press(Button.left)
, d: M( C& B; m) L& _ mouse.release(Button.left)* t" F# p; c* Z# A" h
mouse.press(Button.left)
- B9 Y4 E7 J2 W+ r/ t4 P7 [* X mouse.release(Button.left)
k! P' s9 N( B% Z& s5 d7 u! o if cyberpi.controller.is_press("a"):
8 m) }2 @9 @; ^# @: A, L mouse.press(Button.right)+ \0 H2 I, Z/ P
mouse.release(Button.right)
& r& ^! G! c4 G) e, P' s% ?9 x v time.sleep(0.01)
& w( e P' {* E% ]% a7 M6 w# `4 e: E$ { o0 D1 y' c9 b$ L
- H' m) n7 C8 ^6 M
語音打字器
$ K! i1 s. U- e! u) d. v9 A功能介紹:/ p1 a) H6 I8 F
利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
) u( F q: d6 `+ a$ F! i將語音辨識的結果通過pynput在文檔中打出來。
& O* x! M# r/ O( a+ h6 Z該程式目前只能支援英文。
1 G8 Y( `: ^/ A; z( u: a' m- V+ J/ @: M8 x
import cyberpi( W' T0 S# V2 g- p" u0 o6 ~
from pynput.keyboard import Key,Controller
3 @( B I d+ ~( uimport time
* r7 e2 Z1 n. B" ~, E4 v: h
5 C9 a' X& x5 T, fkeyboard = Controller()1 [" Z% U% ~# g$ Q3 J
cyberpi.console.clear()% v7 T9 k _6 K" F
cyberpi.led.on(0, 0, 0)
1 j" T) Y3 W5 u8 b1 @& ~! E# Wcyberpi.set_recognition_url()
9 P1 l8 |0 X# D0 B- D% x- e: H: Ucyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得
% Y( Z. l8 A6 m2 t. T# Hcyberpi.wifi.connect("WIFI名稱", "WIFI密碼"). K! P2 }; E9 o( I- Z
while not cyberpi.wifi.is_connect():4 F8 t7 J$ v% Q1 \* [& t
pass
# j* Y' j+ ?9 D7 ^. F! Q7 Acyberpi.led.on(0,0,255)
! V0 P3 ^ w" n- r0 X8 ~cyberpi.console.println("WIFI已連接")
# @5 o, i" f' }8 a* K4 e- Vcyberpi.console.println("--------------")6 }3 M* n" U/ M% S
cyberpi.console.println("按下A鍵開始語音辨識"); M! u* F' C# {# @3 s
while True:
$ H' v2 H" @# N8 X0 W if cyberpi.controller.is_press('a'):* r/ I4 x# z. M
keyboard.press(Key.space)7 ` i) l6 {5 T) e; Q
cyberpi.console.clear()
+ U$ P/ y) N; j% o2 Z9 v6 f# K cyberpi.led.on(100, 0, 0)
! p* m% N" B% r cyberpi.console.println("開始語音辨識"), |: A4 P, d, X1 Y( @, k+ i- m- ]
cyberpi.audio.play("switch")
* p/ i" O7 m& B) w6 n cyberpi.console.println("--------------")
8 [7 T% v, n" K2 `6 Y cyberpi.cloud.listen("english", 2)# _1 |# z' j0 p1 {
cyberpi.led.on(0, 0, 0)% b/ }% X/ o% F+ Q5 j5 ?2 o0 w* J
say = cyberpi.cloud.listen_result()
/ N6 F& R9 B8 o9 E+ E8 y cyberpi.console.println(say)( a: G* Z" P: p" y& ~, `
cyberpi.console.println("--------------")
/ T2 u6 @& q _ for i in say:
# W4 ]4 l' @. j3 \8 Q2 h: T if i == '':9 r- c& Z; C K+ ?5 u8 Z
keyboard.press(' ')
% Q1 J" |8 _5 U else:
- V) n7 h8 Y+ B/ k% @! F4 S keyboard.press(str(i)): U* Q. G8 C% N9 |4 D* Y
time.sleep(0.03)! S) D+ j* t/ o$ X k: L4 ]
& Y% K7 N# o0 O' b' K3 Tmatplotlib音量柱狀圖
: B* j8 f0 s! W' T' \' `1 ^import cyberpi/ n, a& R. y5 d5 J, \ V O' ?
import time
1 n! ^) U- ~$ @" d( Sfrom matplotlib import pyplot as plt# H: ]0 d! }, o( G& A
' S3 ~6 o8 ?( r( N$ V1 R! t) o7 n. Q
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']( P% N9 K2 e9 U5 t3 j8 n! R
plt.ion()0 |( q; y5 e% ~
% S% n: ?0 u+ K6 n7 y( e* Nwhile True:
* f0 m, |# s' c9 f0 h loud = cyberpi.get_loudness()
" e, _- T$ T& f* ?+ W plt.clf()5 t9 e, y8 F7 T5 u$ S
plt.xlabel("數據名稱")
4 i+ ?' }1 X# W4 V plt.ylabel("音量讀值"), D2 Z f. o, t0 I+ d4 q+ J- o
y_locator = plt.MultipleLocator(5)
6 y+ y7 ~1 x1 l( O/ p; c5 S2 H3 T- P ax=plt.gca()
( C( b2 u/ Q. k+ l; s+ I ax.yaxis.set_major_locator(y_locator)( f; X& H! l' f9 W Y7 |8 U
plt.ylim(0,100)
9 ^; n3 T1 Q2 q plt.bar('音量', loud, align='center',label=f'溫度{loud}')0 g& |# [( a( `, Z
plt.title('童芯派聲音感測器讀值')- x2 C( O$ q6 ]* `" H) u
plt.legend()
2 I9 E# b, w. |( n! P plt.show()
/ _* o$ G" x, c1 K9 o5 t plt.pause(0.01)
; h5 y4 T* ^& a6 s* g4 o
* e' a. r2 V( `; L+ {7 P% `$ [# `9 s9 f
matplotlib 多圖表顯示
) L( p2 N, ^# G5 i% ~/ _3 }: T: r1 k$ o. q
from matplotlib import pyplot as plt+ |) U0 q# `, [1 C# }
import time8 d* p+ R% h% J+ u( S, o
import cyberpi
+ h2 [ v7 s! o- p8 @ * D/ B, O# }! g" x9 a* K
loud_list = []
. O9 |/ D- m! a& j f4 y( ^bri_list = []
" c, e3 A' b) R- E1 w9 Mplt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體0 c! m, L* k0 w4 K
plt.ion()
% T+ J/ |" O. X, r) y+ Qplt.figure(figsize=(10,10))
! l3 Z) ]& o4 a, }. t: j$ B+ Hplt.figure(1)
6 T7 l- ]5 \$ K; X4 u2 l- ~" Cx_locator = plt.MultipleLocator(5)4 P5 `, c; z! {, z! S
y_locator = plt.MultipleLocator(5); y0 i X7 {% @2 W( y: V0 b3 U$ }
while True:
- w+ O( z) g0 Z' U0 t) s loud = cyberpi.get_loudness()% k1 o. ^" c. X* b$ r
bri = cyberpi.get_bri()
* X) P9 m) B0 `* \ l$ G6 I% d loud_list.append(loud)
) A2 Y4 ]- Z) W bri_list.append(bri)2 k- l7 A) x. G/ r0 X2 u- b) M
battery = cyberpi.get_battery()9 C! Q" z$ h( P3 N
size = [battery, 100-battery]
* V& I8 _4 [% i status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']! ]* E7 A6 E" V7 m, J
ax1 = plt.subplot(221) N; V7 k- k |8 P2 Y
plt.title('光線折線圖')
+ O8 U' U" X6 m' y/ R K ax1.plot(bri_list)5 Q5 N: j# D4 A+ b) {) v% r! V1 I
ax2 = plt.subplot(222)1 N( z3 O) J4 W, b! t+ K* j7 | g
plt.title('聲音柱狀圖') P( \' i5 @8 W0 f- f
ax2.xaxis.set_major_locator(x_locator)
; j+ ~) F @+ E; r4 \ ax2.yaxis.set_major_locator(y_locator)* Y3 h9 B r i& @+ H' j
plt.ylim(0,100)4 u/ |$ g8 c5 f m) Y
ax2.bar('sound', loud)
, |4 \, g/ N' U( C9 c q ax3 = plt.subplot(223). l$ y: o. Z* X% M5 p. [+ c
ax3.xaxis.set_major_locator(x_locator)) u* S; A9 K, b* X7 X' [' ?
ax3.yaxis.set_major_locator(y_locator)
# U6 Y/ e% H( q5 u7 s plt.xlim(0,100). q% {+ B; B3 i6 ?2 D5 K2 ]
plt.ylim(0,100)
% E+ r5 v1 ]1 i" d6 e plt.title('聲音、音量散點圖')
4 M# v- Y+ o/ a6 W ax3.scatter(loud_list,bri_list)
J; K9 v$ h$ S! x7 x ax4 = plt.subplot(224)3 G/ \1 Z; \1 C/ C9 N1 z0 b; t
ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})3 }% x( H: _7 A2 B* ]& ?
plt.title('童芯派電量') s: G& W6 s# j" ~
plt.pause(0.2)" e% g4 }$ m+ p: s3 v
plt.clf()1 w9 p9 l2 J) d* }" U
if cyberpi.controller.is_press('a'):. x6 p% j4 ?1 c# e: h- ^
break t+ a0 x, q1 ]/ O% F
if len(bri_list) > 500:
3 `1 @: g# F+ @) J* s7 L5 t bri_list = []
" N6 [2 L5 `' M. t6 U/ U/ [8 m loud_list = []
5 o- W) q8 Z9 M( i3 I! o" U0 O
& }) F/ D0 h" a z7 ?! A. a |