本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi , O3 J! G7 ?- M& }0 E
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
% r$ i% N0 N7 c) t% {& X S
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載 ' K( F5 O- w! D2 u+ |
- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
# L% M; g, ]3 U( m5 y! T! _9 A' K 2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)2 c o! L0 L; M
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。" F* X+ G% g* e' U! O
8 C4 V8 h+ L, n @/ V$ f/ }
- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
3 f- P& y4 p' h% q2 \0 J : [& M+ c8 o7 f
- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
; D7 N7 r) | e1 z. r9 o& t9 P 4 H9 |! N/ u/ A, h ?) o
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。
9 K. s$ }+ s: m* `- [, p8 T 5 [" T T3 ^7 i2 w4 v+ s9 B
3.童芯派第三方編輯器程式設計準備
" o4 T2 m1 Z. _) B- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。! D& F* Y' W K# P5 L
0 F+ R1 G4 _, t D, S2 @ L
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。7 a; J7 C/ G% e6 K3 ^ ]9 N Y
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。 1 S0 p( v# D! _
- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。+ Y2 n' p6 U% R1 |8 h; s8 u. g
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。
7 z1 ^+ ]5 w4 y' T
( I5 U, G/ b3 ^# @ C- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。# O; ^2 U( V4 @: h
3 G U& U2 C1 {; M: ]7 \6 k4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。
' ~- D, I& W" R2 I( L0 |) A1 r5.一些程式設計案例
9 r- P% x! J9 `1 f% y童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput
: V. m5 z9 K+ q1 b4 D* K8 a/ L功能介紹:6 w1 p9 L( t8 E, w5 w' c
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。
9 I' S+ Q3 d( ?通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。3 ]2 o. ^. `- Y2 W
結合藍牙模組可以實現無線滑鼠的功能。
( f* }+ Y/ e4 q. d8 r' Q4 Z( z, J3 u5 l- J
from pynput.mouse import Button,Controller
?! U! ]% L9 D1 Bimport cyberpi
2 L1 W1 [" i: r. c% s" ?8 Oimport time% b- V$ @- B/ _" g# a) i6 a
7 C: z8 ?$ c2 e; Fmouse = Controller()( t0 d: r( P! Q, C$ G Y
, ~5 s3 J$ I {
while True:
% ?" J( L3 n. j if cyberpi.is_tiltback():9 e& p1 `% K3 Y3 g9 y
mouse.move(-3, 0)4 e4 Z; M7 W$ l. h2 \
print(mouse.position); X- }+ p+ f( \
if cyberpi.is_tiltforward():
* e* ]3 k7 k" H, w/ ` mouse.move(3, 0)
6 x% D# [ u) j8 j; ? if cyberpi.is_tiltleft():
/ |$ E( ]7 Z5 v mouse.move(0, -3)- I1 K0 P3 x/ G' {7 R) k5 s0 s
if cyberpi.is_tiltright():: a$ ^2 H: Q9 J2 v
mouse.move(0, 3)
- K3 |8 w6 Q! A! r9 T, n if cyberpi.controller.is_press("b"):
: g$ f X) w. |' c mouse.press(Button.left)" N- m4 B# w- b* o" p7 p) p
mouse.release(Button.left)
, J- Z; G& |, C3 c4 J( B mouse.press(Button.left)
: }# c; U5 G" `0 j1 u mouse.release(Button.left)3 g: S; ]3 O. S% P. J; x8 N" ~; a
if cyberpi.controller.is_press("a"):* e! t7 a& J8 n0 h7 U
mouse.press(Button.right)( t' \6 \# T* d6 L+ W" g! V/ w2 L* G6 x
mouse.release(Button.right)* A/ X3 _- w" j' I
time.sleep(0.01)) K# m5 I+ Y) _! S- z
. x. D/ `% r* _" i2 J6 E4 U* i
! X; t8 a+ J3 Y6 z/ V
語音打字器 ; b) c1 |; ]( o5 |+ p
功能介紹:
2 j9 Y+ p* F" P3 {- p利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。, p8 _# Z. y; ^
將語音辨識的結果通過pynput在文檔中打出來。
7 X3 O* K. N( }- {) [. r該程式目前只能支援英文。1 w5 `! R$ X$ F4 P2 _* s8 U
( s E: W A U, [" Yimport cyberpi' M- l6 ]! S* _9 d9 v6 {
from pynput.keyboard import Key,Controller
5 k% I* A$ Q% E2 Y% d d2 nimport time
. d- m, _/ Y$ J) P
8 ?8 p) h7 g. `6 V: ?keyboard = Controller()
; G. G7 ^, N E: B: ?) I5 V2 T+ Tcyberpi.console.clear()
4 R8 X/ n: m P' A& F2 Pcyberpi.led.on(0, 0, 0)
+ \% U+ M% G# @; W- R% D! X( l; lcyberpi.set_recognition_url()
' M0 O1 A- k( M, y, c/ \ qcyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得
% ]+ g; _5 t" L, g/ Xcyberpi.wifi.connect("WIFI名稱", "WIFI密碼")
! y: _5 P4 r" \: S1 s& Z2 y2 D. Uwhile not cyberpi.wifi.is_connect():
0 r/ f; H/ H$ ]' I$ [: u f f9 J pass
7 q4 F8 Z1 Z1 \. ?. v0 l4 J \cyberpi.led.on(0,0,255)$ h( k7 M2 @, W0 b- Q
cyberpi.console.println("WIFI已連接")6 G3 x) y8 X$ G6 u8 Q' g- ~# A, I
cyberpi.console.println("--------------")! C3 J! X: c7 A
cyberpi.console.println("按下A鍵開始語音辨識")1 n0 ?, Z, h6 d
while True:0 s4 O) t# _/ @/ g) z9 ]. P
if cyberpi.controller.is_press('a'):- A* h: L5 B' `2 L* g, Z/ N7 R
keyboard.press(Key.space)
# k) v! Z* t& d* O6 _ cyberpi.console.clear()/ t% ^* } T* a" k1 _# C1 Q' r
cyberpi.led.on(100, 0, 0)1 A K. n* U% T, i% B& X/ s( {
cyberpi.console.println("開始語音辨識")
! X! u' E! Y$ R& u# z: _ cyberpi.audio.play("switch")
- L% U4 U l( I2 V( k) r cyberpi.console.println("--------------")
! } |6 @; H- T! x/ V cyberpi.cloud.listen("english", 2)6 Z7 c+ T: _; g0 D- J: A& U
cyberpi.led.on(0, 0, 0). b4 ]3 t+ S9 \& a" |, J
say = cyberpi.cloud.listen_result()
* J: ?( ~6 w+ m4 V1 M! z cyberpi.console.println(say)
. T2 f) }, d2 W cyberpi.console.println("--------------")
; C1 ~/ y7 J: q1 u$ W! v# F4 Z for i in say:- @3 \ V6 Y2 y/ I: _: |/ g7 ^4 A
if i == '':
& L; z4 K6 }7 S) l M keyboard.press(' ')
2 L" c% @* C8 f9 b8 U0 m else:
3 o" G+ T r6 v. Z keyboard.press(str(i))( ? e5 c; r: R4 I# Q5 R( e
time.sleep(0.03): d/ }4 m+ o) @% |' I; A
7 y& Z9 u/ ^5 q" X8 ~' a1 x; [matplotlib音量柱狀圖 3 ]6 l- V0 J- s4 X
import cyberpi
9 p* U8 w' u. w- q, ^. W5 N! ^import time; ?. ~# ^2 C/ m# S6 P* h
from matplotlib import pyplot as plt- i K. ?: c* T: i
5 n' s. t% n1 {8 d, y) b& \. h
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']3 }% \& d: l3 h5 d0 V! F8 Z
plt.ion()
1 c% ^6 }' F! i7 S, a/ s
2 C9 Y% H d$ |6 o6 T5 ~- N3 Fwhile True:8 [3 ~4 _5 r2 p/ z( Q
loud = cyberpi.get_loudness()" [5 s( N' _- n! W1 u2 ]8 U7 w
plt.clf()+ o1 m* T" \6 x4 Z* P( a
plt.xlabel("數據名稱")
& l2 |! M6 G# ]5 I/ i/ D plt.ylabel("音量讀值")
' r& w7 m0 f- ]6 ~ y_locator = plt.MultipleLocator(5)! v/ L' u" ?. q' U: L% D
ax=plt.gca()
. G4 l _& n) b# H; M( Q5 [% s ax.yaxis.set_major_locator(y_locator)
9 T2 G2 b4 A/ O J* I7 @7 G) ] plt.ylim(0,100)& @. C, u/ O- [$ a6 |$ F; a P
plt.bar('音量', loud, align='center',label=f'溫度{loud}')
0 S+ k/ d4 |+ T plt.title('童芯派聲音感測器讀值')
' }( j6 {, X( A( M9 q, X- o plt.legend(); ^/ ?) g. z! Y O/ u
plt.show()' p' c/ U( @9 A! `$ w
plt.pause(0.01)
8 E( S+ T+ |8 o( x1 g. W- L$ P1 _9 s; a. U9 h2 F
E/ |" G1 u: m+ Qmatplotlib 多圖表顯示4 o; R Z+ w( _! H% Q& o
; f9 p& v ^: o& Z/ n+ Q* c4 r; Qfrom matplotlib import pyplot as plt' F/ a: @+ R) \# s
import time# [, b8 _0 ~$ }- Z8 H2 M
import cyberpi
% J& H# T. P% w2 @3 @' l0 h & z5 ?7 |/ E7 Z$ p. N- P5 I
loud_list = []( Z# S! a, ?& K ?
bri_list = []- {" v5 k. V+ Y
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體% }" Q4 n1 o4 L7 k1 G3 q% b$ {
plt.ion()
% N' Q9 H7 C" k9 p$ B5 h0 Dplt.figure(figsize=(10,10))+ a8 B) d4 m6 f( U: r" D! a
plt.figure(1)
! B7 X7 R0 s% c! Zx_locator = plt.MultipleLocator(5)/ f3 ?% z- n- e2 H7 X1 H6 K, ^$ u; h: V
y_locator = plt.MultipleLocator(5)5 o/ K$ q3 ]/ ]8 t, v
while True:" b8 w4 [ S# V4 b e+ g- E
loud = cyberpi.get_loudness()$ H8 h3 ~' g2 g& i% J
bri = cyberpi.get_bri()
3 Z2 }. D5 R# E! ?' H0 [( j8 k2 ` loud_list.append(loud)3 E5 N3 W9 x& v( {4 @$ x
bri_list.append(bri)
& R$ R" \0 z5 f& V battery = cyberpi.get_battery()# j6 @! Y2 W( `. l
size = [battery, 100-battery]' v$ d# `9 K& Z! f
status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']- a X. P0 X' c9 d% V6 s, {
ax1 = plt.subplot(221)1 a/ W- f- m5 W# }1 t0 i0 x
plt.title('光線折線圖')! N0 m4 r/ i; M5 B2 N- D
ax1.plot(bri_list)( q4 V ^4 J% e" R, l
ax2 = plt.subplot(222)
7 R; _2 q+ W# Z7 Q plt.title('聲音柱狀圖')
; Y( J$ q3 G) c# j# w7 n ax2.xaxis.set_major_locator(x_locator)- j) c! F: h+ j1 `
ax2.yaxis.set_major_locator(y_locator)* Z5 w3 D& _( N- [
plt.ylim(0,100)9 _0 d/ G+ ]3 y6 `; W" ]
ax2.bar('sound', loud)2 Q; l# V8 V* w" | F2 ^
ax3 = plt.subplot(223)
6 { V8 o6 n6 | ax3.xaxis.set_major_locator(x_locator)
7 x' c5 w9 k; f1 d- S$ f ax3.yaxis.set_major_locator(y_locator)3 u! i: N* y1 |/ y; |0 U" Y
plt.xlim(0,100)
4 [. I$ D R( ^ plt.ylim(0,100)) C5 S/ F' d/ K7 t
plt.title('聲音、音量散點圖')# N. W t" u3 H' X+ p2 ~. I3 [
ax3.scatter(loud_list,bri_list)- z6 p2 X3 u% ]
ax4 = plt.subplot(224)* y" H1 P# t' t
ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})3 y7 u% }; ^! K
plt.title('童芯派電量')
! Z( ^$ D1 B+ N% V7 x plt.pause(0.2)3 v: v4 C& K2 i: P R: T8 O4 S, L- F
plt.clf()( X6 E1 j- i; Z1 d5 S: _6 ]
if cyberpi.controller.is_press('a'):
# Z8 ]. U4 R3 o- w/ _1 [5 o break
& Y1 i2 s: X/ i if len(bri_list) > 500:, ]/ M$ f/ \+ Y) X7 P
bri_list = []% _: [2 w) x2 P# j6 a- i9 x7 T }6 {
loud_list = []. b2 y/ W- i/ ^1 I3 m6 M
9 C5 j1 V- \ m, _7 W9 } |