本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi
% _% m6 |$ h$ t% N8 d( h1 S1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。; t1 H9 Z% M4 c# b, s
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載
" e H" {2 K! B6 w9 a: J- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
$ { C! |! A, A 2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
4 f0 {5 J2 A3 S) C9 q4 g8 }* o/ E
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。, z! W% K& i, ^3 B
1 H5 F) {; z7 u* [$ W8 s1 X, R
- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)& H6 l$ L a# |: @
* O8 H9 e8 s1 d0 B* W3 G a3 h- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
/ Q/ p, \" F/ M
p, u* o9 h; J. y- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。* s A5 f8 t. K1 y; a4 `
" e$ E$ m. p( z7 y6 }: q9 u" V. i. y3.童芯派第三方編輯器程式設計準備6 ^' a$ r, F) P: H7 m
- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。
/ V2 s, |& v+ k; z8 { N
3 k m) P& d9 J- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。7 h6 N. H" E, _- I' b: U5 u
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
" x4 O8 P& i8 K4 b! V. \- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。
- I! \9 {( o W$ m
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。
3 G5 u& M! ]' Z; `- q; K3 w Z1 @
; ?9 i( _$ k$ A- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。: K7 r% Y6 {& S3 W* H
) s7 T7 B+ c! c0 `4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 3 y z( ?8 j0 x( z6 m
5.一些程式設計案例+ F, V3 E! i1 w% d# a
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput
4 p# t* e! H' R7 e8 m; u1 ]功能介紹:$ [! O3 ]- I8 r; Q0 O
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。/ Z. I- F" M, s8 Y
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。' c1 e* W8 o( @. `7 ?. {" O) e
結合藍牙模組可以實現無線滑鼠的功能。# f8 Y7 v J" X: g1 G9 \, ?$ ^
+ g! [4 l. \# \1 P6 d+ d2 ]8 G- r
from pynput.mouse import Button,Controller$ b* g7 o( ^5 ~" r, b0 ]/ o2 \1 i
import cyberpi2 C: o+ X, H, L
import time
! l# S& ?1 q/ X$ M$ B! M5 a
, i% S _$ d0 S& U9 Qmouse = Controller()' j' d9 z5 y9 X+ O, d
7 B" R* [8 A$ F" X4 t, Y8 Vwhile True:9 n6 \* |* t- M, W
if cyberpi.is_tiltback():. W! _; o& L! G+ V# W, t
mouse.move(-3, 0)
# c6 @" s5 v3 m print(mouse.position)4 a6 m0 N0 E0 b* n
if cyberpi.is_tiltforward():7 v7 Q) L0 r/ C3 k! t
mouse.move(3, 0)
7 u- x9 w$ Z" K" }8 b8 } if cyberpi.is_tiltleft():
( } N7 i6 H3 t3 ?3 }: Y mouse.move(0, -3)2 }) ?7 D& k. M: N
if cyberpi.is_tiltright():
8 u1 t1 H- S2 I& T8 S9 W mouse.move(0, 3)
) o3 M# f& D, S$ O P- M) h l if cyberpi.controller.is_press("b"):1 \. C0 C. t9 V+ ?
mouse.press(Button.left)8 e9 j+ @2 q1 h/ I% O/ ]* D; u6 S
mouse.release(Button.left)( y6 M+ U/ v5 m9 e
mouse.press(Button.left)
3 }0 P, w$ H/ k mouse.release(Button.left)9 ?2 u8 t8 r- j( P5 q
if cyberpi.controller.is_press("a"):/ e8 h* ]7 o+ B6 I0 c
mouse.press(Button.right) b+ ^ W% c3 J% U6 W
mouse.release(Button.right)
* ^5 d S7 K m+ |9 r, Z time.sleep(0.01): ?: O1 K& V) s+ v! D1 l
1 `" [5 A( T' K* ?& ^ {7 A- r% u/ S `5 d4 \6 {
語音打字器 : d1 k9 y! u8 F
功能介紹:
& M: J1 f, c' H6 C0 m! Y利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。' e4 W% J1 l# ]7 O) M9 {
將語音辨識的結果通過pynput在文檔中打出來。) b4 Y9 G' z2 g, d
該程式目前只能支援英文。; \5 W. X, S3 Z$ {" B
* W. O1 H' h N# a7 eimport cyberpi
3 p: A, y6 \% G- G% ffrom pynput.keyboard import Key,Controller) j5 h0 Q9 G3 F) i) e$ v. p
import time/ O3 T- f4 e* c! C% O( ~
; p' f+ |& g" a7 _& ^* i) \keyboard = Controller()) u) x- ~7 U- h2 H) c
cyberpi.console.clear()4 K: ^' M& Q& S) k) l- G1 d
cyberpi.led.on(0, 0, 0)% e j* O4 W" j6 W, Q
cyberpi.set_recognition_url()2 k; j" i1 z$ v* |( \" z
cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得7 ~8 B8 z9 N, ^' T
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼")
5 V8 T+ A# i0 swhile not cyberpi.wifi.is_connect():
0 T4 M4 R% s, G; `! ]" t/ d8 y pass
; i1 s+ k% z( \- j; x% Pcyberpi.led.on(0,0,255)
! b/ p! T: U, G9 ~) N& ]. Acyberpi.console.println("WIFI已連接")
& w' m) q X# C! L5 J3 Bcyberpi.console.println("--------------"); `* \( o. D+ E% n+ F" S
cyberpi.console.println("按下A鍵開始語音辨識")1 k" Y, H, c4 }( [0 W- a# Y k
while True:* R3 ]8 z* N+ J5 p- ^ K5 ^& F
if cyberpi.controller.is_press('a'):$ Q, w+ }4 E% ~
keyboard.press(Key.space)
& B% q4 E* o0 ?. f8 _ cyberpi.console.clear()
( {, R7 a" i& l r/ H; L cyberpi.led.on(100, 0, 0)
1 C! p2 f1 l. N0 T8 O3 p cyberpi.console.println("開始語音辨識")
: _; ?" T. s4 Z- J$ \ cyberpi.audio.play("switch"). n/ i4 { U( d; d8 n$ c. x
cyberpi.console.println("--------------") Y: g( c' \, Z ~
cyberpi.cloud.listen("english", 2) F- G* `% s" D3 t$ T# Y) k% U
cyberpi.led.on(0, 0, 0)( H' f' ~, l5 R8 u4 v
say = cyberpi.cloud.listen_result()
( g5 P+ Q, Z1 h9 {0 }) }! T) V: C cyberpi.console.println(say)
+ k. J& O+ A8 y1 @2 @ cyberpi.console.println("--------------")
( C% d' i8 @8 B" |/ e for i in say:
+ m0 `! Z1 Y( ]. j' c if i == '':
, _! ?& D2 ] i" Y) i keyboard.press(' ')
& i& S3 B7 o' g1 U) g else:4 ~: f+ j6 H+ i) s! t
keyboard.press(str(i))
1 f9 _& ~5 U$ i L ~$ ` k Z' z time.sleep(0.03)8 h3 _ R9 |0 ?6 p$ }/ S
0 F8 L) Y: k. M, Mmatplotlib音量柱狀圖 4 ~# y4 e8 l% J* T% N# e
import cyberpi% r5 z1 e( F0 R' ?: U( d- d/ I! Z
import time8 y! T K* {, J$ W8 _( g
from matplotlib import pyplot as plt5 N7 Q* b3 y7 H/ \% Q" G. `- g4 V, B% n
3 j& S$ b) N: g0 S$ F
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']8 T$ H# z3 a, N* e+ t; P0 Z
plt.ion()
, b3 s: X3 `+ @! d/ R+ A& P1 ~ 8 a3 l: n$ i% v) m1 Y( T
while True:
; \2 | R; O( p* D+ B loud = cyberpi.get_loudness()
7 R: N* k* K9 B! M plt.clf()1 }) z5 q, ~, k( p. n
plt.xlabel("數據名稱")
/ _6 ]6 b3 d8 [7 Z0 e, I plt.ylabel("音量讀值")$ o: ? V A. F2 H5 v! J1 Q9 ^
y_locator = plt.MultipleLocator(5)* ~/ Y% C& V; a% U1 O2 ]3 R* b/ t
ax=plt.gca()
/ b+ ]) q! l U. u: t5 H) m& K ax.yaxis.set_major_locator(y_locator)9 \. O7 [& H2 T2 w# X& _
plt.ylim(0,100)
- V# @0 c+ X1 S* w5 v: D plt.bar('音量', loud, align='center',label=f'溫度{loud}')
) A6 ^5 `6 \, R( ^+ s plt.title('童芯派聲音感測器讀值'). X2 c/ _+ U8 I8 m
plt.legend()
( f& V& }- L1 K; M, P) m plt.show(), g8 G( k x2 f+ t' H
plt.pause(0.01). j0 B; |2 T) B K6 S
' U: H& p: G/ Y4 k) c' k7 U: F
' Y$ Z; d9 r- J6 h1 @matplotlib 多圖表顯示- P) P, I4 z& a0 j. u
, X8 k2 V; _2 } c" d
from matplotlib import pyplot as plt
: ?; p* J1 d8 Iimport time
4 {4 M1 M* f; s) Qimport cyberpi: D8 x0 M2 c$ v- K) c
6 Y# [' v$ T& N+ S5 lloud_list = []1 i E9 q' _$ A' \
bri_list = []
! _" M6 e% S% ?5 r! P- @) Cplt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體
9 b. U1 |- j2 m4 L# Iplt.ion()9 F2 z6 ^, k2 {& ^# [3 U
plt.figure(figsize=(10,10))1 W9 Q" o l. x+ {8 P
plt.figure(1): A }7 [7 ]. g; U+ p3 T
x_locator = plt.MultipleLocator(5)2 h' q: T" M, V: ]% d4 X- R8 ]% r
y_locator = plt.MultipleLocator(5)( K/ `' P' g" O8 X
while True:
5 S3 d' f# E) G( m3 E/ u loud = cyberpi.get_loudness()
) y( u! o) S' N- e5 P$ y9 W% U bri = cyberpi.get_bri()1 l0 l6 ~( Z3 u( `* k0 s4 F7 M
loud_list.append(loud)* K! ]; t, k$ L* D
bri_list.append(bri)& D8 R: n, h- j r0 ^
battery = cyberpi.get_battery()
) @/ K$ t- O0 v( | size = [battery, 100-battery]
. D2 P( M( R) F6 R8 V! @' H2 h status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']% }. [1 h0 O1 J( P* }
ax1 = plt.subplot(221)0 F* A0 d7 i, j9 g
plt.title('光線折線圖')( M- U4 U) @5 W0 j, M
ax1.plot(bri_list)2 N9 o# t; O2 b
ax2 = plt.subplot(222)" K7 ~. F0 j: M$ x8 R/ F; b9 E9 O6 R
plt.title('聲音柱狀圖')
! E; \0 b7 d; l! F; ~3 \- X ax2.xaxis.set_major_locator(x_locator)# {, X8 {# ^/ M
ax2.yaxis.set_major_locator(y_locator)
" m, d* k& r# q( |$ o plt.ylim(0,100)
9 o, @& Y$ s: ^$ z# o5 e8 A4 e ax2.bar('sound', loud)
" ]8 G) X: h3 r ax3 = plt.subplot(223)
7 `& g% z# a. }4 F3 F ax3.xaxis.set_major_locator(x_locator)
- y: f: ~* ~ Y/ `, a ax3.yaxis.set_major_locator(y_locator)
, u2 Y( {) s- C plt.xlim(0,100); T: A4 y, l! u5 Q' ~( Y
plt.ylim(0,100)
% G6 V# V' \% o! k plt.title('聲音、音量散點圖')
1 V; Q! I z; M4 g1 V ax3.scatter(loud_list,bri_list)
! q3 q4 _$ b% l( y# R! |+ U8 n ax4 = plt.subplot(224)
1 {! Y. n$ ]7 M! V2 p% F ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
& C- i. c: l7 ?$ s3 }1 h* z, g plt.title('童芯派電量')
1 A# E, |! Z$ \; w plt.pause(0.2)* N0 x. s F$ h
plt.clf()7 |7 N2 q# h+ r! I* B# C9 o
if cyberpi.controller.is_press('a'):: S% c+ ~ l1 ~
break
, Z5 p0 E. N% i; f! l if len(bri_list) > 500:
4 l, |2 D/ P1 g bri_list = []
1 t0 n, `% z: W% a. G! |; \# V% J; h loud_list = []8 T8 z) a: u" ~( j; L
1 U! B7 X8 A0 L; ?5 ]% f |