本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi 7 j) T* M& e+ f0 X3 |
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。: |5 f- m& D. o& ~6 y1 g! Q
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載 ) Q, Z5 N4 n7 o7 G! d1 r3 T S" l6 ^
- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
& O* A$ Z" k4 S% j 2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)# y$ V( ?, }6 U5 ~( m
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
) ^7 T1 @5 P2 z7 F+ a
' D4 e/ i7 w: i6 R$ c; V2 P I0 ?1 d- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
. }8 w& o- H) D9 Q5 n
4 }8 c6 y1 u! y3 ]. P% ]- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。( |+ k5 b8 K7 Y9 D- q. e# B3 `0 V& g
2 g" R) S0 @. t4 L9 u
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。
+ G& U( S) H4 b6 f# t' B7 t) ?( R
! s( i8 D6 K! l& P6 R9 T8 Y2 x3.童芯派第三方編輯器程式設計準備* `( F! G2 l0 w. X6 Y5 J
- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。
( K5 s' J0 x) g7 H+ W: |/ Q 5 E1 ]3 R! f3 U4 u, w, e
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。5 K6 B5 L. F0 Q# b- ]# \# Q5 Q Q
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
( g2 X, H1 X# o- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。
/ e" ?# f; Z( d1 U
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。
7 }7 L# z6 t) C% u. d* Z2 ]* i0 t9 { O9 d# z F; C
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。& F- z x$ a" k
! y! ~6 x u' @0 w
4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。
% J9 A1 ?4 E& W6 ]5 e7 M! _5.一些程式設計案例1 l& |% _& @( L, ^1 h) s
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput
/ Y8 A: T5 E3 D功能介紹:
1 Z* I6 T# w5 U6 w利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。
) e# B" A. J# {/ |2 g通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。8 J& T0 N( s; U d% L
結合藍牙模組可以實現無線滑鼠的功能。0 C6 Y7 O- f1 I) L* k
4 B/ ]+ d/ i9 F$ W5 A- e8 F
from pynput.mouse import Button,Controller
. D6 L: y) r6 e0 Jimport cyberpi
3 j) ]1 F" `8 T& V& cimport time, |$ q2 O' v/ q: r: t
+ k# \" r O a/ J; H+ q! p
mouse = Controller()' q0 M8 C. G3 s, c" f
2 r+ a+ h' B' _# p1 A6 z# {! X" |while True:
( A. J. c& o* `, b+ B if cyberpi.is_tiltback():$ y" t% R7 \" G/ F
mouse.move(-3, 0)
: M& L" B4 R. N& u print(mouse.position): Q' f; f+ T5 y5 G( K$ o3 X4 E
if cyberpi.is_tiltforward():
& C% g* G# K/ @9 K mouse.move(3, 0)
6 Z+ U' g4 i1 D3 J+ W, H4 c3 K7 H% s if cyberpi.is_tiltleft():
) {9 @; P+ g% W9 I; m$ c mouse.move(0, -3)
3 P& y! \/ F2 N3 n# n3 a if cyberpi.is_tiltright():# m( T: J5 P0 ^9 L
mouse.move(0, 3)
$ n4 a3 V; }6 @6 T/ S6 P5 i4 m5 _) C if cyberpi.controller.is_press("b"):
% p& y0 K# }* D J: e. J mouse.press(Button.left)2 c; V- y6 Y! Z6 q( {
mouse.release(Button.left)
) i& E! M0 r0 ?% z4 c; R& L9 T mouse.press(Button.left)) v j+ E& _; M
mouse.release(Button.left)
7 C. q; q/ B6 t if cyberpi.controller.is_press("a"):4 u+ c* ]! X) m2 B) G2 @9 O
mouse.press(Button.right)6 g" Q* f+ _$ ^% d
mouse.release(Button.right)
+ `. W/ ^9 p& u& H1 Y time.sleep(0.01)/ P5 n, A E% h' p
* `7 P7 o" i5 {8 G' ^9 ]& q
( W+ w! Y' G) G5 g8 Z# q* o, B語音打字器
. k8 S8 E- c$ ^0 C0 @4 W功能介紹:
: O- _ e3 _' @2 r. E* T' W) a+ P利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。! p6 y2 y! B h0 `5 M; g8 t
將語音辨識的結果通過pynput在文檔中打出來。6 l3 W1 x* ?" E
該程式目前只能支援英文。
" A- h0 ~5 ~& L9 G3 l/ T" O( @* S6 Z2 z% ]: s- T
import cyberpi
% d4 U9 f" \: m( R* G0 Sfrom pynput.keyboard import Key,Controller
0 G# V5 x/ N- b' [% eimport time
u0 k0 I3 H/ \" J r
8 A, W n4 Y C8 g0 d: E- Zkeyboard = Controller(): n( l: N# \8 ?+ W& S" G$ x
cyberpi.console.clear()
8 r |9 r% O4 [3 ?5 `4 u- K( icyberpi.led.on(0, 0, 0)
& q" n+ E" a& q `( F% g! ~+ o: Acyberpi.set_recognition_url()
" T, M& w, S4 i' M; |2 a3 ycyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得/ u5 R2 a! ?' I! o, V& F! o, R
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼")' b7 m/ i- |# N: h1 H& H/ J
while not cyberpi.wifi.is_connect():. a$ ~8 g: m5 q8 h
pass
& m4 P5 i. B7 c5 pcyberpi.led.on(0,0,255)
8 D% {9 k8 N( l& @2 I/ x: Dcyberpi.console.println("WIFI已連接")9 J/ w, k! _8 z5 ]5 o
cyberpi.console.println("--------------")
% G3 Z% l* d8 }9 \ O( Rcyberpi.console.println("按下A鍵開始語音辨識")# z/ e: L4 ?0 K& r% d j
while True:: \0 f2 F& ], `6 i7 S
if cyberpi.controller.is_press('a'):
& F& q! q4 ]5 p! g# b8 C keyboard.press(Key.space) N7 D" B. ~% F
cyberpi.console.clear()% E- t9 L' X v1 b6 v- F
cyberpi.led.on(100, 0, 0)
% J/ H7 D3 Q2 ]2 y cyberpi.console.println("開始語音辨識")9 U- M' J7 l+ D; T4 w
cyberpi.audio.play("switch")) v g a% P& N0 T7 W- U
cyberpi.console.println("--------------")" h6 [7 I; b( Z9 d/ I
cyberpi.cloud.listen("english", 2)% c' H0 s) [2 b( `8 ?
cyberpi.led.on(0, 0, 0)' ?& h% c0 b7 A4 q
say = cyberpi.cloud.listen_result()
' b% e( h- K! y: R+ s } cyberpi.console.println(say)
7 a" ~ q( x: I cyberpi.console.println("--------------")
# h7 g+ ?; b& o( U1 ` for i in say:
9 A% e# g" _+ a7 x/ z' h* Q if i == '':
5 E( k8 q" z" |2 I5 v keyboard.press(' ')
1 T) v$ k% v: [1 M( h# |+ M else:$ A' V1 w1 L5 B- w2 S' \
keyboard.press(str(i))9 C! [/ J: i, H6 K
time.sleep(0.03), \- s" {) p& G/ M
: S: S) K9 i9 H% C @, A H
matplotlib音量柱狀圖 7 y% `* a+ |: j" P
import cyberpi3 f4 B* c: T* C+ K! ?
import time
c* `( H) h% H0 a2 s# o2 V& X1 [from matplotlib import pyplot as plt
: S& G! Y& O6 Q, ~2 k
6 h% R* Z8 [% ]plt.rcParams['font.sans-serif'] =['Microsoft YaHei']4 [) c: y) w$ [
plt.ion()
( U" M8 r- w0 w, R; v G$ Z+ r$ s7 _- p, t/ g3 P! {
while True:( ~0 l3 E- ]( Z2 Q4 b
loud = cyberpi.get_loudness()
. I8 }8 y( X8 `. r5 \- S. \& D plt.clf()4 q( h- m0 ?6 @, f1 U
plt.xlabel("數據名稱")
5 R" p+ G1 e) E$ A( H1 |( P) K5 ^! a plt.ylabel("音量讀值")
5 R! a, I5 v B. n, y' O y_locator = plt.MultipleLocator(5)
4 u' k" ]$ [# e4 m3 w% e+ x4 f4 i3 ~ ax=plt.gca(): ^, D2 p0 k) b7 e+ |
ax.yaxis.set_major_locator(y_locator)# X2 e T3 U' b
plt.ylim(0,100) U. w* b$ A4 {3 O: `
plt.bar('音量', loud, align='center',label=f'溫度{loud}')3 J+ Y; |9 [) x3 Q/ V
plt.title('童芯派聲音感測器讀值')
- N K0 x" |/ ^' U1 g plt.legend()
D* V0 j0 p4 S; o V1 ?7 d plt.show()' [1 b K9 J9 A' _8 `% D2 o
plt.pause(0.01)
6 X2 I; k0 s8 F$ C# U: q- H' u- Z- }9 {5 a' @3 `+ u# Y/ J
8 N) @; i0 s+ e7 V: ^matplotlib 多圖表顯示
) R! v) J" X1 u1 R( a+ P+ Y
4 `( G! I- u5 Q) v0 ^1 }# Zfrom matplotlib import pyplot as plt
" C) e% |9 L( w% K, }import time2 x" ~; d7 J7 A8 b' |0 v9 W
import cyberpi: b8 S& `' _# K. t
2 C3 S0 G+ L7 J; _6 E
loud_list = []- ^) W$ D3 w; n3 D" e
bri_list = []- O4 |- d! a( b! {* z9 k" j- q
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體8 ^. D: S) Z& J0 W* U; H
plt.ion()
7 Q$ {5 c* t1 j; q- W F* j$ {/ Mplt.figure(figsize=(10,10)): M. V7 l: |4 M+ ^/ I( g
plt.figure(1)
3 r4 `2 a2 ^- \# yx_locator = plt.MultipleLocator(5)# W, c% v0 F5 X5 q1 j
y_locator = plt.MultipleLocator(5)
, y9 g+ Q% l3 P8 Owhile True:8 A+ a0 Y9 u' k! O; k; r, m z
loud = cyberpi.get_loudness()% d! K6 Q3 O: M
bri = cyberpi.get_bri()# k. c* n# _" C& c$ a" w3 j5 b
loud_list.append(loud)
H8 v7 _: T+ B9 P' r! o3 r7 w bri_list.append(bri) s9 l' l. A6 P% Y
battery = cyberpi.get_battery()4 i8 Z; f. h3 X6 Z8 E! H, ~4 N
size = [battery, 100-battery]) K; p& {+ Q. q, [4 O$ l' M* }
status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']
. k5 Z# A) z& x! G& a, F ax1 = plt.subplot(221)) f4 Z$ E5 F2 w! b9 ~: x3 t
plt.title('光線折線圖')
% L# h7 p# N) O ax1.plot(bri_list); \! ^7 V2 }: T5 l! z/ D
ax2 = plt.subplot(222)) l( M2 r" E) K, |4 k
plt.title('聲音柱狀圖')
9 q2 y, Y1 O$ w1 ?; q& P3 } ax2.xaxis.set_major_locator(x_locator)
9 j4 S* o6 \" \; d' z3 g8 k ax2.yaxis.set_major_locator(y_locator)5 L# x6 o& |$ W! u d
plt.ylim(0,100)
: ^3 k2 u ?/ ? W$ z7 z ax2.bar('sound', loud)3 ?/ s. I: S/ K4 u" u
ax3 = plt.subplot(223)
4 y. g7 m# M1 R+ J0 v0 U. W- B5 O( W' o ax3.xaxis.set_major_locator(x_locator)
! S" U9 Q- J u+ ~. B# ~- x- T B ax3.yaxis.set_major_locator(y_locator) G4 e( n9 {" S t, n6 ^
plt.xlim(0,100)# s) \& t4 x# x4 ^
plt.ylim(0,100)+ C' C& u, Y4 |" G
plt.title('聲音、音量散點圖')+ t1 ]! k% [1 j5 Q
ax3.scatter(loud_list,bri_list)9 j! f: E d9 ?* a( o/ x! \
ax4 = plt.subplot(224)3 I/ ]! t: l+ Y, o8 g
ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})% o. r0 N8 \: z. C5 s
plt.title('童芯派電量')
# F. `" L7 Z- I plt.pause(0.2)
3 t* h- F- t% M( `9 m plt.clf()7 D$ `+ t2 d+ G6 I& d% }% O: E( o' s5 C
if cyberpi.controller.is_press('a'):2 x( [9 t4 s p( G& w; S3 X% B4 X7 d
break
' F1 M6 o( F) B; h9 ~ if len(bri_list) > 500:
% Q( ~8 _' @4 \& G( {, f, f bri_list = []
4 H4 I. i( j' X+ S loud_list = []5 J% n; m" x) z' l& S# C
6 i+ B; e& x. }2 h0 B. A
|