本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi 9 V" S; W; w# n; }: B
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
5 _7 W8 H" k/ |: g5 j
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載 ; Y* W+ R, v9 t- i
- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。3 h! ?# y1 F2 h% Y" r8 J
2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)1 {) B, h6 n+ z; ~% I
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。( X3 \+ H* t+ Y/ T
5 X* E' m& x" ^+ M5 y% f) Z1 o2 C- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
9 [6 @& d. T0 `$ a/ P' M# K ( g: f4 Z8 n p1 ^* v
- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。6 J# @$ A4 X4 D/ w
' R$ @& e0 F; [( {) ~/ {9 _
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。
6 s0 j: L; w' L+ `. K2 y : M A2 N g; d3 V# j2 ~
3.童芯派第三方編輯器程式設計準備" X N0 [ ?2 `/ R' e# y7 x! ]
- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。
; }# y! [9 E5 q7 I( R5 h7 d ! Z' Z: g( t$ O& G. s. I9 } }3 c
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。
, t& _/ o) D$ ]9 E( E2 K; n5 V* I
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
( ~- ^/ n+ E+ u `0 L$ k/ S1 }- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。
. o: c3 x$ w, P. K) t
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 0 @- o. j. n( x6 {
0 A8 C9 t4 u( g: [2 M6 W4 W7 u7 A4 ~- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。0 C# m. ^2 x# O( L7 t9 j
* I: N' V1 @$ k
4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 4 C" @ ]/ i, A7 n* z
5.一些程式設計案例/ I' c6 T+ i" H# B1 r: I: J8 Y
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput ! }* |; F& N4 G3 a: _7 s3 S9 ~
功能介紹:
% ?% a* u* _ G1 N( l0 b利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。
% k0 c$ h, m. b通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。/ s% k1 [! Q# x; A- M; r" B
結合藍牙模組可以實現無線滑鼠的功能。
# f% h4 c3 B# C: s* `* M) A- A: }& L! ?; [
from pynput.mouse import Button,Controller$ v" `4 j2 Z4 {# O/ I
import cyberpi1 ~/ y( P/ j7 d2 X
import time
1 q8 R* l) v9 h. M# L3 d+ l 4 R [9 O' c% j/ `' c5 e
mouse = Controller()
( {, A& l4 W6 a, P . p0 k7 @$ T2 V" U B0 ]
while True:
& M$ K" n2 v1 \" e if cyberpi.is_tiltback():: @3 B3 V" x% J
mouse.move(-3, 0)% ^- D$ k0 q! e7 h$ f4 w
print(mouse.position)) Q) V; b4 C V' D
if cyberpi.is_tiltforward():( E3 q4 G/ @! c1 K: E6 |
mouse.move(3, 0)
6 Q- m) _* I8 c) I4 @2 A' E1 A if cyberpi.is_tiltleft():
" i) |3 W0 m! h, } R5 Q mouse.move(0, -3)$ y" i; r! f% t& k7 {
if cyberpi.is_tiltright():
' I- K% {: X; @# S/ G+ M( ]+ v mouse.move(0, 3)9 [( k! F2 P/ o& k* T- h9 L* ^
if cyberpi.controller.is_press("b"):
9 [, R: T! s5 ~# t mouse.press(Button.left)" S" h- s1 Q4 [4 @% O
mouse.release(Button.left)
|$ d+ a: M k9 A( o& O$ D3 w4 e9 J mouse.press(Button.left)
" V: P- Q0 [+ Q; }8 G% q mouse.release(Button.left)
+ F. G1 S7 b( e0 x if cyberpi.controller.is_press("a"):
) Y/ v4 Z- n: p: L mouse.press(Button.right)7 o7 F. C# a3 n) H1 E
mouse.release(Button.right)$ J2 w" `" g- n; y, `8 }
time.sleep(0.01)
; W0 [- y7 \( u; n+ i
4 I/ I6 L5 c* G* N" I
* D0 I+ n, I+ |% C語音打字器 8 F9 J# c- _1 |. S; ]1 S' U
功能介紹:
8 W# G: M! |7 t U8 t! H( \利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
# M7 L# ~6 y/ {# u8 s將語音辨識的結果通過pynput在文檔中打出來。& D+ p* D: Q; N. i, V* V
該程式目前只能支援英文。& L$ f; V; ?0 r8 H
/ R) T9 X. M% c \$ B+ R- |import cyberpi
; J9 R$ L) T ?# C% m! s$ S! N0 o5 wfrom pynput.keyboard import Key,Controller
9 \5 x* T6 O5 i" uimport time9 d) c/ m7 R" h- j5 b4 ]9 |3 k
7 r4 @& s3 H; S/ O
keyboard = Controller()
% {& Q( c1 O" ncyberpi.console.clear()4 N/ B/ y# t# Y4 ]) r
cyberpi.led.on(0, 0, 0)
& z+ M( _& s7 A: wcyberpi.set_recognition_url()
x# M+ u+ S* I' w7 O- Gcyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得
j7 S3 k- I" r3 X! T# Mcyberpi.wifi.connect("WIFI名稱", "WIFI密碼")3 y+ p1 H; g- g2 [( {
while not cyberpi.wifi.is_connect():/ Y0 }0 r& Z: ^# `7 F+ x
pass9 m. y+ }% c& w) i/ l# p* ~
cyberpi.led.on(0,0,255)
# y x# b4 V {cyberpi.console.println("WIFI已連接")- f# |9 ~- h* t$ Q
cyberpi.console.println("--------------")+ `8 Y8 e g7 h' Z; w1 l
cyberpi.console.println("按下A鍵開始語音辨識")* }/ `' I' \' Y9 W- L# m
while True:
6 |; a T+ |# Z9 E* H8 {3 E0 i if cyberpi.controller.is_press('a'):4 ^: A1 V. X% J5 _; _$ g
keyboard.press(Key.space); t3 k1 a) m/ E& \, j1 |
cyberpi.console.clear()
9 [* d3 f, {% q# a cyberpi.led.on(100, 0, 0)* {& r% D% M0 J$ E ^
cyberpi.console.println("開始語音辨識")
2 V' D' {4 a/ V7 b0 w9 f! N cyberpi.audio.play("switch")
, i8 U8 k& J* q# _ cyberpi.console.println("--------------")2 Y- f- ^! [* {
cyberpi.cloud.listen("english", 2)
* Q2 x1 p- @! W( O/ ^) P cyberpi.led.on(0, 0, 0)- }) ` G4 G, \. u/ p" @$ t, f m
say = cyberpi.cloud.listen_result()
9 u, g- Y; ^( X# d# t& ~ k* ^2 } cyberpi.console.println(say)9 F- o2 Y% R. A" m4 k3 N( i
cyberpi.console.println("--------------")* E& {! a8 ]1 B; O8 S
for i in say:
1 _+ `) N. W7 t A1 M" |% e if i == '':6 ]1 W( u% p& @" S
keyboard.press(' ')/ ~1 F6 Q( R8 q q
else:
# P" h- w9 ?' N0 J9 n6 U4 S keyboard.press(str(i))7 Y# r2 T; X& }# _3 I( M( a6 V
time.sleep(0.03)
/ N. ?* ?$ ^3 M! v& F
4 F3 V4 U1 V& E) Smatplotlib音量柱狀圖
8 f& l: O& i2 A' n5 P' b; m2 r3 pimport cyberpi
; g3 L: G1 y; ~" S0 E: C: Iimport time& k: C( c- }1 r: e) c3 T% g& l
from matplotlib import pyplot as plt1 T5 a( {- S: q& V5 _5 O; z; Z
+ K/ K/ d' i, _: y9 E3 _5 U
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']9 g2 W$ O* k; G4 t2 H$ w6 k- B/ g
plt.ion()+ y( r- G+ y% _5 g$ m% g
; E$ F8 L# [0 T; k& w: M% Q% p
while True: r5 R8 D: J7 P7 P, I1 W
loud = cyberpi.get_loudness()
' G" ^: }& P9 j% ?6 o+ F plt.clf()3 v: ]9 _ i) i8 O: ^
plt.xlabel("數據名稱")9 G% Q0 O. B m% D# x" k& N1 o( H
plt.ylabel("音量讀值")
/ A1 ^5 [) ]4 z+ V6 W/ W y_locator = plt.MultipleLocator(5)1 s9 b/ y( {6 s* w: J& n
ax=plt.gca()
8 @9 Q$ Q/ n% x1 w" V ax.yaxis.set_major_locator(y_locator)5 B" H# {" e: T
plt.ylim(0,100)
! x/ q9 |4 h: j8 E/ z* q ` plt.bar('音量', loud, align='center',label=f'溫度{loud}')
0 O9 m" n9 ~$ v6 u; E; s& y plt.title('童芯派聲音感測器讀值')+ X* {. p3 A3 k0 a+ |" x
plt.legend()$ D E; p& `6 a y
plt.show(); D+ S9 m" Z: C; g: C6 [/ X
plt.pause(0.01)2 {8 e+ e/ Z8 E( \& D @# I
- Z8 G! w( J$ r# T- s
& Y: {+ }" g/ _% A+ x7 B( o( mmatplotlib 多圖表顯示$ ?0 a/ T1 a+ r: n
5 F$ N: O6 A6 \( T2 h- y2 M, T
from matplotlib import pyplot as plt
d. E% j1 ]2 w* ?1 w9 dimport time8 O+ k1 c6 d4 l) B& T
import cyberpi
% b* |/ f) Q; D& v2 ~
( ]/ V+ G- T9 E7 Yloud_list = []" `, G' E7 w5 S: [9 j5 h
bri_list = []4 N; b( e/ z- w: _. E# X% T$ s
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體1 k6 T) q+ x/ A. E7 Z1 H5 m
plt.ion()
4 C6 R- j9 w' e5 x& U) V# Bplt.figure(figsize=(10,10))
9 C- _( W) @- M/ R% V+ y7 ]plt.figure(1)& _# |. T3 Q) Q; R O" v/ T/ J% ~
x_locator = plt.MultipleLocator(5), j1 }% J- E3 L8 V- b
y_locator = plt.MultipleLocator(5)8 X5 p8 M: @( e. N1 ]
while True:
" _; y2 ?4 a p8 N9 J( R4 k, T' S/ ? loud = cyberpi.get_loudness()7 e" T+ m3 @( `0 n
bri = cyberpi.get_bri(); f3 L$ {* ?7 h
loud_list.append(loud)8 ~8 @ j) F9 h3 E
bri_list.append(bri)7 I4 f5 a" h8 B1 W* `* A# v
battery = cyberpi.get_battery()9 A* S* Z& \) i1 L5 l7 W
size = [battery, 100-battery]
- j. W' x7 Q7 U. u status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']
7 D& I! x( V7 |2 b2 S# g B ax1 = plt.subplot(221)
* `; H- u8 E. Y0 U/ H plt.title('光線折線圖'). s2 ?( [) h; K% O. j
ax1.plot(bri_list)
( f3 y3 q# h6 ? ax2 = plt.subplot(222)
! x* D" R1 X% G+ b& z plt.title('聲音柱狀圖')
. I! i( _$ r7 q% y" j$ a/ `8 b ax2.xaxis.set_major_locator(x_locator)
, P, D6 T0 ] E) i( m. F ax2.yaxis.set_major_locator(y_locator)
1 t& F3 X; x" ?% c0 n# U) b plt.ylim(0,100)
1 L& Z# f2 h" Q# ^, P( M ax2.bar('sound', loud). r; e* B( |3 ~! U& T" m
ax3 = plt.subplot(223) ~$ d0 o( A Q- U) C! A0 H% m' d5 P
ax3.xaxis.set_major_locator(x_locator)/ ?& b& x. t" E+ I, S
ax3.yaxis.set_major_locator(y_locator)( m9 V9 `* J/ O' ~# q$ x. ^
plt.xlim(0,100)# N0 M, u( g5 z, u d. `
plt.ylim(0,100)2 R$ K4 p0 R% p# H
plt.title('聲音、音量散點圖')
. ]8 K7 i6 ?% Z; Z7 O8 m ax3.scatter(loud_list,bri_list)
7 ?9 x9 k% o! u ax4 = plt.subplot(224)! Y: q9 Q$ G+ o/ k& |$ A# O
ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})# z) A/ ~4 ^4 K F7 n
plt.title('童芯派電量')3 z* D6 x# S2 R& G( g; I
plt.pause(0.2)
; t) a- _) H- ^% \7 D W plt.clf()
/ @# b; j8 Y6 X7 Z8 v1 A+ U if cyberpi.controller.is_press('a'):
! K( q4 `0 M6 N) m# R0 x* C break5 O t; v- |8 v& K# o: j# i
if len(bri_list) > 500:
7 J0 \5 n. D) n2 x' l6 R bri_list = []
8 B* K& u' e* r- n loud_list = []
$ I" [8 u3 A/ \: B9 m# W' k6 O
|