本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi ' b2 P+ g, m2 A5 T! e
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
5 B; R$ T: M! Y% M: M
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載
! J! Q# l9 L6 ~" {1 q4 f% q6 ^6 \- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。# n3 G" I$ ^: a4 `
2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
, Z3 ^5 C9 [! x9 G" K1 V3 m' i6 j& ]
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。% d1 Z. z* b( k( r( P
4 @$ x0 }( F& e( k3 r, t& @4 O- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟), R1 W! |7 x5 Z, Z
8 }5 N. Y' _: M# d+ y- O# K
- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
8 o6 B. ?# q' @+ T & Z3 u8 X4 k( [
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。
- R2 A: o, d$ A2 k* q+ v0 Q/ Z
6 @2 w. t9 a$ U7 ]" E% O( N- G3.童芯派第三方編輯器程式設計準備
5 p2 ^8 n( ^ V4 k6 Q- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。; A0 P/ v. V& V( ?6 Y) T$ t$ D- [
4 G8 u1 X( q! V0 T- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。+ ` o. q0 V& o+ h; G
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
) q8 l2 K3 }' _7 M; U- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。# f8 d) v; l% R6 o( x
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。
' E J$ i3 n+ Y* e& C
/ g' L- v% X7 A6 o) F* V- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。) C4 P4 I' ~; x6 [ c+ C6 b! R
/ p; }- ]# X S4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 1 o) L8 Y7 l; Y& ?( o$ c
5.一些程式設計案例
2 c: o# P2 }/ Y# a7 w; d童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput
+ }: {, c% U( j功能介紹:; s. a7 a7 @8 j% n" l6 q* q
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。! m. ^1 O8 }" W
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。/ N7 V4 c" N1 P; q3 V
結合藍牙模組可以實現無線滑鼠的功能。! V' K2 W0 o" k1 `( D" f
- J4 G6 z4 `8 T& _" q/ L
from pynput.mouse import Button,Controller: D2 M6 {% A8 E
import cyberpi* X; S5 v# i+ f6 x+ x
import time
1 M. \1 x2 v3 z
( D9 ^8 y7 i! U2 Xmouse = Controller()
8 M0 j; I) K! Z1 N) N* m
9 K: i6 ~' I# w0 xwhile True:- [) G2 B- m% ?: G' |
if cyberpi.is_tiltback():
# \9 R8 F3 u @' T0 d5 s mouse.move(-3, 0)
/ {, k' D6 y" Y6 V print(mouse.position)
6 \$ ^6 U; f: y. @" g7 R' Z) u; H if cyberpi.is_tiltforward():$ |1 J) u% S! |# G: K- s
mouse.move(3, 0)
) v, a4 g3 v. Z0 W if cyberpi.is_tiltleft():
6 z* l$ Q. Z# m! H$ u1 x mouse.move(0, -3)" |1 T4 C7 R7 I
if cyberpi.is_tiltright():
1 t- w$ Q5 E8 i: @ mouse.move(0, 3)) Z d) I. y/ R
if cyberpi.controller.is_press("b"):
5 c! X0 `6 E8 ]9 z: a. d; N mouse.press(Button.left)
1 h1 u4 f! R& {" C mouse.release(Button.left): b9 t1 l1 o; ` a6 ~7 H A6 n; c
mouse.press(Button.left)
% D4 Y. s- A! m8 M$ d( t y! Q mouse.release(Button.left)
0 J2 o& A; |, O if cyberpi.controller.is_press("a"):
3 J8 a) M# r8 {* L/ j1 v8 h m) s6 e mouse.press(Button.right)) J/ d7 |) t$ a( L
mouse.release(Button.right)
4 x( @6 k) M3 m$ \- q time.sleep(0.01)4 R- `3 G: [ `+ r1 ?7 U/ u1 B
( s: [9 `; O7 ]9 k5 [8 |. U
) w: r8 N* b5 ]' r6 w語音打字器
; ~- J' p' }8 Y9 x7 f F2 E功能介紹:; Y) }/ |) o; R- w
利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。1 k* \# w0 E2 Z% @2 o
將語音辨識的結果通過pynput在文檔中打出來。1 p" ]3 m C+ B
該程式目前只能支援英文。
# y, `+ M7 K7 t& R
: ^8 u8 D: Y1 K3 f" ximport cyberpi' [. _" d2 `6 B7 V3 _* e" s, I: v
from pynput.keyboard import Key,Controller
" l4 P- n+ J2 H Oimport time
$ o9 t( p8 |4 z# ?+ b# q' A s, l" s; V5 L: Z
keyboard = Controller()
. }/ X% b1 n. s0 A$ zcyberpi.console.clear()9 m+ k5 Y: j2 f# I
cyberpi.led.on(0, 0, 0)
% Z7 {: K% s7 b2 @cyberpi.set_recognition_url()( ?9 }/ u% j6 f
cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得
3 Q1 @- k4 x" M+ Kcyberpi.wifi.connect("WIFI名稱", "WIFI密碼")) J r$ L+ A/ T( D8 p5 @
while not cyberpi.wifi.is_connect():4 `6 |% d. e& c$ \
pass
* c. q& x( V) j o/ j% L( ?cyberpi.led.on(0,0,255)( B+ E% }# K7 E7 i! G$ D
cyberpi.console.println("WIFI已連接")
% P$ {6 i5 r- d5 D$ Ncyberpi.console.println("--------------")2 P3 @8 ] ?, C1 ?
cyberpi.console.println("按下A鍵開始語音辨識")( t- }+ x/ j7 g% n
while True:
/ H9 w' P1 b. @& N if cyberpi.controller.is_press('a'):" m+ j! h0 h" s0 E; ^
keyboard.press(Key.space)6 h5 d' s$ g4 Q, P; z& a
cyberpi.console.clear()! N/ r/ ~* S# I$ a: a
cyberpi.led.on(100, 0, 0)- Q6 N# ]! j) F+ K$ {9 _
cyberpi.console.println("開始語音辨識")
8 C: `6 j/ Y6 f: _. v* Z cyberpi.audio.play("switch")
3 }1 z% F1 t' Z& u cyberpi.console.println("--------------")
: K/ h% W2 j/ {" _5 K cyberpi.cloud.listen("english", 2). Y0 E$ w: |: o* J9 _) H3 o
cyberpi.led.on(0, 0, 0): h' l1 l- s% r- e3 o+ M9 R
say = cyberpi.cloud.listen_result()
6 ^" X9 h' x, G9 l0 P. S cyberpi.console.println(say)+ F5 v! }) s4 w: [6 j
cyberpi.console.println("--------------")1 H( t0 N+ H6 l5 X, H
for i in say:8 Q5 e6 ^* h6 ^0 J5 a' b) i. o
if i == '':- d8 { t0 \. T1 D
keyboard.press(' ')9 x: ^* N/ ^9 ~1 n, u' @
else:
* [' K4 N+ g7 C) E+ U m% J keyboard.press(str(i)). T% @: x: r! e; o2 s: u
time.sleep(0.03)& y' n2 ~; @: n I. H
) U- n* U: o- `5 ]matplotlib音量柱狀圖
2 j. ] ^4 g5 c3 |import cyberpi2 f. }! W% L& g5 R) S7 n1 b
import time
% i& N; x3 m5 E0 tfrom matplotlib import pyplot as plt
p N( h }0 L5 K3 }9 p
1 u" `% k( q4 ~+ D5 A6 t F) \' ~/ ?! Kplt.rcParams['font.sans-serif'] =['Microsoft YaHei']
1 Z* q* E8 R4 F7 Kplt.ion()
/ g8 m& r& l. L" a( \1 |
) F, R* V9 q, t' B0 ]3 g; o+ hwhile True:# K. V, T/ i4 r2 n* I
loud = cyberpi.get_loudness()0 f0 M1 f- g/ o. Y2 v1 N
plt.clf()
! |! @* R. h: i1 H6 [ plt.xlabel("數據名稱")
4 c* @; [0 `/ I plt.ylabel("音量讀值")5 k, k& c' w* Q$ y/ _. p C
y_locator = plt.MultipleLocator(5)
: P- ?( a6 b: ~$ d! T, } ax=plt.gca()
9 O/ {0 A* L" S% [ ax.yaxis.set_major_locator(y_locator)
8 T$ M6 ~6 J& S3 v8 b" a) r plt.ylim(0,100)
. U- J/ g- w3 x4 u$ {0 ~3 P plt.bar('音量', loud, align='center',label=f'溫度{loud}')
' ?6 H& K+ w. L5 Z3 A" I& L plt.title('童芯派聲音感測器讀值')
: D: n* @/ ^( U; J5 g plt.legend()
2 {* a+ S4 I6 h; J plt.show()
3 d& M/ D0 a8 g, D" U plt.pause(0.01)
2 i( Q* c3 r! v6 x# w9 {3 c2 v: A0 ~9 t" N0 w/ u5 }2 J; G& z
! d' n1 ?; ?" e! q# `
matplotlib 多圖表顯示
w. d& L0 O& `- ~5 E
. x N. w2 \% E! N5 c& N+ ?) hfrom matplotlib import pyplot as plt
! ^ r7 H, P7 b; r1 B6 A2 himport time
$ B; m+ T# t& K4 ?7 c" Qimport cyberpi
1 B9 |" J8 S& ^# B$ Z6 Z0 j6 ^7 ]
9 [: e( r1 ]0 H8 T% ploud_list = []* {0 _7 h6 D( e) |
bri_list = [] W0 q- a( L/ {# U/ t/ T
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體) J6 C5 ^2 E5 }9 D3 v1 }, s& a7 [( b
plt.ion()4 W4 z7 @0 @8 M8 u7 _3 f# M5 J; c
plt.figure(figsize=(10,10))1 W/ B. e- N* m
plt.figure(1)
3 `2 F1 y9 V6 o: @0 f Yx_locator = plt.MultipleLocator(5); n/ A. T, M7 k f7 l5 k
y_locator = plt.MultipleLocator(5)
. l- N3 x; F. H Q; y; Awhile True:2 X G1 \' v4 ?7 `3 u& |
loud = cyberpi.get_loudness(), a: e5 o5 c* M9 b) k
bri = cyberpi.get_bri()
$ V- U# t6 `9 ?+ ? loud_list.append(loud)
+ M% F1 @" V% T- j- ^ bri_list.append(bri)
8 \0 R9 S. D! S: P# _; | battery = cyberpi.get_battery()
6 N1 m# a8 S+ G3 E3 |0 x size = [battery, 100-battery]
3 d2 X+ g g C* T6 c# [ status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']
# ^$ s4 m* g- _1 A$ n6 p ax1 = plt.subplot(221)/ N# m2 p1 d. ~; M6 F* ~- l" f/ }
plt.title('光線折線圖')& u2 l! X# A) G
ax1.plot(bri_list)6 M2 H; y1 O g
ax2 = plt.subplot(222)( I' f4 K, x$ p* Z+ F) }
plt.title('聲音柱狀圖')* i3 W1 k6 P& P2 m7 O9 S' {7 d8 P
ax2.xaxis.set_major_locator(x_locator)
9 p+ N/ t, ]8 p8 [3 ~ ax2.yaxis.set_major_locator(y_locator)
: U2 s& R7 |& X1 ^: {9 y! D plt.ylim(0,100)
7 {* U O" b: y1 ]2 w' T ax2.bar('sound', loud)
' l0 c) j, c6 }2 v ax3 = plt.subplot(223)4 D7 E1 r9 X& A7 g, o
ax3.xaxis.set_major_locator(x_locator)
0 E* O+ F6 s" _1 q# u* L! Y ax3.yaxis.set_major_locator(y_locator)
5 f8 l. ^% L+ a plt.xlim(0,100)2 |( B$ z7 `' h. W( M
plt.ylim(0,100). o$ A, r& x9 ?
plt.title('聲音、音量散點圖')
4 e6 U- M+ B5 o' e; F1 S! R ax3.scatter(loud_list,bri_list)! G; R. @/ L/ n0 Z( z/ e, q# j
ax4 = plt.subplot(224) v4 _8 J! v/ s' |, T
ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
$ v9 ^" C5 ~8 `6 H$ o plt.title('童芯派電量'); M5 r3 J4 m) H# ^
plt.pause(0.2)
! y1 s# p& x, s R+ d3 R: u plt.clf(). W7 V, Q9 [" J: X; ]7 f! b6 r" l% L
if cyberpi.controller.is_press('a'):
3 o. d6 u' u4 @9 d break+ \( p! }1 |) Q: U% w0 @; {
if len(bri_list) > 500:
( ^4 v Y0 U- Q2 l: R% x V bri_list = [], ]7 c1 x& [6 q5 B! D
loud_list = []) l# N6 B$ t( J) `7 T
4 u) o! I' b' G1 a } |