本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi " n8 O3 |. H) `/ X% _$ F$ N) j/ ~
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。6 B1 i3 c* \9 C
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載
7 e1 K& _4 f" j' I9 d6 E V- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
& Q$ i- }8 G! H: T/ o L& F6 C& c 2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)- Z: |) j. }8 f& |* k
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。; i3 l8 B7 I5 m* V& X; _( `
0 r6 k" u$ {2 ^( {/ N6 t) X- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)& ?; h5 @5 D5 l% c: C, J
" F7 ~1 L9 N5 Y# g: {- T2 m
- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。+ a* r9 P2 p8 m, g. I0 o
5 l9 \! o+ C% \9 }4 G9 K- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。- Y( _0 C: K0 ]7 ?" w. r
% i$ g0 z# ]" k3.童芯派第三方編輯器程式設計準備
8 x$ H4 U! {4 P3 g7 h- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。, Q* z: X; b6 ^6 f1 y! A2 b8 i) i
: R; P9 @9 U9 Z/ g: X \
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。
5 O' R3 w9 z" q" v' ^ L2 \
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
0 Y7 e, p% a9 z' r# G1 {- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。* Y4 M) \+ d! l7 Y
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 : R- u J* T" o# Z" k" t
+ R$ ~* l' s1 {( ~6 o+ k- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。
- ]: N; \9 f2 F7 }$ k' N
( o7 w. Y* ]3 D o9 ?4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。
: h# c# P* [) s5 O; A5.一些程式設計案例
( f% |( d8 `* F L* ]) L& i. l a童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput
8 E* ?" }1 U0 {$ i功能介紹:# q$ q+ U% d5 Z' {6 N' [
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。- M) [# N) |' D
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。" G5 h( V+ k2 j8 n' o) Y. T* a
結合藍牙模組可以實現無線滑鼠的功能。
! i) P/ X/ ]% |" T6 ]9 y7 V' a% g' x, A
6 M+ N# Q( l( ~) S( Sfrom pynput.mouse import Button,Controller1 @# P/ M. y4 b6 H( U/ f
import cyberpi' a, L) p& o' g( c& y3 x2 \# Y
import time
, G1 Z8 a1 V- V6 r0 m: `
9 ^8 Z, t0 `# G8 qmouse = Controller()
# Q% ~* F! v5 W% R
2 i, N0 Z- I/ R+ ~ H9 R7 X5 f# u0 Hwhile True:
6 Q( i% Y1 t* f9 C if cyberpi.is_tiltback():% ^( Z( ~% `1 \9 B& P9 i
mouse.move(-3, 0)
. H: e3 }" G; R# r, v# M# \5 j print(mouse.position) L R( B* I! K- g9 _' D5 T
if cyberpi.is_tiltforward():2 M6 l5 x; v( t
mouse.move(3, 0)
" ]; q1 E& F, b+ C# {) w# U3 @0 T if cyberpi.is_tiltleft():
" ^" V# _& L$ {1 z6 {9 w; [ mouse.move(0, -3)) {6 i+ k1 \, f
if cyberpi.is_tiltright():8 m j& i8 u( h& S" I/ a2 u
mouse.move(0, 3)
5 z. B1 H- |2 d" L if cyberpi.controller.is_press("b"):# G0 j# f4 i$ c+ B9 \6 i
mouse.press(Button.left)
; J" R. ~8 X6 j/ d' K5 T mouse.release(Button.left)) d+ P5 m2 N" X9 }7 |2 _0 X' ~
mouse.press(Button.left)1 h; ]5 u# V5 J) z+ ?
mouse.release(Button.left)
* U, B9 K% p( q/ I8 d4 E/ F if cyberpi.controller.is_press("a"):
4 N* Y# h+ N; A; k mouse.press(Button.right)
: H1 c/ n3 F0 A* k; X3 _4 `1 s& }$ G7 S mouse.release(Button.right)
. t/ ]- F4 G4 [: \, k time.sleep(0.01)
( f* c1 R! Z2 c7 ?2 ^( s9 |9 w
5 P! ]" @) M# E- n: r A3 t5 A( H/ U* x* }
語音打字器
% _- p+ ~. |1 }* X6 ~' E功能介紹:
9 k6 D& p, ^1 K, m' D8 {利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。/ G$ r3 x3 o4 E* ^* x7 i$ ~, _
將語音辨識的結果通過pynput在文檔中打出來。
- e, d7 m$ O* ]該程式目前只能支援英文。
$ y3 Q. R7 n& R2 G$ T# l1 y# h" Z D2 ~
import cyberpi
$ |5 q7 c, w' S h# vfrom pynput.keyboard import Key,Controller5 v& Q) D% I' L
import time/ j8 y( G1 i0 A; Z4 f) m
( m$ y- e1 g; ~9 e2 Tkeyboard = Controller()* E! r1 Z4 O6 N* N3 @: d
cyberpi.console.clear()
) n% w8 D0 ?$ E3 J; Z" [cyberpi.led.on(0, 0, 0)
1 W' y) N. J; j- ncyberpi.set_recognition_url()4 D: {9 G$ _4 N* G
cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得- o# T/ ~) l1 C6 P. `
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼")
; M- w. c' n6 O1 W* T1 L( {; ~while not cyberpi.wifi.is_connect():* Q- F9 g F% v' v
pass+ Q: L4 e/ n! a
cyberpi.led.on(0,0,255)
' B+ B/ G' M3 E5 ]$ B( Tcyberpi.console.println("WIFI已連接")
% E+ R. ^7 q7 T; s2 e+ w' v1 ]cyberpi.console.println("--------------")
, g0 W% l9 f/ Q* _2 Ecyberpi.console.println("按下A鍵開始語音辨識")
p+ H }, u: J& {while True:
x3 j- k3 p+ z t if cyberpi.controller.is_press('a'):
6 M4 p0 J* l5 H* Y# D9 }% t1 ~" r0 U keyboard.press(Key.space)6 @3 M; H# ^6 l2 x3 T+ J
cyberpi.console.clear()
9 e& `0 l9 h" H" b+ c% N2 F* J$ w cyberpi.led.on(100, 0, 0)
3 p# ^2 ~3 b; y" o# ^0 Z! h cyberpi.console.println("開始語音辨識")* \! Y; n4 O/ {5 R" V- V; ?3 |$ s
cyberpi.audio.play("switch")
2 n# R, M. `0 N8 h+ Z9 _' x cyberpi.console.println("--------------")
; _( n: {% e. V, l3 _" v! a cyberpi.cloud.listen("english", 2)
+ {; K% `6 t1 p! s$ y" D cyberpi.led.on(0, 0, 0)- @: P, |0 N' o
say = cyberpi.cloud.listen_result()
: e4 w$ `+ a U7 R cyberpi.console.println(say)3 X- Z/ W- X; }! ?* i
cyberpi.console.println("--------------")
. I5 e/ U# M1 A' W- I! v3 X for i in say:
# b( {; }8 p5 A if i == '':
: ]0 t: P: V6 m k4 P' p) P9 Q8 h) J: _ keyboard.press(' ')2 `4 q" u" V+ }6 W8 v) M) M
else:
0 a% |4 Y2 t% R, _- \6 v- l, m keyboard.press(str(i))/ u1 d3 q. P# K$ P2 x
time.sleep(0.03)
; K! k; s" Q9 r" z6 j: _3 w( y8 L: X# r8 M% r* v$ X) J0 s/ \
matplotlib音量柱狀圖 / ?! e; G) u. ~ F; m/ C
import cyberpi) Y; P& m6 n2 e' R- A' E9 c# s* C
import time
" [3 T- S* F5 y0 y% {+ X! ifrom matplotlib import pyplot as plt$ k( k4 b' B8 t; i v7 d, S( @8 }
8 y" }+ J, Z9 {& p2 P, L
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']( H! [2 c9 d! W7 |. a3 ]2 B; E
plt.ion()
5 g9 j% a+ c: C6 R ^( e1 P. \
) s8 P, h: l$ U- r Qwhile True:
* ^' n% ]% S, [8 f( K7 Q! p loud = cyberpi.get_loudness()
8 _3 c% g( ~& d( Q plt.clf()
, |/ n; C% d3 K/ C7 X plt.xlabel("數據名稱")9 _' `) Z) P; I
plt.ylabel("音量讀值")
% @/ K- n5 z; c0 F0 f2 w! ^ o( g y_locator = plt.MultipleLocator(5)
+ g0 `5 j! J! r ax=plt.gca()
, H* D0 I8 u$ [) O) ^# y ax.yaxis.set_major_locator(y_locator)- f7 ?) f$ W" p6 [# E+ n4 }
plt.ylim(0,100)* L( e2 E) H6 b( }% }
plt.bar('音量', loud, align='center',label=f'溫度{loud}')# n8 k5 f* d) j) T7 O
plt.title('童芯派聲音感測器讀值')
7 n/ X9 ?" i6 `% w, s4 W& F: Q plt.legend()
, t6 U4 X3 g" E4 y3 F plt.show()
0 T" ^! }$ n' Q8 L& G3 f I: z, Z plt.pause(0.01)
& f1 r8 j& F. Q9 _, l7 s
% W t. K5 _6 {- q- c8 O' x$ Z9 V$ O b. l9 t; q2 n, k! c' R
matplotlib 多圖表顯示/ @- D; |+ K! |/ `
# t7 x. A$ d0 s: h/ Sfrom matplotlib import pyplot as plt% r/ L" i: _ F# g
import time8 U5 K" S7 a3 D3 z
import cyberpi' j8 L2 b9 D3 g. O, w3 q
$ P* J) s' |8 Y8 U$ g8 ^
loud_list = []
0 G) j9 Z# ?+ d) r6 o5 fbri_list = []4 t; ]1 p, x8 I A/ T5 q; x* v
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體/ _* H, k. r: s0 @* p
plt.ion()5 L$ f0 v- Y5 M8 N% q
plt.figure(figsize=(10,10))
# t) x3 Y. N+ I' a& z! X0 pplt.figure(1)
- P* F) J4 U. \! x xx_locator = plt.MultipleLocator(5)! @" i3 \, d( t5 H
y_locator = plt.MultipleLocator(5)
1 G9 I9 j$ |- ^# K- u# Ewhile True:
( h% K2 x/ ?7 f! ?+ q loud = cyberpi.get_loudness()
1 g# q9 X B# J1 U( r/ N6 o7 o bri = cyberpi.get_bri()
0 c$ p$ W$ Q( W+ ]0 c, P- R* y5 C loud_list.append(loud) z* } j2 V- S. D; N8 |
bri_list.append(bri)
w# {6 C& `: B battery = cyberpi.get_battery()
1 s/ w7 b* s" i; R' l6 }4 ` size = [battery, 100-battery]
) p- B, k0 B8 O1 y. ^( \! S status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']4 L$ E0 R; h4 e3 ? d4 G2 x
ax1 = plt.subplot(221)" I+ O' |4 ]& n: r
plt.title('光線折線圖')! F6 @; |8 Q3 X! W2 o$ s# s
ax1.plot(bri_list)% B4 `4 b0 }) v: D% m2 N
ax2 = plt.subplot(222)4 T% S q% F* i+ T2 B
plt.title('聲音柱狀圖')
8 {! u3 Y4 j, L4 T3 q, ~$ g ax2.xaxis.set_major_locator(x_locator)
1 z9 Q- G# P4 m' J& z3 @ ax2.yaxis.set_major_locator(y_locator)7 R2 C5 Q3 c& Q" e+ h q6 E
plt.ylim(0,100)
+ [! J! N9 {# h# O& D ax2.bar('sound', loud)
0 S0 k" `! c6 X x ax3 = plt.subplot(223)
2 u; ?9 P! A' E5 V' y, f# H ax3.xaxis.set_major_locator(x_locator)
g; o: F* ?9 u S ax3.yaxis.set_major_locator(y_locator)3 x& c/ d9 q9 C- t
plt.xlim(0,100). ]$ @9 X; p3 c* I% M. p: s* [ Z
plt.ylim(0,100)+ r, m4 `. b& h; u: E- F
plt.title('聲音、音量散點圖')
, P8 ~" ]' p. k& S4 [1 L ax3.scatter(loud_list,bri_list)% u$ o* I3 C5 [! ^. R! v: I/ L
ax4 = plt.subplot(224)
3 S( w/ }& S8 q- ? ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})7 P* d7 c5 Z2 i3 J$ B1 c, u. A A
plt.title('童芯派電量')# Z% n. m. _) `/ Q1 ?
plt.pause(0.2)
7 y, r; x' r1 {6 P9 L# e plt.clf()
6 n5 E3 x; c2 w. @9 j q, X; n if cyberpi.controller.is_press('a'):
( _, e1 |" q3 L/ F- R/ b0 e break
( g1 A7 x7 [7 u4 Q- A% u% y; z& C if len(bri_list) > 500:
$ O) ]# z9 Z4 s bri_list = []* G; T' Q3 j3 M; _# P
loud_list = []
$ C( P* v6 E6 |: u$ ]
z0 P3 @5 g- e! L |