本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi # @+ b3 r. `( Q; M3 `, x/ R. U
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
x# ]' x b+ v' p
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載 8 |5 E2 h/ f3 e" \! B+ v
- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
% R/ `( o3 o% K5 S" Q# p7 y 2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可), V5 d. W- d1 W4 \
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
' L7 X' z, s4 j! k- K( ~ ! r: L0 Y6 Z" P$ R7 }
- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
g& b6 {7 H+ v5 p$ B' L* ^5 G" ~ # n7 o% V+ A! |& n2 [+ y
- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。$ S. D; }6 K4 r x7 G9 I* |$ o
* E$ J3 b, j, \- ^; ]
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。/ I/ T7 ?6 }) b2 i, [
0 R: U, _# d1 t( b0 ]3.童芯派第三方編輯器程式設計準備
9 W p7 V, @# b' F u) B- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。
8 x2 V! A k( }' |8 \+ R# O1 \
, ?7 v2 X% b. A3 V1 u, E9 v- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。) ]( i# s' v0 K) ?% c5 E
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
7 `* m# _- i% C! K4 c0 w4 h7 A- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。' X x0 \: R7 p, r t( W
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。
8 T/ f. h W6 f3 h' [0 {0 K8 r4 X
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。
9 e2 X4 L& T3 x2 r/ b
( i1 L/ R/ f) A. z4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。
* Q1 L0 T k' ~- E/ G' a8 t# r' f5.一些程式設計案例
, G2 R1 I/ U5 f! q童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput
, n& E! X, `* _# a功能介紹:
3 i0 I# c- a! o" E Y% }利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。
7 U# M( S+ p0 W5 {5 ^9 g7 T3 b: E通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。
2 T- f- q) r! k4 B+ f結合藍牙模組可以實現無線滑鼠的功能。
) z3 s( n8 f, W, Y2 p6 s5 V/ j/ w, Y
from pynput.mouse import Button,Controller
+ t* X9 ]6 @; [' }) n/ b7 k0 ]- ?import cyberpi( f" q1 i* ]* k# _1 S
import time
" B+ N9 r3 z, U% L, h5 N
0 Y: z5 O N. Mmouse = Controller()1 f e% J1 H/ Z# n2 V
4 ^ x# G( w7 ?0 v, r& M2 S, Ewhile True:+ t4 G" b7 |( O* }8 ~$ @- p8 X
if cyberpi.is_tiltback():& t4 L0 z" z8 x, X7 T
mouse.move(-3, 0)
: E8 z- s1 @6 c5 ~6 W print(mouse.position)
3 c# P) n; H& M if cyberpi.is_tiltforward():
8 L e5 L/ B9 j9 g0 X% w4 y mouse.move(3, 0)
4 {! @0 \, r9 t7 S) ?. w+ b if cyberpi.is_tiltleft():& r1 p; w4 V% n! o' I& }. m
mouse.move(0, -3)
) O9 m: j R; p% p3 `% G if cyberpi.is_tiltright():
Q9 z9 ~, B* r+ ^/ v mouse.move(0, 3)- s+ |. M. D& ^' G# Q. @7 Q0 }
if cyberpi.controller.is_press("b"):6 G s/ Y( j6 [1 f
mouse.press(Button.left)
9 c& i+ s- S7 t7 o# `2 c3 D. G mouse.release(Button.left)
, T* \! r1 q1 J' [6 Q7 d. d mouse.press(Button.left), @1 b' l+ K! M
mouse.release(Button.left)0 f" u0 b0 F L* d
if cyberpi.controller.is_press("a"):
/ l. w7 n- r) o' C' h mouse.press(Button.right)
- v+ R) j, {9 F( u6 N3 v3 G3 c mouse.release(Button.right)
, M+ U+ {4 Z; O' [+ G time.sleep(0.01)
* @# X% Q1 [+ X. c8 U
/ M. f# t, t ]9 q, t4 M8 x4 n+ _- x# x7 {4 [4 P
語音打字器
) s( t: M9 {' F7 h1 P功能介紹:# q) y+ n0 d1 ]+ ]: ]% Q% s2 u% r
利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。, _. z4 V$ x$ i0 C
將語音辨識的結果通過pynput在文檔中打出來。+ G) r1 d" M' r% A
該程式目前只能支援英文。
* q& {+ B/ Y7 A2 j$ y w S) J- y( Y- K$ F' Y( Y4 E
import cyberpi
1 k/ U5 z4 O* s9 S* T+ @6 bfrom pynput.keyboard import Key,Controller
( S4 D5 \+ ?: \4 P9 a M) bimport time9 @' r9 H @8 j* i& t* V
$ W' I a" m7 C0 xkeyboard = Controller()' E3 y; r& ?2 d* [: Z% _: B- f! f
cyberpi.console.clear()1 q0 Y1 j- N* o# u t
cyberpi.led.on(0, 0, 0)7 q, S# |6 L2 M4 }' x6 z1 r
cyberpi.set_recognition_url()
0 n4 S6 F1 J; I5 @3 tcyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得6 [) B+ _" \: H
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼")( K, {+ a$ X0 c; p& X* V! [$ w+ \
while not cyberpi.wifi.is_connect():( u3 \ D# @+ U% t
pass9 P; P" \' F" @+ [+ a! J' I. b
cyberpi.led.on(0,0,255) {+ b0 x; W: E; a* S! ?3 c/ i
cyberpi.console.println("WIFI已連接")! C& h% k" V, t l
cyberpi.console.println("--------------")
& p. W1 K$ U; X% E; D& C/ S7 `cyberpi.console.println("按下A鍵開始語音辨識")
8 a+ @1 O: b7 n. B; E+ q mwhile True:4 B L, z1 c/ r1 J2 `& L5 I
if cyberpi.controller.is_press('a'):
7 N3 W+ g' H* C) J keyboard.press(Key.space)
9 ~, {; s! X2 r7 y( F( e+ i cyberpi.console.clear()
# S( X* Y3 U' G I& M cyberpi.led.on(100, 0, 0)% j! K. ]: [9 M7 X5 L4 |
cyberpi.console.println("開始語音辨識")4 y6 _' ?4 l: o& u0 g6 h
cyberpi.audio.play("switch")) S/ D" ?: k6 n0 W/ y& N0 X" W
cyberpi.console.println("--------------")
$ F. I& O9 E5 L) L* D cyberpi.cloud.listen("english", 2)+ M* p5 { F% @# R& {& i
cyberpi.led.on(0, 0, 0)% \9 H+ J* @" b8 k& B
say = cyberpi.cloud.listen_result()
! t$ J& j6 O, ]& p cyberpi.console.println(say)4 W/ R1 i( _2 ]8 a
cyberpi.console.println("--------------")- j$ e3 Q$ f) f( M! n. b5 Q9 K
for i in say:& `& C: g' i% Z$ ?+ N3 y) f/ G
if i == '':* @* R6 a( x. K% L! o N
keyboard.press(' ')
$ N6 ?% l8 J& c* v, E' e4 z else:! m" k) m; P( B* M4 w
keyboard.press(str(i))
+ P$ S( Q5 |- S5 v2 m time.sleep(0.03)
& w e! v: e1 v! b0 Q: A
$ b' b) F6 u0 z ` Wmatplotlib音量柱狀圖 7 E% u' s1 N6 h% A
import cyberpi
- R6 l$ m. L6 Himport time
, D1 j- p& S, e# I! S6 s W L |9 Dfrom matplotlib import pyplot as plt1 b3 \: `/ k$ J6 o) `& M
; o8 m' n' K/ x
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']
! \* X, J$ G3 k+ O3 Wplt.ion()- U) ~: p& q- J! L# P4 n
3 y9 l% |; K C. @; X$ a1 P
while True:: V9 o* r2 s& T
loud = cyberpi.get_loudness()7 U) d, j2 x! ]1 G, \0 o( V6 ~% i: ?
plt.clf()$ j! M, V7 T) I8 ~
plt.xlabel("數據名稱")
$ v! L* N9 e. k$ M plt.ylabel("音量讀值")
2 x5 V) B, q$ R7 N$ d( B6 P! ~ y_locator = plt.MultipleLocator(5)
4 b9 ~" K; g( w, p" X# o ax=plt.gca()
: ?* h# v0 s3 m( c7 O6 q5 j ax.yaxis.set_major_locator(y_locator)+ R6 n/ c9 K9 V6 o; S& \3 F5 C2 Z
plt.ylim(0,100)( L5 s' k5 {3 Q6 k1 {. T ^5 h7 t2 b
plt.bar('音量', loud, align='center',label=f'溫度{loud}')) c; ], _9 n2 G& Y4 F
plt.title('童芯派聲音感測器讀值')
\# `- c _; C1 c: G) U: E7 C0 s plt.legend() n) ~1 ^7 G& ~" s
plt.show()' P- X; C: g4 {' w8 Q# g
plt.pause(0.01)* I: {( E: \5 i
8 A% b6 t+ K& G1 O
# v& g1 Q" [: S9 |+ Z2 V! `matplotlib 多圖表顯示1 _7 \8 C3 b2 A1 p% F
" O" v& B# i3 i9 s( {4 m v
from matplotlib import pyplot as plt( z2 N+ I3 H# R2 |
import time6 g4 Y/ |5 c+ r* s/ d; F: }) a- k
import cyberpi
$ ?$ q$ N! {( B, p u/ |- q
' ^" [ W) L3 H8 J4 S+ ~+ Z6 E! g! `loud_list = []
; D V8 H% n! e1 e5 J6 }: ebri_list = []
7 y5 o7 z, F0 e' w3 }0 K) @plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體
7 c% W9 d5 ]; J* i9 o& D; Bplt.ion()
`1 J, h2 `8 k. Y' o0 ~ D" ~plt.figure(figsize=(10,10))' X. g( d3 g6 Z2 s( |$ s$ C. J/ @7 M
plt.figure(1)$ k) Z. M/ p9 K* f# w5 M! R& x5 ]2 p
x_locator = plt.MultipleLocator(5)8 i8 f. f6 R5 o8 v
y_locator = plt.MultipleLocator(5)
# L: `! [- |2 wwhile True:
+ x8 ^- E( {' H8 N" }' C% i loud = cyberpi.get_loudness()
( X/ m0 Z0 W( p, G, b5 E+ V bri = cyberpi.get_bri()$ }1 E6 J$ o U7 A2 q9 y* z* A
loud_list.append(loud)
5 v2 Q3 `, U! G0 Z2 Y" T1 O bri_list.append(bri)
! F8 n3 j! N+ _2 ~' M" [ battery = cyberpi.get_battery()
4 f7 y: \. K6 e/ X3 Z$ | size = [battery, 100-battery]6 @" T; ]+ z' c% Z+ ]2 W
status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']
) b1 A3 @: A/ i2 O3 J2 @- \ ax1 = plt.subplot(221)
, R" ]' c. |* s$ Z* t3 U plt.title('光線折線圖')
6 A. a( b% [$ b$ v- j6 G" \8 X Z ax1.plot(bri_list)
" }5 E3 V/ V b4 a v5 r ax2 = plt.subplot(222)$ f4 V% c# D/ e8 V. _0 @! M
plt.title('聲音柱狀圖')
) C; ^4 J; j2 @2 |4 J: i ax2.xaxis.set_major_locator(x_locator)
( @! N, l- w8 B8 v! t) } ax2.yaxis.set_major_locator(y_locator)
( y: J w( f6 t# f; t/ f plt.ylim(0,100)
' x" d7 d6 }, N/ i: } a9 `" g# v4 U ax2.bar('sound', loud)
- { i7 N/ H8 M3 s/ t1 O* e ax3 = plt.subplot(223)
0 K8 n6 R) w) {- K- L0 G( m ax3.xaxis.set_major_locator(x_locator)
6 Z6 \9 o |6 q* d ax3.yaxis.set_major_locator(y_locator)! q9 m: E( k# B C5 T, n. c
plt.xlim(0,100)6 ^; j5 s) [. g% h
plt.ylim(0,100)
Q4 }: W6 y/ x1 e R plt.title('聲音、音量散點圖')
( R! ^4 p: `* Z# w4 f ax3.scatter(loud_list,bri_list)
/ e/ R7 ~0 z8 t) _% _. d: S& s! ^ ax4 = plt.subplot(224)
1 k' V, o7 q1 {) F; e ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})& z7 u% a/ s: U$ K3 z5 m0 ~; D
plt.title('童芯派電量')2 _0 A3 u# d2 n0 F; C+ m
plt.pause(0.2)6 ~3 _! v }2 l9 _# x
plt.clf()6 E: S: {5 Z% Z4 _
if cyberpi.controller.is_press('a'):
! v) Q9 N5 M% V. A$ L break5 G7 I- P/ G' C- M
if len(bri_list) > 500:/ |" m+ G& _' S; n6 A1 X) R* u
bri_list = []
; [; G: a( N0 t5 J. I loud_list = []) @6 \7 S! ]7 l8 }: y2 G- F
, k) M5 {' W3 j% ^' V |