本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi 3 m8 Z( p* m; w
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。9 }' x+ Y: C2 T# N3 S' z
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載 / ~ o; Y( O* ~- Q5 [- @7 M! M
- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。6 ^- _" [2 D# I* }' ~
2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
6 l* e: z+ ?2 d' n
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。 d1 v7 Z) U/ Z. N
1 }2 p/ r- N/ Z" a0 T- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
2 G5 p7 U5 d% W1 _# e
# y/ T' [: h W& x2 G+ J$ a- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。$ {6 ~5 v5 W1 w6 x( c$ A" O2 U ]
$ q7 {% A1 C. a- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。* g! k! g8 J1 }
- _! D) t0 v/ }$ W8 h3.童芯派第三方編輯器程式設計準備
' V1 f/ l+ b6 a, O- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。. v. `9 f) S9 H
" y s) g9 ] W& j7 B
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。
& m5 [* ]1 |5 p1 O3 h, u5 n. P% z
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。 9 q2 H+ X" Y! ?' ]) Q
- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。( X+ `0 U: s' N+ r$ ?
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。
# Y0 F( H+ ]+ A
: }; }/ ]% }) r g, H- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。
/ k, ~- I* `- P# Z, v " U2 C9 |: H* M1 k2 q6 h* _
4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。
0 F; I/ L, q n. L( i$ ]7 O, H3 B5.一些程式設計案例
8 C, V) K0 Y2 |$ P1 v- Z童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput . g! N: T( \6 a3 `& v7 T
功能介紹:/ D# M( J( w) c! N; g) U- w) P
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。2 M4 m V) Q+ ?- o6 K
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。
) ^& u3 J% i5 j+ ^結合藍牙模組可以實現無線滑鼠的功能。* U) ~1 n& a- }. c5 z' t3 P
% p/ o8 Y8 k' c, u$ e& H
from pynput.mouse import Button,Controller8 X, q% a! @" @9 B. u! I( O
import cyberpi- k& u7 X' d, ~9 \2 ^' }+ h) ]* x
import time6 ?+ l4 f( r& D. o: A% ?; |% I
3 z" v$ B2 @; r# h( Tmouse = Controller()
' }0 I* u- e' \0 b . w! S: ^$ x# X+ p _0 I2 d& c
while True:5 V9 w7 ~6 y0 G9 E
if cyberpi.is_tiltback():
+ i/ B+ o( o1 J$ a+ S mouse.move(-3, 0)
# @, h4 ]" _* C% f print(mouse.position)) z" q& Q& t/ A Y& q( ^0 g4 {$ t
if cyberpi.is_tiltforward():: z% Q; X; s" ^6 Z v3 N
mouse.move(3, 0)! o% h: q6 F& U% Z: M) ~) A7 N
if cyberpi.is_tiltleft():' L9 Y7 X5 |7 s5 A6 M9 j
mouse.move(0, -3)
. m1 k6 @5 l. L, k/ f% H if cyberpi.is_tiltright():7 Y4 @: I; z `6 \& s# o
mouse.move(0, 3)
, W# `" l' [6 n6 f r if cyberpi.controller.is_press("b"):* Y5 V; N* G! }/ l e: d
mouse.press(Button.left)
$ t" \; z; m9 u/ k& [ mouse.release(Button.left); w M# R. Y3 \( v
mouse.press(Button.left). B/ k* p5 f0 Y: o: M& `
mouse.release(Button.left)
' V9 h' v- Y; ^0 v if cyberpi.controller.is_press("a"):/ J7 n3 {9 X9 ]4 m) X! j
mouse.press(Button.right)
& F/ f! W$ Q& S1 Z4 }# w mouse.release(Button.right)
y d8 B! s) Z9 `. ] time.sleep(0.01)
2 x# q5 i6 G, A# ^2 u- T
6 ~8 d7 X+ x' ~2 Z( X8 L0 |5 V) [, p
! ?$ P2 }" }7 ^# a* k語音打字器
5 J$ M# Y. r/ g6 {$ @! c* {4 w+ M功能介紹:' z) R7 S/ s$ k, q; G; ]) h# Z% ~
利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。8 E- Z( \4 k' U$ O/ W# _( m
將語音辨識的結果通過pynput在文檔中打出來。
+ D2 P# t, j) y該程式目前只能支援英文。 Q" K7 j3 A/ b
3 f# O2 y3 |- I" m& N' [import cyberpi
8 Q1 c; G3 ~# h# w, ^+ \7 F/ [2 p# rfrom pynput.keyboard import Key,Controller
" E& R$ r' f# X4 S+ D x f1 Z2 ximport time$ [" U- D2 l% t' d; y1 M4 I
6 W! ]9 _% x( Z$ X% R* bkeyboard = Controller()- p0 G! q3 _1 Q+ u# |/ O
cyberpi.console.clear()
! X( j6 v7 H7 R) vcyberpi.led.on(0, 0, 0)
* W9 q* }! x# R# zcyberpi.set_recognition_url()5 a, n7 v' t1 X6 a) C1 l
cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得: i. \1 R6 y; M5 t, L# g
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼")
6 Q2 C8 {4 s4 L4 ? p7 I/ _2 R3 Owhile not cyberpi.wifi.is_connect():
' T6 i h# {: k pass8 W7 d& a$ n0 B6 v, b+ T; G
cyberpi.led.on(0,0,255)- f. f }% h j
cyberpi.console.println("WIFI已連接")
, x* J. M4 t* i: g. c \' O! ?cyberpi.console.println("--------------")
) b0 s, h* j1 M6 [; \ X* R$ |. Scyberpi.console.println("按下A鍵開始語音辨識")
( Y, `5 r8 \6 H& L4 _: s" Dwhile True:" g& K( Q& l3 U8 a1 P
if cyberpi.controller.is_press('a'):
( G; |( m: ?2 s% d& W4 T w keyboard.press(Key.space)2 M% v+ E2 e. B$ P' ~# p
cyberpi.console.clear()
5 [; z3 H: P) z) {3 _9 a cyberpi.led.on(100, 0, 0)' k* M% W2 C7 U( ?9 d0 ]$ u
cyberpi.console.println("開始語音辨識")
7 Z% t @# }8 m3 c0 ^3 E cyberpi.audio.play("switch"). `/ i$ O+ m r! z* F9 p
cyberpi.console.println("--------------")
4 v. Y% c$ ^' Q/ A cyberpi.cloud.listen("english", 2)
; F, U. M# D: Z) q' Z8 ? cyberpi.led.on(0, 0, 0)
6 `; w7 m( a3 Q0 _) C say = cyberpi.cloud.listen_result()2 m, H! A C2 H& F/ M, x
cyberpi.console.println(say)/ x: v1 ~8 x: f6 c6 n
cyberpi.console.println("--------------")% D. U' Q5 y% @; _( M& H
for i in say:
% w2 M3 u7 `) E% X) I if i == '':
$ p x( B) t9 B. O s* N) g; j4 W keyboard.press(' ')! ?7 @) q+ J) |
else:" i1 g8 H2 D) Z
keyboard.press(str(i))6 k+ q) |; u# ]& C
time.sleep(0.03)
6 \9 z+ W% A) N; k) N' ]. t$ ~6 y; g' h* O/ M
matplotlib音量柱狀圖
! I" m# B% E" y4 {4 M! o% D, qimport cyberpi
7 I2 d+ B" A+ b" d+ q8 timport time4 K! P( w8 c$ A
from matplotlib import pyplot as plt, c/ h9 M7 b' l
& _$ R& p; w9 n1 Uplt.rcParams['font.sans-serif'] =['Microsoft YaHei']# Z. B. o7 ^ t; r" s. F3 ]* M# k$ Z0 Q) x
plt.ion()+ D+ E( F! x6 G7 h a+ ~
( z& W2 |3 Z* @& y- R5 X3 {while True:
! F. G0 d0 G: k( J+ C loud = cyberpi.get_loudness()
4 Z, B1 j6 U) w0 X plt.clf()
$ c# y8 e; ^: S0 E# G; p+ K plt.xlabel("數據名稱")6 D2 E# Z0 r3 Y' c3 v
plt.ylabel("音量讀值")( a. {) P* s" h" x9 r1 k* G' n b
y_locator = plt.MultipleLocator(5)
& G* n' Q% @$ i3 v2 k ax=plt.gca()) Z% e! I: E( w* G( N" N$ o' R& _4 m3 L
ax.yaxis.set_major_locator(y_locator)
3 C" R( n L3 Y0 m plt.ylim(0,100)6 R) K4 F* X7 {( q" Z8 i0 L
plt.bar('音量', loud, align='center',label=f'溫度{loud}')6 X! g5 M W) _. l0 M9 U6 p- x2 B
plt.title('童芯派聲音感測器讀值')8 d4 h k5 N' S$ V7 O5 ]; f6 Z4 p; e
plt.legend()( h2 x" L0 o, U2 P; E* G
plt.show()
- |5 N: R+ |" ]( E plt.pause(0.01)4 q8 [& c7 K9 b$ b2 |0 k( I
2 ~; w7 F7 e% Q$ x8 o3 V- l3 [0 \ T& f2 C# d4 ?, ~
matplotlib 多圖表顯示
6 Y d3 }- n& A; r- t4 ?9 B
9 Z U' U$ \; M4 Afrom matplotlib import pyplot as plt# J+ g8 G/ {! F
import time( y) y0 ?/ ?# t, v
import cyberpi: Z" r' o6 \7 b- X2 N
4 b9 r( v: R4 |7 v0 G. h
loud_list = []
& k& z+ W5 L3 X/ k" ?bri_list = []' n% _) P% R" c/ z% K9 t; J$ Z
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體
. G. q6 i: ?+ e' u9 o$ Nplt.ion()
0 C2 f# E0 E* r5 _" I1 J5 C) Zplt.figure(figsize=(10,10))# {3 t C* I) C" H0 t
plt.figure(1)
( E+ P1 {2 c9 Y% \x_locator = plt.MultipleLocator(5)
4 d& ?# ~* M# s9 c8 j6 ^0 v: ~y_locator = plt.MultipleLocator(5)
. w- v: z: Y9 [% g9 i) M' pwhile True:
1 Z4 h" f* ~' r loud = cyberpi.get_loudness()
1 U& z, ~1 n; ?% Y& c* L* | bri = cyberpi.get_bri()7 @; q# U$ H$ ~3 w7 I
loud_list.append(loud)) k: [) y2 f0 @) a W
bri_list.append(bri)
$ s. z; s+ i u; p battery = cyberpi.get_battery()! S3 e. H+ R2 H& Q: Q
size = [battery, 100-battery]
. k6 ?3 X# n' t status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']
: j9 {0 v) o) M ax1 = plt.subplot(221)
/ [% g3 W7 l- R" E6 @, e plt.title('光線折線圖')
1 J7 E C9 R5 z7 b8 v ax1.plot(bri_list)7 N5 W' Y( f( Z. k
ax2 = plt.subplot(222)/ i- G: P: [" D/ {' k/ f
plt.title('聲音柱狀圖')/ [& f$ N/ e% d" H# ~
ax2.xaxis.set_major_locator(x_locator)
# h/ k# {% \4 e7 \: f q+ S5 w ax2.yaxis.set_major_locator(y_locator)
2 @1 Q) r, q# N5 p5 T; p% z plt.ylim(0,100) s5 y" V0 Z& W1 F3 |( {% n2 y* V5 G
ax2.bar('sound', loud)
; @2 P! w) n2 x ax3 = plt.subplot(223)8 d+ p d5 @9 ]9 r$ K
ax3.xaxis.set_major_locator(x_locator). r8 I, r6 M2 M* f
ax3.yaxis.set_major_locator(y_locator)
% Y0 p4 T# ?0 E' Z- ?2 c' } plt.xlim(0,100)
I% V5 ` c, I$ D$ W plt.ylim(0,100)
& m' }- q, _+ o) v% P) @ plt.title('聲音、音量散點圖')8 A$ U# p, n) A) z9 c* G
ax3.scatter(loud_list,bri_list)
8 Y3 D/ G5 l X ax4 = plt.subplot(224)
# Q) F7 u/ X" r# |/ |% c( ~' a ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
5 P* S. T$ j3 H* M1 l plt.title('童芯派電量')7 i2 I7 V2 D' C
plt.pause(0.2)5 H% L% @% n$ e. b
plt.clf()8 ?; o# C* c- D) ~: i
if cyberpi.controller.is_press('a'):0 j! V! h3 n: R, y2 o3 C
break2 B( d& w( f# E' `# s
if len(bri_list) > 500:
9 v. V. ^; ?# ~% Y) w; M) [/ h bri_list = []' r# r$ ]" Q O# B, ~
loud_list = []. {0 [7 I* P% O; Q5 n% p; p
3 l: [' p- I# M- T8 J8 \9 M |