本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi
) V( X' ]5 b! G7 F0 d+ |1 h1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
! c; {4 Z% U7 R9 V; G5 A4 g. P
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載 8 T' C) M7 K; O3 v. G, p' ~4 p5 P
- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
1 h' F( m* Q/ ]5 { h7 I$ _% h+ X 2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)- \9 [' l' Y: S
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
' R+ H( Q1 l6 J; W
/ s% P9 ]0 Q$ s+ ~" z A- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)1 h7 ~( }# a, P
' Y- u! @ U1 A2 z. m8 I: W( j- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。! B$ N u7 w9 j1 ^/ n4 l6 |; H
9 G4 _" ]) W, Y0 I4 h
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。
4 _$ r( U0 F* z/ q" g e6 _4 N0 | # n. G3 ^# C |, p# Q
3.童芯派第三方編輯器程式設計準備8 m+ a [( P9 h% T# l+ F8 A
- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。
; y) R9 M. s. D7 G# J3 Z
( u# Z# i: D5 u ^; G- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。" B } A( n+ ~6 C* _" X
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。 : O+ K( U# G& L
- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。
' U3 W; m- U- K, D7 p
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 ' J9 _+ Q# C! A+ Y$ \- O
# X; Y V* c8 j" ~7 R
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。( v" _) c7 h; F3 R
$ ~; H" B+ y1 {. ?; H4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 : b# K( k) e9 B- ~
5.一些程式設計案例
5 g* J# o0 x5 s& R童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput
) l- w% y$ N. D1 o8 V. o功能介紹:! d& M7 R4 y2 o2 X9 c) h) [
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。% e& k! F. l- [7 {0 q+ d7 X1 q; p% h
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。
7 g* K9 r* V2 g. j9 _/ v, c+ ~結合藍牙模組可以實現無線滑鼠的功能。& P- n" l0 u+ Y- h4 O
* j1 ^. w% ?. B2 K1 ]5 M" U- rfrom pynput.mouse import Button,Controller
$ R1 T4 D1 q8 Ximport cyberpi. s4 i3 r$ U( a' F0 C/ u! q
import time
* p9 R1 I+ ^8 e6 L; b5 \& ]1 W
9 W J# q1 i, {2 e, ^5 B6 A: rmouse = Controller()
5 t: N( P+ Y* m1 v1 i 6 |' B( @, ]/ T# Q; T7 P h% V
while True:2 |/ U* I2 r# {
if cyberpi.is_tiltback():0 w' u* I1 A! u, U/ Y$ _$ [/ s) d
mouse.move(-3, 0)/ r o) Y+ {; U( z1 \6 ^) R
print(mouse.position)
O1 g( o* D. K if cyberpi.is_tiltforward():
+ Q. ^( q4 u, Z# U' @9 e6 r mouse.move(3, 0)
# s% S, g, r0 n: i7 K8 n if cyberpi.is_tiltleft():
0 V' Q4 u* A0 B I mouse.move(0, -3)- @) w1 r1 T, D& O/ u+ q
if cyberpi.is_tiltright():
$ d7 @. V f. S& y' O1 ] mouse.move(0, 3)- Y% E K6 N1 V1 @# G/ |' I7 x+ C" M
if cyberpi.controller.is_press("b"):
9 ?4 N1 }* B! y4 G mouse.press(Button.left)
- X" p$ Q* f' ]# x6 w: l mouse.release(Button.left)
: Y. e6 i4 v# n A mouse.press(Button.left)
/ J0 l: `3 K0 J mouse.release(Button.left)
4 ^- f* E/ O# A, v if cyberpi.controller.is_press("a"):
& V+ U$ i9 u8 \ mouse.press(Button.right)$ G" ?$ e' T; e( U
mouse.release(Button.right)
& G" x9 h7 P" z' ^$ l time.sleep(0.01)
* K8 D! o ]' P
/ I7 T5 ]% z5 j* }0 [7 H* m3 y5 ]8 [& S
語音打字器
9 K. `' @) D3 Y功能介紹:
* C2 ~- L4 F: U2 A3 D2 v( A利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。9 V& y' R0 c4 {* Y& v ]
將語音辨識的結果通過pynput在文檔中打出來。0 B l& _; ~" m
該程式目前只能支援英文。
0 [9 P( z& G0 Y+ Z1 L" p$ A: v% _7 y/ \) \
import cyberpi
$ A9 C0 E& H4 o; H9 G9 _from pynput.keyboard import Key,Controller
4 ?& A, u. C. m% b3 Jimport time
+ F2 D3 s8 N7 S, f0 o 7 z' T5 @# ^. l: @2 Q
keyboard = Controller(). \3 B) \ v, e# \* b: G# O, s# U/ w6 q
cyberpi.console.clear()
: z3 { Q$ d! s6 A5 Ncyberpi.led.on(0, 0, 0)
! ~( Z! n }7 ^+ O6 V4 t* {: s8 Ucyberpi.set_recognition_url()' G) U: C/ M7 T9 H7 W
cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得5 v; q' t6 V* A3 p A P5 g
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼")
& h4 ~+ d1 `* ?2 u9 D5 [+ ^5 Owhile not cyberpi.wifi.is_connect():
: h) G4 }( ~8 g+ H3 }3 f9 U5 z pass* M( U- d! Q( Q( F% {9 @- i
cyberpi.led.on(0,0,255)
: d' D$ F1 k: ~& `( |" Y xcyberpi.console.println("WIFI已連接")
; B3 \5 b( Y/ Z8 a* n3 Lcyberpi.console.println("--------------")/ w( z; n: @2 P3 B3 w2 u8 J
cyberpi.console.println("按下A鍵開始語音辨識")1 K8 M( H }" {/ ^7 z" e- {
while True:
8 P7 a9 \, [0 B; b) [ if cyberpi.controller.is_press('a'):- Z+ O z, v+ ]! {0 I
keyboard.press(Key.space)7 h4 n7 T) t" J: w' d
cyberpi.console.clear()
2 y, Z* n; L$ Z( b. E cyberpi.led.on(100, 0, 0)* N' f) B+ P; ]. L9 q3 o" Q
cyberpi.console.println("開始語音辨識"): _1 A% ^) S3 ~
cyberpi.audio.play("switch")9 M: ^( u: M) B! J' G0 {$ X1 h
cyberpi.console.println("--------------")
/ p" o; L4 ~+ W9 Q- W cyberpi.cloud.listen("english", 2)
3 K2 d3 O: P7 a! l* e# ~6 @ cyberpi.led.on(0, 0, 0)
: N! A+ Z5 ?* X% R( n say = cyberpi.cloud.listen_result()2 k, E$ L+ Q& l
cyberpi.console.println(say)
; D3 S; d3 j3 C! P cyberpi.console.println("--------------")
) m' S% i& C$ R& v0 Y# l) Z for i in say:- i# m5 f4 L3 h* z, h {
if i == '':. ^7 q, y: Y! o
keyboard.press(' ')" W' @$ H( b( j( y) J
else:3 u) z& c. X, B# ^( T$ A
keyboard.press(str(i))
4 e2 r/ `3 q1 P+ A& A time.sleep(0.03)8 J9 S! q0 d Z; Z) O4 A6 U2 T; j- M
& y6 g/ n4 a* A8 M* x" i# G
matplotlib音量柱狀圖 $ j. \4 R$ `/ {9 A8 K E
import cyberpi- I9 f A/ H1 F9 i0 q' _. ]7 h
import time) s2 D p; \7 E# g% B2 m$ O6 m
from matplotlib import pyplot as plt
! U! B( {4 m" g0 D' b! D 7 U6 Q7 R9 f" x. I
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']' D. f3 u S, }' d, W5 Q3 E2 X$ ~
plt.ion()
5 S' b; s' S% A7 {8 I" T3 r
) Z7 x8 U/ ^" S+ rwhile True:
5 F6 Z9 V1 B4 } loud = cyberpi.get_loudness()# c: Q {2 s) I* o2 l- B8 Z5 T
plt.clf()& v: b3 S$ v, Q, d& ~' k3 _
plt.xlabel("數據名稱")/ f7 r i4 v& ^4 { h# M- [9 V8 {
plt.ylabel("音量讀值"); ]. N) i' O" G
y_locator = plt.MultipleLocator(5); l/ R! F# X) y6 c( S2 e
ax=plt.gca()! s& `5 O: m6 Y5 V* V5 A8 H9 d
ax.yaxis.set_major_locator(y_locator)+ N% Z% l7 g! _ F$ ?, }
plt.ylim(0,100)
9 Y* f* H3 ^0 M1 [5 B plt.bar('音量', loud, align='center',label=f'溫度{loud}')
: G) j, q% {$ L. ~1 q( p plt.title('童芯派聲音感測器讀值')# ^* J3 P4 o- N; R; l& k; Z5 B
plt.legend()
, k- {5 H7 E. H# o6 B/ A plt.show()4 r4 c! D5 A$ j
plt.pause(0.01)
! o* U- C+ F1 L; z& ^! x+ W( R0 z! u
( ?5 l' A) l9 i- D; T$ Gmatplotlib 多圖表顯示
* ^" |) T! @1 D3 @. e J, `) b1 ]
from matplotlib import pyplot as plt+ n, K2 j- [( @0 M
import time
- ?; P0 ]0 @4 j% p0 x( a) k) Fimport cyberpi
: v$ T! D( y( X1 U! k- a 1 {$ M( Q! C5 n$ O. E: ~9 A+ p
loud_list = []
( v6 E, x; n# Y" R7 N7 ]1 }bri_list = []1 z3 T7 s: V! ^8 `/ x B+ b# S
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體5 D" s0 E R3 Y' H3 c& ~5 P$ G6 Y
plt.ion()
2 Y( H* K9 i2 f$ Iplt.figure(figsize=(10,10)); _9 s4 h: c; ?( G( I6 C/ B/ o2 _
plt.figure(1)1 o+ n! T/ F7 k6 ?2 G
x_locator = plt.MultipleLocator(5)5 R2 l& ~, F2 Z9 S$ G
y_locator = plt.MultipleLocator(5)
9 O3 [) X# m& o S% y' wwhile True:! s- a# R# `/ K- b: A, S
loud = cyberpi.get_loudness()
4 ~# b+ N) {/ g0 U L9 L* {; C bri = cyberpi.get_bri()
+ O5 l0 o8 ~# V7 ~4 R loud_list.append(loud)2 O0 m' n3 c0 k G4 V! f6 ^; d0 }+ U
bri_list.append(bri) Y- t7 ^6 Q# Z
battery = cyberpi.get_battery()6 l& ~ ~# x0 p2 o
size = [battery, 100-battery]7 V! u. x X- t$ d7 Q- O
status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']0 A/ ]! S$ D6 G( |4 m( l
ax1 = plt.subplot(221)
( h! u4 V* F1 A2 b plt.title('光線折線圖'): {% o6 [1 d D5 H2 _
ax1.plot(bri_list)
/ y% |: b Q1 |% n ax2 = plt.subplot(222)
4 r" N* z3 u; ^' W2 c plt.title('聲音柱狀圖')
7 Z+ t/ d6 U& h" q' O: t0 C ax2.xaxis.set_major_locator(x_locator)
. m, X) k8 t9 ~1 |3 m0 t+ h ax2.yaxis.set_major_locator(y_locator)
0 O; i4 ]4 j8 @! n& }* m1 V& g plt.ylim(0,100)
& t+ I. K/ n- s- @ ax2.bar('sound', loud)
& K5 n7 H5 B3 T0 Q" R ax3 = plt.subplot(223)1 r; q3 f! Q* l4 H9 s. [
ax3.xaxis.set_major_locator(x_locator)- P1 M8 i+ {7 r) ]( F ~
ax3.yaxis.set_major_locator(y_locator)
1 c% w- {* l2 }4 T) F- v# m plt.xlim(0,100)) L# M, P a% v) J% Z
plt.ylim(0,100)
8 b2 a% }; N6 o. i plt.title('聲音、音量散點圖'), Q" h2 H+ i# g1 U) O
ax3.scatter(loud_list,bri_list)$ d5 g& O0 [, I
ax4 = plt.subplot(224)" N7 e) U$ O0 C" H) }
ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})8 k0 p6 J5 A, A% R
plt.title('童芯派電量') w4 D2 O% _* v: Q x
plt.pause(0.2)
7 ^% W7 A8 O# z+ P$ ?! P" \$ n1 g plt.clf()
/ ]7 p. z$ u* F6 e if cyberpi.controller.is_press('a'):! N# [4 b: r) F$ q$ C: |
break
: ~! h' T+ f+ Z, N5 } o+ u if len(bri_list) > 500:
3 T, v0 k" q0 r- o# x7 ^ bri_list = []
0 v( L6 k" Y, {: `' O# j1 t( R loud_list = []) x1 M2 I+ w& m0 `; j4 x
7 T/ P6 S9 S7 K; ~4 ?5 p |