本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi 2 b: { V* K5 }$ |- F& R& Q
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。 y8 A1 F B; Z
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載 ; z" F$ g( R6 p
- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
, _$ g+ u$ X9 Z 2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
) H: x0 V* s: g3 K7 J3 c3 l) n( |
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。$ @7 D; ~& v! W. [
z/ ~& Z; E! x- g- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
* k! [- t: _" }1 U9 {" Y
8 ?" S4 ~ P, X9 \6 r4 b3 V- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
2 \# k& |1 P G
9 y" n! U# E2 N& q- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。! J: _4 {5 X1 H g" d& h4 L
I0 R1 M+ C' A1 N3.童芯派第三方編輯器程式設計準備+ i( T' s8 ^1 Y1 I
- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。
8 I7 l4 v2 p4 E k - j, E' ^% K% h# m2 T7 c. @5 b: F
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。
8 H' v; J7 `9 l1 R6 i0 G
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
0 {9 |* s5 p& c: g- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。3 P- F' D: X2 v! e7 t" ~
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。
4 r: t3 m4 x3 Q5 F) |
& u# i* S) B9 G: M' z1 r6 d2 {, H- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。
" |' U0 e q: y$ r& j6 a5 h: @; ?, b
+ j! D0 N$ w( r. Q4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。
, ]2 ]% T" F# J" g; y5.一些程式設計案例' q. V. V7 V1 k1 Y" S- r: r
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput + T) X& T. J* {, D# _# y4 M- I
功能介紹:4 ?" j+ F2 x" E5 J) W1 O- f" H
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。
" D* Q8 o" L. `' ~9 _通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。; ^" x2 r3 I/ I4 I( c3 ?
結合藍牙模組可以實現無線滑鼠的功能。
6 [) x* T' R3 v9 `; T! |" k6 E! e$ R6 E- m6 V2 B
from pynput.mouse import Button,Controller' a1 T. U4 x; R9 \' \( \
import cyberpi
" p. k5 W7 U$ p2 I4 w- himport time
5 l3 @' w* w1 D3 L- c) B , n, @1 V; @4 n( u, U( Y# z: m
mouse = Controller()
: y( L9 E/ G1 W . L/ b) J4 e* E4 A$ s: M
while True:* H8 L+ X W3 Z! x
if cyberpi.is_tiltback():. Y3 x* j) J: Y0 j5 J+ Z& A
mouse.move(-3, 0)
3 b+ L6 `1 n( ^ print(mouse.position)
7 }7 }& l7 v6 R" o if cyberpi.is_tiltforward():
0 b4 k2 P. H' W) V! J3 T mouse.move(3, 0)
3 q; C7 _( L5 e, O- { if cyberpi.is_tiltleft():8 k/ m- ~* m) m
mouse.move(0, -3)
: [' y2 u; \- m- Z1 [! U$ I! q if cyberpi.is_tiltright():
9 ?# D2 M6 e$ J, i& t mouse.move(0, 3) Z7 C) s3 V; q
if cyberpi.controller.is_press("b"):
: } h# F8 R9 J* Q* o- Q. D mouse.press(Button.left)8 ~& f7 ~; Y8 A
mouse.release(Button.left)
# K# s% S0 B4 F" w) U) e mouse.press(Button.left)
' n: j: Y9 L$ V: u# U4 S R mouse.release(Button.left)
! Y) ~. [/ L6 h0 W% F3 I# G if cyberpi.controller.is_press("a"):
, y% w7 w r. ?7 Q; g& ]: J& s mouse.press(Button.right)
6 u2 [) z* W- e mouse.release(Button.right)/ k$ M5 j6 w, z) g- p" P
time.sleep(0.01), M- Z/ y8 w% K# |9 p
' `# x* J% }# q2 U8 ?
& }+ z" `; B8 W/ ?語音打字器
3 _, K* e+ [% O8 E$ E功能介紹:
0 z& W0 H5 }7 Q0 C/ K! S7 h+ g利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。0 z7 A! R# K! Q5 _
將語音辨識的結果通過pynput在文檔中打出來。" t! m# p. l' D" u
該程式目前只能支援英文。
7 u3 H |: Q0 ^. M; Q* J8 a S1 ^- C# K
import cyberpi
" F r2 m7 R: e, r2 Zfrom pynput.keyboard import Key,Controller# y0 F: R1 m Q
import time
$ Y. h6 D3 q. f% r! w3 b$ h
2 h4 D( R7 l# I6 E) Y8 g& Zkeyboard = Controller()
+ c- q/ \, b: k3 I. s/ _cyberpi.console.clear()
/ @4 k3 \1 G7 u# E- ~- H' ucyberpi.led.on(0, 0, 0)2 c4 ?- E$ @8 T- O/ T9 N- N
cyberpi.set_recognition_url()
' L# I. B% G* f3 n M/ [cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得$ I/ P! B5 f* }
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼")
& G+ I, d* d" X+ `) }5 _while not cyberpi.wifi.is_connect():
+ U! f- m# j J/ s pass( s5 L5 f4 W3 y' X
cyberpi.led.on(0,0,255)2 O* _5 h2 e6 a, _0 I. R
cyberpi.console.println("WIFI已連接")
% [9 \ G% `5 o( B% Ecyberpi.console.println("--------------")8 ]' |: j1 m2 a. g$ B) _" M. Q" [
cyberpi.console.println("按下A鍵開始語音辨識"). ^ e2 [' K& l' O: r
while True:
6 }# X' w0 B( V# z4 f/ i# X5 N if cyberpi.controller.is_press('a'):8 R c; l% W8 @+ E' X1 ^% {
keyboard.press(Key.space)# g z; T0 e" X" U1 ?' l" U
cyberpi.console.clear()* L! l: Z( q1 j F) @
cyberpi.led.on(100, 0, 0)! E& q D4 b x6 M8 b( o% D; T
cyberpi.console.println("開始語音辨識")! p+ u6 W e9 t- D4 ~
cyberpi.audio.play("switch")$ a7 x$ D& @0 W w
cyberpi.console.println("--------------")
, b$ C; X5 I% W cyberpi.cloud.listen("english", 2)
3 F" z) s) ^# a! \( L6 E& f cyberpi.led.on(0, 0, 0)# A$ f T% A9 R; o, g1 P. i) p- P0 H
say = cyberpi.cloud.listen_result()
" t1 F% z5 c9 s F cyberpi.console.println(say)
9 t# f, I8 a# Q% X cyberpi.console.println("--------------")
( p, W% l% ^: |, ] for i in say: ^7 Z( N: b1 h, x ~% }
if i == '':! j6 u1 B6 m% V# _/ M. A$ t
keyboard.press(' ')1 R" o/ V2 c, O( `. A) Z- M5 v
else:
2 E5 B* l6 q8 j- f* r2 y! O keyboard.press(str(i))+ H+ G5 ]; V" s8 `' s
time.sleep(0.03)
6 P+ V( L( ^1 V( D. F
/ s- o; Q( o9 @, pmatplotlib音量柱狀圖 $ ]# I0 Y: v, [7 W9 y/ \
import cyberpi. ^5 J- g& R& k$ v' A4 ?
import time9 E( r' ~2 O9 ?# F* q) h8 T1 `/ ]
from matplotlib import pyplot as plt `% {3 B! D7 _, M5 S+ d' n
# k, o2 H7 l' l Q ~/ a, E
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']/ v+ u7 j* Q: w3 z
plt.ion()
( ]2 o2 {- d3 V
7 F& \- J. b4 Iwhile True:2 m2 {0 e& ~2 Y J. l
loud = cyberpi.get_loudness()
* l- c6 G+ S+ \$ K5 ^" ? plt.clf()$ w1 Z2 K$ O. y) I3 F* z+ _
plt.xlabel("數據名稱")
9 I% a" g2 |0 y( E+ K7 @& x% z1 ? plt.ylabel("音量讀值")4 b( k! o- |. j5 g
y_locator = plt.MultipleLocator(5)
9 z9 k, C: H7 a S! {# F6 G' T5 _ ax=plt.gca()! L3 d3 f: `2 ~* ]: p3 x. C
ax.yaxis.set_major_locator(y_locator)
+ ?8 l9 ^8 ~7 V4 o5 G/ @" u plt.ylim(0,100)! _* d( P: D2 L% ?
plt.bar('音量', loud, align='center',label=f'溫度{loud}')
$ f# _, D. J7 q9 V/ V' F plt.title('童芯派聲音感測器讀值')
' F5 Y l4 f0 l+ c plt.legend()" B- a0 i: Y8 v2 O2 `
plt.show()
2 M6 q5 O/ h; W/ V" G, b/ j/ o plt.pause(0.01); f. K8 H( E( [
, V8 C. w# r8 y7 H
+ |4 C/ O3 h3 z: {
matplotlib 多圖表顯示
* ?4 y! {& G. Y& P# Q! ?- s/ Y
& u- e) X D* j% u) P- w" Ffrom matplotlib import pyplot as plt
7 c4 @ G C8 O) g+ C1 V) @import time
( m2 {5 v) i8 aimport cyberpi
8 B2 }$ g+ a! _0 x4 `8 C+ [$ e Z
' R$ M! R; R4 ]0 B& eloud_list = []
7 J$ V9 k' f% L8 Q. Xbri_list = []
" ?1 b2 b0 U4 W+ gplt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體
, W7 q1 G% j2 M% A" Cplt.ion()
2 W9 X2 F8 e3 b( M; L, hplt.figure(figsize=(10,10))+ `9 B" X! S1 Y" C2 p0 F( b! e
plt.figure(1)3 B: J# n4 ?( w7 Z$ j
x_locator = plt.MultipleLocator(5)
. t( Y) t6 h9 m! [* m; ]y_locator = plt.MultipleLocator(5)
. H5 r' M/ |- {* x8 [, Ywhile True:7 g( C% n }' x/ M1 w1 q8 k
loud = cyberpi.get_loudness(); N3 Z; h; J: ~! ]6 b2 ~
bri = cyberpi.get_bri()
- Q" w. ^( r. ~& Y% r' A" q loud_list.append(loud)
9 @# l$ i. x5 w bri_list.append(bri) M7 J0 @" o* W
battery = cyberpi.get_battery()
9 D; h; x( }1 s" X. S size = [battery, 100-battery]5 k/ o- ~; h7 o- P! a8 r
status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']
$ S2 `5 O8 T; G/ h2 i ax1 = plt.subplot(221)
: L. \6 T* D4 d, G' q plt.title('光線折線圖')
5 z6 e9 d: h* Q$ S: ^ ax1.plot(bri_list). X0 o: W) a4 q$ g
ax2 = plt.subplot(222)
% z7 t- u4 q+ @2 T plt.title('聲音柱狀圖')8 ]" r8 Z& E; f- I! X: B
ax2.xaxis.set_major_locator(x_locator)+ T) y( }1 d6 }1 D3 M
ax2.yaxis.set_major_locator(y_locator)" ^7 _ g9 v% Q0 Q1 B* t
plt.ylim(0,100)
& k) X9 m( w4 u" S' p+ B+ e1 v ax2.bar('sound', loud)& c$ }3 b, T- j8 [5 [6 b
ax3 = plt.subplot(223)
% p l: e4 h' h, D7 b$ D ax3.xaxis.set_major_locator(x_locator)
( Q0 P% T7 Q0 K8 A& n ax3.yaxis.set_major_locator(y_locator)
. O* y7 \5 ~; ] plt.xlim(0,100)
4 e; m8 z8 c; b+ }& T plt.ylim(0,100)) _" E; J! X: ]- \- f
plt.title('聲音、音量散點圖')5 o) m* y+ n9 ]3 N
ax3.scatter(loud_list,bri_list)- r E/ B5 Q- e" {6 H$ `, H
ax4 = plt.subplot(224)2 c! ]6 V, t0 x7 Y& S
ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
; z9 g$ y5 R8 `3 ~9 U4 e- M plt.title('童芯派電量')
& K4 I" N0 B3 ?+ H plt.pause(0.2)
' U/ S1 O ^! e4 v* ] plt.clf()
" o* O# V( N( L" s" ~1 e if cyberpi.controller.is_press('a'):4 ?' i# _! ~) q4 c9 E- K3 A
break
2 r' Y% `( q0 [) }: u if len(bri_list) > 500:
( m! m6 E" j5 G# V( n- x5 b" M bri_list = []# y7 m; G8 t3 n8 C) c
loud_list = []
- X( ]: \( `/ `2 K8 [
* g, Z* W1 D& c, i | |