本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi
1 |+ o* G( n& M% K$ e+ A1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。% U' I$ F' j! |( n; ~/ u) u
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載
1 }8 N) L" s. w, E4 t$ U& b- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。" {9 W. W; N7 n6 t5 b. {: [6 t
2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
9 l: v' c1 G5 X- y/ S2 ]
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。" s! f9 a+ @/ |' [( i9 I( _
& p4 T' a0 h7 a3 p/ N
- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)) o, g, q! [* [; }
: T. |- X0 N: m) l7 O$ `- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。 X: q( i- H/ r
9 h; L0 J: p% F, ?! `6 I
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。! Y9 @8 Z2 U4 |( A* e
5 O4 l7 `% D/ X! {2 ?: L+ _- V3.童芯派第三方編輯器程式設計準備
! T7 x7 ^+ K6 D/ z8 J0 v- ^- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。( {+ w4 o& q+ J* o' k" U+ X9 C
1 i; c1 T0 m" x) r6 T2 W2 t7 b- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。9 T3 B% _% i( S1 \
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。 s; w& }+ U" L/ f
- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。: ]$ j( ^1 K4 p+ C& W
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 6 S) E( H3 i# U* ]# L$ r
& a3 |- R/ k) l- V
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。
6 j+ [( t z2 F; ?
8 V4 G/ Q9 \: K7 _- \6 S: a/ ~- K4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。
/ H1 M# n& Q1 a4 |; ~- X. D9 N: I5.一些程式設計案例" Y. A% `8 h8 |0 o1 A. l
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput 7 A6 S" E2 u; L0 V% @$ }+ V! A" l8 c
功能介紹:! t/ Y4 ^5 `3 [9 F5 x
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。( e. A( ^2 U! H) v* N
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。
+ h3 `/ @' X7 H, F% z1 ?4 H3 l: ^結合藍牙模組可以實現無線滑鼠的功能。
' F6 f# K8 l8 v4 ~& D
1 \& t" m4 Z1 ^- Bfrom pynput.mouse import Button,Controller: i+ a$ W) \ m- O
import cyberpi
0 O- m' [# c& W" i& U6 I4 m, pimport time+ Q; v5 }3 [. q3 i4 b
: ^" Q' Z+ @; d5 b
mouse = Controller()
- w* X0 L+ C8 ]6 U ], e P. G! A . J9 f0 u P* O8 ^$ k9 L) m
while True:
* E( D4 w) {' {- p if cyberpi.is_tiltback():+ f2 S: A( h+ n
mouse.move(-3, 0). [' v" a1 s' ~0 v8 \( g7 a2 o
print(mouse.position)
% @1 ~0 C2 ^/ W: K6 @ if cyberpi.is_tiltforward():. c8 I; \; b* T+ d( J0 `
mouse.move(3, 0)4 \& f' F2 O& ]; [1 t
if cyberpi.is_tiltleft():
6 p. C, @) F9 C. ]; i' ] mouse.move(0, -3)/ `( k. O6 A. u2 z: R
if cyberpi.is_tiltright():
0 p. `" b# a' x6 o& w0 Y6 z mouse.move(0, 3)9 a0 A, u/ C# |' F, M1 E$ U% Q
if cyberpi.controller.is_press("b"):0 B$ z, A; @$ r
mouse.press(Button.left)/ a, e2 i- e% F
mouse.release(Button.left)
3 |# u5 y5 ~7 t0 b+ l, @8 o- N& _ mouse.press(Button.left)# C( i4 e: L5 |9 S l6 u
mouse.release(Button.left)4 V- D3 K2 n- t1 M
if cyberpi.controller.is_press("a"):$ J$ M' l7 ~6 F$ u" q- P9 J8 S
mouse.press(Button.right)
; l$ g* n- U1 u4 d0 M mouse.release(Button.right)
3 a% j, S2 i3 \8 g$ h9 x time.sleep(0.01)9 r+ \+ Q. P* W. K& w3 h) B
* c; v- ?6 z: _( P" L, a' T/ P* q H
語音打字器
8 \- X2 n5 e o4 L+ W% L功能介紹:
' @9 A/ }" f8 b9 F2 g利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。3 u" o6 _6 t9 D( r" h' P( U0 {
將語音辨識的結果通過pynput在文檔中打出來。
! U, {: G* U! i- O3 L該程式目前只能支援英文。
k6 \( d. o, r7 u) w& b& z0 s6 e. ~& D: l' e
import cyberpi
8 e1 D" |3 V4 ?) q7 ]from pynput.keyboard import Key,Controller
' N' K* T' \" k# O9 V# ?' ^import time) w; }9 p* U3 o0 o$ z# n
1 h. ?3 A# w A5 m4 T& @keyboard = Controller()( [0 U) Z; S9 b
cyberpi.console.clear()
M- ]; ~, f+ [, m) ?5 W1 S1 ^cyberpi.led.on(0, 0, 0)/ ]$ J2 x( Z9 Q, \8 u) [/ N& `
cyberpi.set_recognition_url()
3 H* _5 w: D) V+ l' {8 Icyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得) J& A, L. _2 v N3 |4 Z2 [
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼")
% \1 G+ P w" J' C3 ^( z8 n2 Owhile not cyberpi.wifi.is_connect():5 |3 j2 [ o( h; f
pass
) o; g: T/ h9 G5 K1 t" kcyberpi.led.on(0,0,255)5 ]) h. N7 e0 t, O
cyberpi.console.println("WIFI已連接")7 @* C% c# H8 [9 `5 ], g
cyberpi.console.println("--------------")+ d: T# I- e& r- K! r0 r
cyberpi.console.println("按下A鍵開始語音辨識")! T+ x h+ U6 [( \: V |
while True:
4 ]" T0 u- X- u6 R. R9 |0 [' p- Z if cyberpi.controller.is_press('a'):
+ E* a3 y7 W! ~ n keyboard.press(Key.space)
- _& R. _& B6 ]2 A cyberpi.console.clear()& L; p; v+ N& Q# D
cyberpi.led.on(100, 0, 0)8 g6 n: V% P b, x
cyberpi.console.println("開始語音辨識"). \; n. i+ g: l& c
cyberpi.audio.play("switch")" E/ a% a- R5 p+ \8 M" D/ ~0 x) {
cyberpi.console.println("--------------")$ s+ R, c& K$ u& p& i" u$ W8 j
cyberpi.cloud.listen("english", 2)! ` k8 Y* T+ U& u
cyberpi.led.on(0, 0, 0): p% M" u% p9 r2 G
say = cyberpi.cloud.listen_result()
8 n8 z v! S3 Y2 e, U cyberpi.console.println(say)
! i' A; \$ w# w9 m+ Z cyberpi.console.println("--------------"); W4 }+ c. _, e/ W% g
for i in say:2 U- f- @/ n# B* v" h3 I. C
if i == '':6 F. m# r& n/ r
keyboard.press(' ')
; a+ \# N# N; I# Q4 M2 I else:& J5 F; D* g) |7 B) }8 w
keyboard.press(str(i))
7 U; O+ J# x" C time.sleep(0.03)
% I" E4 G% \: Q l7 D5 n! i. |- o: ]7 }) v" H( X! Y5 ? o2 c
matplotlib音量柱狀圖 3 U1 A- o2 Z( p5 b
import cyberpi' B; z/ K; |: y/ \
import time
" s+ k U) {9 ^2 B1 |& t- wfrom matplotlib import pyplot as plt
$ W" p% o* |* x2 s
" n( G" }7 E2 v6 p) hplt.rcParams['font.sans-serif'] =['Microsoft YaHei']6 @( D& e( B% h: \7 D# ~1 L) H
plt.ion()+ |( I2 s4 ^ u ]' r, s
7 M, ]% u p- y8 Zwhile True:% e \) p! n- e9 a, }7 _1 N
loud = cyberpi.get_loudness()
/ t$ \" P* E* M plt.clf()
* |/ E' \8 b4 p! K9 b! @ plt.xlabel("數據名稱")' ^0 H6 E2 f/ {+ Q4 z
plt.ylabel("音量讀值")3 P% ]/ I" n) j5 [) [4 ^
y_locator = plt.MultipleLocator(5)0 p4 {9 X5 B3 A! ~, v
ax=plt.gca()
: t4 k. Y* C# | R, H, `6 w ax.yaxis.set_major_locator(y_locator)
: S9 j3 v9 {$ W0 ~' j2 C. f plt.ylim(0,100)
6 X7 S# V( w) L plt.bar('音量', loud, align='center',label=f'溫度{loud}')0 p# E9 B" L* t/ V* n
plt.title('童芯派聲音感測器讀值')6 E7 [4 V- V" u+ ?0 g2 o& t$ R- `
plt.legend(). F5 c& ~6 h: {* G& C; j+ W
plt.show()& m1 `" [& Y7 U6 r& v7 G
plt.pause(0.01)+ f9 D3 d% N1 x5 H2 _$ H, ^
1 U) k( R4 E6 {- |, b* j
' ]" `0 d8 h( K" M! K
matplotlib 多圖表顯示
6 E0 Z1 |( B/ m7 w4 f
: D# H+ ^. \9 M/ a2 l9 wfrom matplotlib import pyplot as plt
6 J0 b0 N: k! ?import time' r' Q- @7 m9 o% d; _/ f) |7 u
import cyberpi1 G& y6 C2 U) U
+ V; P0 C( R5 Eloud_list = []* L& u- P+ S# m- n" x' ]
bri_list = []
4 d( e; a% V+ O+ G9 T ~plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體
0 L9 Y% Z1 k0 }% [- H: ?: n! wplt.ion()
$ N1 v4 f: q# o; o- Jplt.figure(figsize=(10,10))" l( K5 d6 c i) u
plt.figure(1)
& x) ?- o9 w4 V: k- Ix_locator = plt.MultipleLocator(5)
3 o. t) ~3 w$ q/ ty_locator = plt.MultipleLocator(5)$ r! t; Q7 y" H7 i. O- \
while True:+ j7 \ ^" F" K: Y9 ^8 t
loud = cyberpi.get_loudness()7 w; n9 \3 k$ _
bri = cyberpi.get_bri()
' I( z: j* I |) g c8 F loud_list.append(loud)0 n1 u0 K% ]4 c8 [9 w) m
bri_list.append(bri)
+ w: _2 R; h/ e+ T8 i battery = cyberpi.get_battery()
4 Y) g2 n1 I! | size = [battery, 100-battery]
/ L* u6 }' X; D# G status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']
) n# _; U$ s& n, s5 c2 o ax1 = plt.subplot(221)) U9 x; `/ n; D- D" _# W& I" E$ Q% x: n
plt.title('光線折線圖')8 b& }# x" t/ I" X3 k0 ^
ax1.plot(bri_list)/ B% O( _3 {% L4 u/ g! S5 ^
ax2 = plt.subplot(222)
! `5 j0 w1 H2 d! B. m plt.title('聲音柱狀圖')
! N+ I5 t: y% M ^ ax2.xaxis.set_major_locator(x_locator)& [2 x/ `( B$ t) l! V4 {
ax2.yaxis.set_major_locator(y_locator); e+ ~/ b7 l. E% P( b( k( c+ r
plt.ylim(0,100)
9 Y6 l5 `( k4 R6 A, \ ax2.bar('sound', loud)
! S9 |3 Q8 ^$ \ ax3 = plt.subplot(223)3 b$ M5 N [' L o
ax3.xaxis.set_major_locator(x_locator)
7 a2 b! {- l; j+ {% j ax3.yaxis.set_major_locator(y_locator)9 P& z! q) g( c* {3 ]
plt.xlim(0,100)
: }5 n/ q! m; p3 A plt.ylim(0,100)
: e( H# @" i2 o m3 D plt.title('聲音、音量散點圖')( `: v3 Z$ a, z* V: j
ax3.scatter(loud_list,bri_list)% h2 ?4 C: B) Z3 E3 p
ax4 = plt.subplot(224)$ O: |7 n4 a8 B- }
ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})& D5 F1 q( n' r1 U7 m6 X
plt.title('童芯派電量'): E: t2 i1 q) C
plt.pause(0.2) G2 [: _9 e% h6 t; k4 m
plt.clf()
* U) Y# p8 l2 v+ r if cyberpi.controller.is_press('a'):6 }0 z# Q/ i0 P) N, \. `
break* c5 k! w: e+ F; h+ E. j
if len(bri_list) > 500:
. |* Y4 r% m( h3 }- | bri_list = []& d. e# Z7 e. F
loud_list = []8 b, @) u% x( N. t9 o! m
& E$ [$ [, J @2 u3 _ |