本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi ' I8 T% N& T* ~( M
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。% F5 y5 u+ c7 p; ~7 K" a' C
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載
/ m @6 I; {% E- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。5 Z! X: w" @6 P5 l
2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
6 m2 j5 g; K: ~. t" K
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。$ {/ j2 R! V/ c1 r7 @; J8 [
E4 @1 R7 ^1 H& X- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
8 E* y; S6 H" F% ?) |
, `) X2 }0 i* ~* F& i- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。$ P4 {5 f. s% S* J" z# W/ M
9 \# C. _1 R# F, @# k% |& N0 a# ]- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。
+ y6 X9 Z9 i# s0 \+ | 4 b- N6 y" m. h. Z. Y
3.童芯派第三方編輯器程式設計準備
/ j1 h0 j2 r$ E4 v- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。
" Q2 f6 L8 J: U# \0 }8 y 4 W# T0 \1 `- F7 a9 o3 q: ^
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。
* ]9 L$ l K0 Q
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
$ d" \2 ?+ q0 O# Q) }9 U- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。
5 L6 u! b/ J2 M3 u2 D" b
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 ) ^/ n- h1 N% g
$ v* }* n5 R% g/ [5 k
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。
, e: ]: o; K) E3 D' @, V% M
; n' Y. ^0 O7 g0 C8 b2 Z: ~6 w4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。
* H, T& k2 A8 B- }! t5.一些程式設計案例5 A4 V6 V: I3 z/ m5 a; @
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput 1 B* _8 \0 Z2 M7 i$ ]
功能介紹:. n( \9 [) B2 Q, G
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。
1 F5 M* ~, ~% g8 ~# t$ N0 X8 X通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。
0 F. c9 n/ S. `2 u3 w9 d結合藍牙模組可以實現無線滑鼠的功能。- D" R$ O2 P5 N' |+ l% x9 Q
* m+ i9 ^4 G6 H) l; Y' \2 |from pynput.mouse import Button,Controller9 g8 v$ N. z) @- U
import cyberpi% v! x8 L( [$ v5 I8 M
import time
8 S3 @! ]# O4 n, |$ N' h0 K, g& b
9 O# E1 r0 T" w8 x0 imouse = Controller()
4 {/ T6 h; ?" E 1 w% s( T; J/ ~; O+ H% z
while True:$ Y \% J2 S! S; T* m+ q" T& c
if cyberpi.is_tiltback():
; A @2 \! l6 |4 |0 h, ` mouse.move(-3, 0)& s \* ^) q+ {% E
print(mouse.position)
7 ?- p! f5 \: q6 ]& J C if cyberpi.is_tiltforward():
( W6 F5 p* d: x mouse.move(3, 0)7 d* m. ]) u }8 n8 o
if cyberpi.is_tiltleft():9 ^( Z3 P, J; x2 X7 t
mouse.move(0, -3)
6 D0 }: t/ X7 G5 u' p5 W if cyberpi.is_tiltright():; x0 C( S! M( K7 \- @* v; o4 f* r$ V
mouse.move(0, 3)
$ v. F0 {, C9 w if cyberpi.controller.is_press("b"):8 B3 _# O( S8 d: a9 b7 D9 |, ^
mouse.press(Button.left)
( @- f. g9 S$ s4 q" L0 Y0 M6 O mouse.release(Button.left)
( ?) q( C/ ^! g+ g$ f mouse.press(Button.left)
9 Q0 h; k& S- O mouse.release(Button.left)
/ R5 x" m' X1 Z9 r+ V if cyberpi.controller.is_press("a"):4 r) q: F, i! z1 A2 w
mouse.press(Button.right): P; ?. a+ c4 [3 M
mouse.release(Button.right)
# e: A. C7 D4 C) L' O& e" k time.sleep(0.01) G% y `5 Z2 @" o; }8 H! \$ l4 {1 @+ V
/ _" {" e2 G2 P3 y4 u% `. H5 y
. x. C4 O) T" ]8 `語音打字器
# V3 M( S8 ?; R5 g; J功能介紹:
9 }% ^/ B. l: p6 Y0 |' j+ K利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。0 w6 ?) m$ r$ R' m3 J! L. I- O
將語音辨識的結果通過pynput在文檔中打出來。
3 O5 o+ ~" P! y( V: }" j( e2 S) s該程式目前只能支援英文。, n1 {' C, G' o* m
# L$ K- L) u7 y2 G8 A Z3 U1 d a
import cyberpi" T$ }5 O8 }! Z# M! }
from pynput.keyboard import Key,Controller
' A* k2 d( y9 eimport time
0 u0 x, N# I! D8 i : O' Y4 K( [0 F% X+ o
keyboard = Controller()
* \$ d9 D% H8 g% P% }) wcyberpi.console.clear()
b* N! u% b7 s$ hcyberpi.led.on(0, 0, 0)" H+ @0 B/ K7 f# c* d: t
cyberpi.set_recognition_url()
1 I' \; g* o9 j( c1 Lcyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得
9 X/ v; T; k' T" Zcyberpi.wifi.connect("WIFI名稱", "WIFI密碼")
( C7 k' z: U8 [" `! ~8 B2 Q1 {while not cyberpi.wifi.is_connect():
1 o/ u/ G# r r; o6 f0 q' G# w7 [ pass
" ]* I7 [, N5 A; K$ Ecyberpi.led.on(0,0,255)6 g. t, u$ o0 z3 f* h9 c
cyberpi.console.println("WIFI已連接")( d |( U8 @) u6 x
cyberpi.console.println("--------------")# [+ D4 n! a+ E9 F, ]; g
cyberpi.console.println("按下A鍵開始語音辨識")
- D8 A) j9 ^* d; m# A1 Cwhile True:, K/ l; r9 J4 H% @- a) @
if cyberpi.controller.is_press('a'):4 N; ~0 I$ V; Y/ S0 ^) L
keyboard.press(Key.space)
9 d4 l8 M1 c, G cyberpi.console.clear()
0 V) p! y' G" y' l7 V' { cyberpi.led.on(100, 0, 0)
: e2 [ D/ i# ]9 ~) u4 O cyberpi.console.println("開始語音辨識")
& t; ~" W! q8 b1 x% d3 S) R$ u cyberpi.audio.play("switch"), C, o: W& @: d1 y. |. ?) f, }9 W
cyberpi.console.println("--------------")
2 k* b1 J4 ^+ C: {, p9 C cyberpi.cloud.listen("english", 2): E4 B8 o. ]6 |
cyberpi.led.on(0, 0, 0)
O0 \* l; k; X1 F6 `" z; H9 Q say = cyberpi.cloud.listen_result()
2 S1 A; D6 ]' c+ h2 U4 i cyberpi.console.println(say)
3 Z/ F. [3 s6 \; s! M cyberpi.console.println("--------------")
# s; ~0 a4 Z i3 m% D6 z0 |: S8 { for i in say:* i+ I- f u8 b' B0 t, d# }$ [
if i == '':. [; o# J8 [! ]
keyboard.press(' ')" O5 k* _7 l: ^ [5 J3 N* r% ^
else:
* q' \) M; C6 t; L% `# D% H keyboard.press(str(i))
; ^8 w x0 S/ v time.sleep(0.03)
4 A& V R& {" X5 d( p1 j5 h2 X! r* `3 l2 \
matplotlib音量柱狀圖 ) u I) q- P' ?9 q. P
import cyberpi
1 A2 a4 k' G$ P& nimport time
% U+ R* ]3 e0 G4 G! B5 Ufrom matplotlib import pyplot as plt
2 U$ A5 H; p3 o6 M+ \
" J; }9 n( J, ~ s& {plt.rcParams['font.sans-serif'] =['Microsoft YaHei']8 M7 j' B; c9 W' Q
plt.ion()
5 b' f4 s( {3 F8 Z( u
7 a2 \: A7 v. a4 ~; p1 o m# R7 S& }while True:0 k! m9 r0 U( a3 y' S4 l7 D
loud = cyberpi.get_loudness()
: L* F" D# e' t plt.clf()
3 j& W$ j- p- @0 O0 J, k plt.xlabel("數據名稱")
* l% c& y: `* ~# K/ m9 T; X plt.ylabel("音量讀值")
, j6 [+ a" ^" b# ] y_locator = plt.MultipleLocator(5)$ [% ^$ K& D' T( M& _( |
ax=plt.gca()
6 F! |( O6 ?8 m' g ax.yaxis.set_major_locator(y_locator)
; Z& G; H: B$ N1 M% q% X0 E plt.ylim(0,100)* ?6 v. p5 U. q3 f
plt.bar('音量', loud, align='center',label=f'溫度{loud}')
" c( t+ v- f3 n- X! ~* F" U- r plt.title('童芯派聲音感測器讀值')* j" L$ d- e4 @5 m1 H
plt.legend()9 }6 t2 S/ f) {
plt.show()
( }2 E2 c) b) q, E- f. Q8 Q3 d! R plt.pause(0.01)8 b( ~! ~& [5 ]1 O" q0 ~* |# E. C
* o) v9 D' s1 U; R
0 I% f( E/ @) x6 @
matplotlib 多圖表顯示
6 p# O2 W6 c" J, w4 U* n0 H
0 k/ }% a% o8 l4 Cfrom matplotlib import pyplot as plt+ b2 V" o5 r) u9 j
import time
) ~$ _. c2 v: R3 H& k. h! jimport cyberpi
+ C1 l+ U8 J0 i; ~0 i/ j 6 c2 s7 \4 q! v. X
loud_list = []" |$ t1 ]2 Y3 a6 P; C
bri_list = []/ H4 c2 N1 e5 a! q4 |4 a
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體" `9 b% p& L" z( t A3 @
plt.ion()
* J2 a/ @" H! e7 xplt.figure(figsize=(10,10))
' S; a5 j$ i9 j/ cplt.figure(1): u" O! x) x6 R# p# v( S
x_locator = plt.MultipleLocator(5)8 H$ i* m @: P9 z1 H% T
y_locator = plt.MultipleLocator(5)
$ p8 E3 M; _0 X" K* Cwhile True:
4 L! ], s. e c4 S' [) Z. ? loud = cyberpi.get_loudness()
( D4 Q$ v; ?1 t5 H7 J2 P; m bri = cyberpi.get_bri()
6 ~% } F, o( M2 J; H: ^ loud_list.append(loud)$ [& b( `6 A* i+ R5 c b
bri_list.append(bri)
! ~+ O* {. m! ?% x1 N; n) g battery = cyberpi.get_battery(), _* L7 V' B2 O
size = [battery, 100-battery]. @: U4 c6 w( S+ E# f* P
status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']% Z4 e4 C4 G0 W8 u/ A7 c6 ~6 a
ax1 = plt.subplot(221)' S. s; ~* g9 N2 n1 {3 B$ x
plt.title('光線折線圖')
, N4 k) q& R$ F7 o1 ?) ] ax1.plot(bri_list)
$ b" W# L8 [+ z+ d ax2 = plt.subplot(222)
+ t/ S1 f& b3 _1 U( k plt.title('聲音柱狀圖')0 y6 D8 q& O+ R! ?
ax2.xaxis.set_major_locator(x_locator)# N4 }( Y( ^& i& [
ax2.yaxis.set_major_locator(y_locator)
/ P: {2 |) m) t) B6 t plt.ylim(0,100)
" Q8 @& }, Q. d6 d ax2.bar('sound', loud)
* [2 }: j2 l& V: t9 b0 w7 s ax3 = plt.subplot(223)
* U* k# ~% \( v1 j' j3 m ax3.xaxis.set_major_locator(x_locator)
% d8 R& P6 z) f! o ax3.yaxis.set_major_locator(y_locator)$ w% |# e ]6 j9 @5 D: l
plt.xlim(0,100)
* u6 j$ x- S, J* o. ?2 S- ? plt.ylim(0,100)% b6 K. J9 M' C2 k) [. g8 W4 u' q
plt.title('聲音、音量散點圖'). N' Q, M5 v6 U
ax3.scatter(loud_list,bri_list)
' c) J/ ^. p- k o8 F) S ax4 = plt.subplot(224)
7 [& X# O7 [1 k$ n. q- \ ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
. L* i+ k6 ~9 r% {: A plt.title('童芯派電量')2 |8 d, t2 b S; B1 S2 A9 y8 E6 w
plt.pause(0.2)
4 |& l+ c8 m$ A. w! I plt.clf()
( x; k5 R& i" y5 ^# | if cyberpi.controller.is_press('a'):1 z2 G" I: G) p4 E$ g0 ~1 p3 m
break/ v: ]7 y7 B9 g! R& |% w
if len(bri_list) > 500:
4 t3 y0 y0 {2 _7 Y% y bri_list = []
2 w/ G6 f# A# I" _ loud_list = [], K5 t4 ~- J7 q" Q4 E. A
0 p( h1 X2 \+ R8 U# l |