本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi
/ X. e6 Q( C2 w3 \1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。( O: J/ v/ w# z9 t' X
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載
* c& H& T, p( f8 p6 W# X6 ]- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。( g" u" |" f& _' j: ~
2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
% W/ I* m3 W4 _9 K5 o
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
# U3 i) g3 V$ d" y) {& n( s Z8 X: O
/ A$ V/ H1 m; u5 ~ X% c1 F: G0 l- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
) g' ?7 F' a t; W
$ _9 P1 y6 @# }. F8 L; X+ `- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
z/ l% C) N% B! X2 |/ ? C" G ) p& O" ~" q/ Z8 [$ ]# f0 q8 S
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。
( r y! }- f3 A; ~$ R
( ~* j% ^( n; X: J6 U: K% v3.童芯派第三方編輯器程式設計準備; X2 x: A3 A! g/ y2 W
- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。% H# |$ Y5 ]0 U2 H: Z2 G9 P
' ~# Z7 v- P9 M2 Z7 ?1 |5 S1 ?
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。 S) X# X6 H) J! C% g
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
# p: O/ O( z! l* }& O! d- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。 l9 [7 n% H9 s( P+ }
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 , ]( W s- F" z: L; J( O
5 v7 m! P( v9 A- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。2 O: a1 s& N, L, J: _) ^+ B
2 R6 h# C! p& o/ j
4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 4 m3 W$ Z3 G# O c' l1 a; |
5.一些程式設計案例
1 m a% F$ V( V# r0 V y M: |童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput ) s" B: {. I3 e4 {4 ]. F2 t5 i
功能介紹:
! t5 M6 X" h( I利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。& o6 X' {5 f. D( p
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。5 q# f) N$ B; B# [% }: X" R
結合藍牙模組可以實現無線滑鼠的功能。
# W' s3 [9 y. @ B7 ?% H2 k1 ^0 Q7 }3 x$ l6 j( Q9 j
from pynput.mouse import Button,Controller
" N8 z( R ^: k# y R5 {$ Qimport cyberpi8 m( w$ M1 A J' E l6 B
import time2 N" x) B+ g' h. |
' Y% q6 Z( O7 Z) z& Gmouse = Controller()0 q- G' C$ E* w. n2 E
* \- Q& V( n6 k! ^, K6 dwhile True:) n! L) R; ^; l) n* s
if cyberpi.is_tiltback():
! O" A# b5 m1 V% z8 b$ X. L mouse.move(-3, 0)
* ]! G3 @5 X8 M3 A }+ f print(mouse.position)
4 u" Z2 Q' r- i* V0 Y if cyberpi.is_tiltforward():
7 M# |0 r0 q& Z* E2 p mouse.move(3, 0)/ u; i* R) I# s( q) Q; }% l0 [2 |) `
if cyberpi.is_tiltleft():8 ^# u7 h9 _7 \ f( X. ?; ]: o. ~
mouse.move(0, -3)
) K6 F; g! c3 P% @6 s; l1 e' ?( Z if cyberpi.is_tiltright():
$ y. l% w7 k. R mouse.move(0, 3)
+ }! N. G2 b: a ?* v/ D! J6 p if cyberpi.controller.is_press("b"):
$ V) Y" U8 n e! f9 X/ l0 J mouse.press(Button.left)1 I8 V! K8 y0 x4 c' b/ k! m6 f* c4 ^
mouse.release(Button.left)* E2 [- m8 B q! A6 P# X B: b9 K9 y
mouse.press(Button.left)* z5 F9 J( m" I4 j
mouse.release(Button.left)9 z6 c- S, N% O
if cyberpi.controller.is_press("a"):
& v* P) `( a4 f( L r1 _1 L mouse.press(Button.right), c8 L- ~5 ]% V. ^" u9 u. _
mouse.release(Button.right)3 a. w0 f1 x2 B: r
time.sleep(0.01)+ c7 y- @6 }7 ]# [
( J1 |, L6 q% U6 V0 Y1 @+ I4 f' p
" \0 W! @5 i) W; G語音打字器
i* Q' {7 L8 W8 p) F2 J, k9 g功能介紹:
. V" {0 k! B Z利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
/ ] J! J- q9 D# V- i o) ]2 p將語音辨識的結果通過pynput在文檔中打出來。
5 q7 `7 l4 }, A9 V* @該程式目前只能支援英文。
' }. Y' ]9 H* D& }+ u
T( _5 R; d7 G. A- H/ rimport cyberpi
6 y% h0 e3 i( x4 tfrom pynput.keyboard import Key,Controller
0 q7 Y) R8 t M8 X6 gimport time
; C; V5 }9 |# ?! N- Q1 ?1 d1 Q L/ I+ u/ d2 }+ `6 c( n
keyboard = Controller()( Q0 X& n% A+ p" S, k8 N0 \; s. g
cyberpi.console.clear()
5 h6 `* m, f; X9 Ycyberpi.led.on(0, 0, 0)# H6 K3 n8 s0 L" d% x! Z& N
cyberpi.set_recognition_url()
" Q8 b M; \) N1 a% pcyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得
" E9 Z8 @' \7 Scyberpi.wifi.connect("WIFI名稱", "WIFI密碼")
0 O2 `! t' z) d: k6 ^. owhile not cyberpi.wifi.is_connect():0 `& C) J! o9 n$ x0 ?! p9 M
pass3 }- `- z5 q4 H t# ]& A0 M
cyberpi.led.on(0,0,255)+ V5 |+ e }0 z# {! u2 b6 D
cyberpi.console.println("WIFI已連接")
# n" f5 N1 c& S: ?6 wcyberpi.console.println("--------------")
$ o5 T* D7 o/ k$ p3 O& pcyberpi.console.println("按下A鍵開始語音辨識")% W( X& P4 z( J: i8 `
while True:; V& ]2 i2 t6 N) \
if cyberpi.controller.is_press('a'):, Z* J4 Q; t$ ?; X, c q
keyboard.press(Key.space)
, e7 N* h/ n6 B4 B; n3 q$ M: J3 x cyberpi.console.clear()) e5 @( o/ W: t4 z6 T3 f3 a" g
cyberpi.led.on(100, 0, 0)8 M7 d+ b/ Y6 c6 o
cyberpi.console.println("開始語音辨識")$ o& X8 o5 L+ M9 c' {
cyberpi.audio.play("switch") }3 d; C3 I' [- P9 i/ E( x
cyberpi.console.println("--------------")
4 F+ o: b9 z/ }# b! M0 i cyberpi.cloud.listen("english", 2)% d& F) p4 U5 G; S( X& A1 ^/ \4 K w
cyberpi.led.on(0, 0, 0)
" E) m2 y( |1 f( k% z5 N say = cyberpi.cloud.listen_result()
$ a% e9 m# P8 p/ \ cyberpi.console.println(say)8 D- Q1 \0 I8 Q y& {
cyberpi.console.println("--------------"); i y( C# S M b7 c" e: F: |8 M2 H
for i in say: j: x, k. C S9 z- @9 d
if i == '':: h: M1 i) Y2 d1 s9 m
keyboard.press(' ')% _4 g3 ]5 Z a% Y4 t: Q& N' [
else:9 E, A& m' @% M7 c6 L: T- T
keyboard.press(str(i))
: N$ c4 @2 L: }% C9 B time.sleep(0.03)
8 x; j" B, s1 v9 Y. E
0 x0 h3 a# g# U/ W$ q: Zmatplotlib音量柱狀圖 . i' o) @1 Z! {( f2 \# ~2 \
import cyberpi: t, H F |6 `; p! F- V
import time. M* w8 n# m3 z9 a$ ?0 a
from matplotlib import pyplot as plt& S# h( `& y- E2 a) N- p/ N6 N
# ]+ S; H( h, o# }2 k8 D
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']
& n/ P D$ ], d+ _. [% K9 fplt.ion()
9 w% \! d3 J1 D9 }' H ]
/ n! `5 f( g# K X1 d+ T& S1 Ywhile True:: p; L. A& Q) d2 T
loud = cyberpi.get_loudness()# v+ z. l2 F& Y( d5 i' e! G
plt.clf()
2 k |: C' S+ c- u% U3 ` plt.xlabel("數據名稱")
1 l$ b- w% `0 v/ E, y plt.ylabel("音量讀值")
- }! {$ w" d5 L- D! a# E# V9 ? y_locator = plt.MultipleLocator(5)
2 Q3 W4 a# X, \1 m, d ax=plt.gca()
$ Y) r& I. p" t! l/ v9 l# y$ g/ j! ` ax.yaxis.set_major_locator(y_locator)0 P3 `/ m' p z8 u
plt.ylim(0,100)
$ w" q2 n/ ?* q plt.bar('音量', loud, align='center',label=f'溫度{loud}')
% s/ T2 @, J: n plt.title('童芯派聲音感測器讀值')7 Z5 C {$ _9 u, [0 F
plt.legend()2 m$ U; N1 R4 x- S
plt.show()) l+ t( Y" Y# N( Y& `7 O
plt.pause(0.01)
" u+ B% E& j' O5 `) J$ M' W+ q8 s7 |% ~, c( K6 F' V
; g* x, M) A# d3 y6 ]! v. cmatplotlib 多圖表顯示
5 f- q0 ?! `4 @" G' s# P- P0 V8 O) H. m+ J) W0 z3 C
from matplotlib import pyplot as plt8 @7 m4 l/ u1 z4 c# n4 T8 L
import time9 `2 f8 B9 E6 f* ?) m6 O& E
import cyberpi0 x- F3 z2 C# F5 J* E6 M
( b3 w8 N, i! J
loud_list = []
( R; F+ O- o7 L. ~8 _5 ?4 kbri_list = []; f, {5 m' X- b, _* F
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體; @, g# S/ V* M5 f
plt.ion()
9 [( s, U( _) R3 Pplt.figure(figsize=(10,10))2 o: q7 R5 u. B a/ ?0 e
plt.figure(1)
) u, M0 e+ F# P! bx_locator = plt.MultipleLocator(5)
3 q- b. |" m. r# _/ z2 l2 Yy_locator = plt.MultipleLocator(5)
! i, s; I2 F* N( L& t8 m+ w; A' ]while True:
6 M- b0 w; X5 m4 | loud = cyberpi.get_loudness()0 R# i4 b1 j2 Z% }% Q! {; _1 A
bri = cyberpi.get_bri(), A: W7 \9 U( R% T
loud_list.append(loud)$ {8 o# I0 H& V: s7 {1 }) J
bri_list.append(bri)
; d- S! X* C' k4 B/ k battery = cyberpi.get_battery(); B0 Q1 c- z' `3 f5 d. t! p
size = [battery, 100-battery]
, P3 l7 |* R$ v: C3 d2 c status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']' J) N) v3 {/ m
ax1 = plt.subplot(221), _; D+ f0 C) Y# z
plt.title('光線折線圖')
) V1 n7 u9 B- T# _0 G* m8 J- [ ax1.plot(bri_list)+ A6 c% v; P) Z# Q* e
ax2 = plt.subplot(222)1 a! T) y M( w, `8 }# p- `6 ] y3 E
plt.title('聲音柱狀圖')% j u1 c9 m& R
ax2.xaxis.set_major_locator(x_locator)& G9 i) }/ ]* ^
ax2.yaxis.set_major_locator(y_locator)7 U% x. F' S' a( O% ~
plt.ylim(0,100)8 m* a5 T! }; d9 E0 l
ax2.bar('sound', loud)
: o" r8 N0 t& A/ T6 a: ~" E: ~* \3 A ax3 = plt.subplot(223)
- ^9 f# }$ `0 a6 M ax3.xaxis.set_major_locator(x_locator)
9 \/ ^' L/ s- k$ k6 E- d1 B ax3.yaxis.set_major_locator(y_locator)! U. F3 \ v2 @/ j( `
plt.xlim(0,100)
. R5 T+ f% U% V) p plt.ylim(0,100)$ `5 K5 t# Q4 F; a, `
plt.title('聲音、音量散點圖')
5 S- {/ ~ ~' L: B! c# u% A/ S! w ax3.scatter(loud_list,bri_list): B: [9 V( b6 B4 \3 N" {1 v3 _
ax4 = plt.subplot(224)
9 d. ]+ l+ T0 @! \ k% i ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})) u; {( B: a0 T* f2 S/ ]: D
plt.title('童芯派電量')% B: z, m7 s: G1 n7 h
plt.pause(0.2)
" ~2 V6 {# }" _) z: E5 E5 D' F plt.clf()5 [: ^" n8 @# W7 C
if cyberpi.controller.is_press('a'):
& T6 H$ w! D* S3 D; s break ~1 }6 z# G8 C) w- u1 d
if len(bri_list) > 500:
6 X! c7 U, Y1 O0 s' B bri_list = []! a; I+ f" T* n k1 S. c# F/ X
loud_list = []
: R/ ?+ L+ j: y9 G' v- w4 s& B4 i. G {
|