本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi
# w+ M; J. m( L& I& {" l1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
3 Y% N! ?7 j; F. j
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載 ' h- l7 b( z% _# B, L
- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
. S) M- z8 E2 d ? 2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)4 a; T4 d# b/ M' l, A
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
$ y0 @% G0 X( a/ b 0 x/ x8 j! {! R# c; Y
- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
: B& c- ?5 }2 O. V4 a% J
% a, V$ W( d8 z- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
" t- K, a5 H1 H# H" i9 O6 U, h 4 M: W7 r* {" Y0 v7 @
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。
, m( g# O I* c. h. q3 [; t ' A3 s6 k3 p4 {' ?8 j7 H
3.童芯派第三方編輯器程式設計準備
5 j1 e7 m# t' L! t, `/ x& m% s: G$ S7 V7 {- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。/ `5 \4 Z2 o! @+ I: T+ O
, D8 S( k: G7 l% ]
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。
$ f" J J5 K" E# T( r8 {$ W
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。 % g6 D; z/ @+ Y9 ~" |! A( B4 L
- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。
: v( c. ?3 v5 d, j; D: [
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。
) Z3 ]) v8 U9 H3 c, P: S* q: P2 A5 ]& F8 y/ I
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。
5 u/ N4 F% S# ]5 s$ Y# S4 Y
: B3 \7 x% {; L5 w% K) ~4 ]3 c6 Z- X" C$ j4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 " ?2 R8 Y! ~. R& ?; g' r3 p
5.一些程式設計案例) K: b) [* [8 p4 _/ h& U4 p8 u
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput
+ h, S+ A$ j% G0 z4 l7 A3 }9 d功能介紹:
. Y0 L" E4 E, q+ D( e1 j利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。 w) ^ Z5 p! [5 M6 S
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。
4 ^1 Q1 X) f1 A% S5 M: H' p結合藍牙模組可以實現無線滑鼠的功能。
% m7 _0 Q2 [/ t8 M2 A( \
, V0 a1 W( B; g$ q( \) }from pynput.mouse import Button,Controller
# ~! y5 `( _# @0 \' @) l Qimport cyberpi4 Q8 o' o+ N4 u' i
import time
+ o9 I8 n3 U: _( ?3 R7 F $ n W/ a+ K' q/ t* A. j
mouse = Controller()
3 n0 Z, D3 ^! B+ ?) W9 X* {
! @# }5 i" G' L7 }1 Fwhile True:9 i' ?: r H; G1 h% r
if cyberpi.is_tiltback():! w6 ?" h3 Y9 E8 a; ^3 G: l' c
mouse.move(-3, 0)
' E& f8 T3 [0 R5 }% I print(mouse.position)' i- J; N5 b9 @! O1 Q
if cyberpi.is_tiltforward():
( H4 L& ]9 i6 y7 X8 E. J mouse.move(3, 0)( G9 }* ~/ d% f
if cyberpi.is_tiltleft():
8 T6 C- N1 t! f1 g; V mouse.move(0, -3) Y, O& A0 ] v$ p! @* _- b
if cyberpi.is_tiltright():8 v9 M8 ^9 ?! K3 I
mouse.move(0, 3)4 o( x: q: R- y2 M) L
if cyberpi.controller.is_press("b"):5 ?8 S1 `+ R: L! F J1 Y: C
mouse.press(Button.left)' z8 s. E' i6 {9 `& o* Y/ U
mouse.release(Button.left)( m* Y" B H9 V+ a
mouse.press(Button.left)5 v! F. N$ Z7 r" V* E4 K
mouse.release(Button.left), ]0 f. G* F( L
if cyberpi.controller.is_press("a"):
8 L3 Y8 h0 M9 g3 O( n5 N/ A mouse.press(Button.right)
% F' _: L( y W mouse.release(Button.right)
. O0 d2 b6 j( _/ P. ^( R time.sleep(0.01)% ?% K0 h- i2 k2 n+ i
+ c1 Y( p* k# v0 y1 R0 T6 J1 J/ {/ F# R
6 `; Y2 {6 A0 h: h7 w B! ^
語音打字器 % v1 v* h- o7 \8 t
功能介紹:
# k/ `# L: g- v- q利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
3 C8 G$ m" d" {將語音辨識的結果通過pynput在文檔中打出來。( d/ F/ \ z, J+ ^9 x$ V
該程式目前只能支援英文。$ h/ \1 p5 d" ~/ u
8 ^0 L; s4 e' `, \import cyberpi1 K0 s: t& ?' _
from pynput.keyboard import Key,Controller* ^3 x1 I$ e8 X; j
import time
4 P1 a& T5 y5 S/ I7 T
% l9 x3 V6 f3 ikeyboard = Controller()
3 T4 U& ~4 J/ D& L! [7 J& h. ^cyberpi.console.clear()0 U) l, i' I# S! H! U
cyberpi.led.on(0, 0, 0), H- A4 i. i, Z5 u0 R, J
cyberpi.set_recognition_url()
( L: B! D3 Z+ t. p# ]) Icyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得9 o; c+ n7 p) K& k1 \" K: A, ?3 {
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼") b4 s6 h d, _' b0 _
while not cyberpi.wifi.is_connect():. V: J' W% b6 z B9 F; k- \1 N
pass
n9 D; Z0 u+ H1 ?8 X. B2 Ecyberpi.led.on(0,0,255)$ ]& R" R3 e; i- Z, q
cyberpi.console.println("WIFI已連接")5 k! c- G0 A" I% |% e7 `9 Y
cyberpi.console.println("--------------")
4 j k& }; N+ ^8 k) d0 N8 O! v7 mcyberpi.console.println("按下A鍵開始語音辨識")
: b& W8 o7 M8 ]9 P7 Z" w% Mwhile True:8 f& j* S/ j8 T5 g! o
if cyberpi.controller.is_press('a'):
* e$ Y$ U9 ~; h- c9 g keyboard.press(Key.space)+ u! F) t/ W* I* `# E8 m' E% ]
cyberpi.console.clear(); p4 o* Q, O2 \! d
cyberpi.led.on(100, 0, 0)
3 }0 O- u( P# T3 S9 k D" v1 Q cyberpi.console.println("開始語音辨識")( S7 f6 K, Z( h" l' o8 D& r
cyberpi.audio.play("switch")! F5 R' U( k/ M8 N6 B+ q' ?
cyberpi.console.println("--------------")
7 s% D* Y% F) h8 _ cyberpi.cloud.listen("english", 2)$ N4 r8 S( N& \+ b
cyberpi.led.on(0, 0, 0)
- j8 I p, a; d0 l say = cyberpi.cloud.listen_result(). x3 q- N2 i3 I' X# V. m" r/ y0 r
cyberpi.console.println(say)
/ N" i; C4 b/ l' N2 |! g cyberpi.console.println("--------------")& O2 U) Y3 h( P9 ^
for i in say:
5 S3 I# Z! R! L3 b if i == '': N& c: B, m7 t B* x. I
keyboard.press(' ')4 o" U3 E) g5 c. t' A
else:
2 I, f+ J4 u) O4 T keyboard.press(str(i))
( b* D$ Y4 I D d5 c time.sleep(0.03)6 Y- y. N: g: r4 ]' t) a
4 r: z; L. R+ V8 ]$ Z5 H
matplotlib音量柱狀圖 ! ?, L- Q _% v# }. ?" J: |0 i
import cyberpi6 o: ~% P; E( g9 d8 M5 h
import time7 _* G7 w# u! J ~$ Q( Z P
from matplotlib import pyplot as plt" |; S5 Y/ Z9 ~& O, p
3 A% Z( c2 @- N( p% e
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']
+ m( i R! m: Yplt.ion(), f0 H/ m2 R- H( `% L# |6 [) E) Y
4 ?3 q6 r' L. ?9 R% F( q" z$ uwhile True:
6 W9 p) }% s) w$ E" k: A% H5 e loud = cyberpi.get_loudness(): G' q" |6 p/ c- {4 z- m* j; d! t( j
plt.clf()( J$ U) d8 G- @2 M& @. H" a/ E
plt.xlabel("數據名稱"): ]; A" m6 N$ S1 K$ l `
plt.ylabel("音量讀值")
& P! ~8 |9 B ^! f7 j" {. J y_locator = plt.MultipleLocator(5)
3 k. J% C L- F7 a& { ax=plt.gca()
" g, }- f; V0 i( y0 m ax.yaxis.set_major_locator(y_locator)
* L P5 v! V6 t' h6 ? ?$ E1 i plt.ylim(0,100)$ S1 T1 X, q7 Q
plt.bar('音量', loud, align='center',label=f'溫度{loud}')
3 _& L) `' A( l; L plt.title('童芯派聲音感測器讀值')
8 [6 e2 N# z6 F o; | plt.legend()$ c) _( a2 ]6 G1 f
plt.show()9 D* ^/ |0 Q. u `
plt.pause(0.01)8 Q% N7 N. K; X. O$ `
. m9 X- p+ k7 \ r1 Q5 v; B8 P& `$ h% J; T3 g z j |
matplotlib 多圖表顯示
: _8 o9 o2 b. x* G& a* y9 s
# Y; n' ]% ?" Q3 bfrom matplotlib import pyplot as plt V! M5 n- i9 ]3 i, Z( Z
import time
1 S- U$ t' o1 w) E/ m+ d3 R" Vimport cyberpi
4 Z2 N8 R6 u. B- q1 A) w
# W; |: ~" ?! Z+ @- o( v$ f) hloud_list = []
" r3 K9 y( ?) `8 ^; P4 B, ebri_list = []
3 u. |) R; j: x* [/ ]) z$ l0 hplt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體
* I& ]' L" g* S0 | J5 G0 Y# V% n9 Wplt.ion()
1 _- J2 ]# @8 {: W- u: t6 ?plt.figure(figsize=(10,10)) D; N# r! l$ [8 L& K5 o! d- G
plt.figure(1)/ |! V% y% ?3 T7 e/ r. s: |
x_locator = plt.MultipleLocator(5)
^( l1 D. m( F$ V* O9 V" Gy_locator = plt.MultipleLocator(5)6 z1 u: O/ ]0 {# @* i) A
while True:
" {5 e2 ]: t. B& n7 E loud = cyberpi.get_loudness()6 Y' j8 @+ K) Z; a8 B" x9 |1 r
bri = cyberpi.get_bri()# o9 L8 ?9 k. {7 m* o2 A; ^6 P
loud_list.append(loud)8 C* l! P# Q" _3 v2 d
bri_list.append(bri)$ j+ I! ]: k( {. {& X9 B
battery = cyberpi.get_battery()* |1 W ?- J- f
size = [battery, 100-battery]
+ O& s; l& J0 I( h- @- h' v0 O3 s; ? status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']
4 X1 n: h! E* \& _. w) c; k ax1 = plt.subplot(221)1 ^6 u9 K( A" R- L8 p
plt.title('光線折線圖')" t# i. S- x& T8 x/ _- k
ax1.plot(bri_list)
; L3 ?: O' U: p, p" e ax2 = plt.subplot(222)7 V; t, w, T) J$ Q9 Z# c
plt.title('聲音柱狀圖')
" b: w" O6 @( k ax2.xaxis.set_major_locator(x_locator)
" P: r* u# E( R: J: ]6 Z. q ax2.yaxis.set_major_locator(y_locator)
( X3 m5 O# l5 l, j ^: \- [* N- E9 ^ plt.ylim(0,100)6 q D5 k5 b, G, B; Y6 O# \) |
ax2.bar('sound', loud)% P# E0 I, p+ f* E6 [( \. Z
ax3 = plt.subplot(223)
9 O- j7 w; z/ ]' ]# Y) U( ^ ax3.xaxis.set_major_locator(x_locator)
' P/ |, }( I5 m, {9 z1 H( n. A ax3.yaxis.set_major_locator(y_locator)
9 ^* q' q. h# O# t7 P+ @* g9 O plt.xlim(0,100)
. l, `: [7 D/ g# K2 D8 P plt.ylim(0,100), N( P7 t9 |* ?9 p7 y
plt.title('聲音、音量散點圖')
) ]( ?8 p! P2 ?" b/ C1 I! @/ A7 r8 D ax3.scatter(loud_list,bri_list)
. [* e, g6 C/ u! Z* _6 b( v ax4 = plt.subplot(224)& y* a( S! S* V! G: ~1 F- z8 X& y: U
ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
# B: V d" o( ~8 ]. u, f. ^) d' e plt.title('童芯派電量')
. w1 b1 h. c( Z* L1 e1 z plt.pause(0.2)
% n/ u7 f h1 Z0 o+ @* ` plt.clf()
6 B. w' E+ }( K" N: [ if cyberpi.controller.is_press('a'):8 e4 O8 I8 n( A1 O7 j+ \: b
break! n5 t2 j" y. ]/ z1 n
if len(bri_list) > 500:8 V- q1 g+ E8 E4 T: ]' ~' h* ?
bri_list = []
. b8 J! f3 f- h3 N: K+ ]6 O) o loud_list = []0 q1 z* \* K0 k7 R1 i+ `
6 a; v* Z* Z! s" P
|