本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi
$ p" U/ k0 u% E% @( j1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
3 h; ^7 ^$ o; y
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載 # F" D( @: K- m1 G: `$ N# k
- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
3 z3 m! Y' a0 e6 M) w 2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)- B2 w! ]# G7 r! D9 c1 m! J: s7 [
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
$ H o0 X) N6 b
9 Q2 O' t5 f, S$ V3 O- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
: `; i% O, n/ `- d5 u3 M# O
5 l0 u7 c: d ]1 S' \- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
5 a, K( Q# d& ^6 h Y4 e
( k, F) q9 z }9 P; s) }- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。 F! a$ c9 F/ E+ t7 j# {, n
2 I! {/ z n+ y3 k, r$ w3.童芯派第三方編輯器程式設計準備
\' P! `0 K3 i8 o- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。
6 y- H. @, N' e0 z. W. _ 6 F4 n+ O4 I1 \
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。4 \8 S; ~- o K
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
0 _7 \' o8 ]8 D2 O9 S4 b- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。& j, w* h. o x8 o1 v# q2 y1 a* D4 m
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。
* g6 ]5 {1 c- ~/ }8 |& _
) u" B1 T" l; |5 m0 m& W, c- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。/ P4 H* N; |9 r+ N# T) p+ W D2 b
- F3 F$ j! J% L- E5 {& M/ S9 @; h0 r- C4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。
' w" ]9 u! l1 ^' V" ?5 J5.一些程式設計案例
, d+ n) g& D8 N. n) X5 [) Z童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput ' @) t$ {: |: U
功能介紹:7 E6 h8 g0 ^* q7 g/ q- Q; |! O% z
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。
7 j% O X, h+ ^# k" `! A通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。( J5 A6 t0 J5 v7 V
結合藍牙模組可以實現無線滑鼠的功能。0 ^4 b9 n. r( w. l: Z$ Q
. L, {; C& q% a! e5 I
from pynput.mouse import Button,Controller; j7 P7 [! O( M5 k: ?$ t
import cyberpi
( |, R' Y* [5 B+ v; w! Eimport time ~5 ^5 E- ]6 n) y$ a( `8 o
, ]0 t. t0 H8 e, b3 Q3 p3 kmouse = Controller()
: o3 L+ ` O/ @* N / B' ^' x9 S# C' ]/ C+ B" f) `3 U
while True:
5 H+ c1 k1 }7 n+ w if cyberpi.is_tiltback():
" C' r5 R5 y* K$ x1 | mouse.move(-3, 0)7 r/ i- Y5 L& N2 l
print(mouse.position)6 B, \8 L9 L9 j- h
if cyberpi.is_tiltforward():
, {% f7 Q$ c) i: | mouse.move(3, 0)
) @* p) Y9 \* f& S7 A' ?9 P$ ?' A if cyberpi.is_tiltleft():5 N/ e$ o1 w% I5 V* f I
mouse.move(0, -3)
4 f. I+ V1 f! C. }# L' _ if cyberpi.is_tiltright():! j& @+ A$ `/ X5 m' |
mouse.move(0, 3)
; [2 B6 G& @5 \: L if cyberpi.controller.is_press("b"):
, ~3 }, r1 O/ y8 K* e/ ^, h mouse.press(Button.left)6 I% D, o7 ]/ b
mouse.release(Button.left)
* G6 z7 X/ h' H$ P mouse.press(Button.left)* ~* o4 U0 L8 _8 e* I( L2 d
mouse.release(Button.left)
1 H4 o0 Q! n, E8 X" Y2 u if cyberpi.controller.is_press("a"):
' z# d: |1 D( N- j2 Z9 f mouse.press(Button.right)" D+ h- x" t/ c$ P3 C' M3 r
mouse.release(Button.right)
$ T3 B% r; b6 i8 `1 ~ time.sleep(0.01)& A% {: E# w& ~) I- y$ r" \
3 V' k4 Y: K! ^9 O2 k0 U6 r4 f% A1 k4 q* I
語音打字器 ' r: ~) C, _* U' H+ M% D- V" J8 k% L; z
功能介紹:" k& g& i1 j( x4 R
利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
) t1 A6 _5 p- G2 B6 c- k) G$ l將語音辨識的結果通過pynput在文檔中打出來。3 ]; U0 L1 i4 b+ S( `+ T
該程式目前只能支援英文。* Z% ]0 {- e3 @: I( m" v1 h
5 v+ n# q! k/ _
import cyberpi5 C, q! n9 J5 O. S( L# h8 p
from pynput.keyboard import Key,Controller
1 `! P% X+ t, \4 M: ?" Z6 Nimport time
9 |. R$ ?4 Y5 ? ; ^% f- z A8 H
keyboard = Controller()
1 J3 V7 g4 E9 N* y4 `. xcyberpi.console.clear()
/ F3 N1 M5 J! t- j P% j" a2 g! |cyberpi.led.on(0, 0, 0)
' z9 w5 X& |/ ^cyberpi.set_recognition_url()4 p. Z2 B. R$ h4 g1 l! X* n
cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得
/ E. P/ n3 W2 T* p% [6 B9 ucyberpi.wifi.connect("WIFI名稱", "WIFI密碼")
8 P' S1 i! v" K0 P, w( L5 {while not cyberpi.wifi.is_connect():
0 c9 v2 t; ]# M pass
) Z; U+ ~) @& F' R( @* B) vcyberpi.led.on(0,0,255)
; p; M% N3 y( a! t# P' ucyberpi.console.println("WIFI已連接")
, h' I9 t+ U8 |9 w: ncyberpi.console.println("--------------")5 R/ S }. |: m/ F2 J: W4 M
cyberpi.console.println("按下A鍵開始語音辨識")% v j3 I e7 y- ^% }
while True:0 y% w6 v/ Z& |: \4 f
if cyberpi.controller.is_press('a'):0 H" s$ [ O( B+ w# d" u
keyboard.press(Key.space)3 Q7 T' ]# Q3 K( L/ j
cyberpi.console.clear()
2 o e% e. @3 Z+ [- U cyberpi.led.on(100, 0, 0)
* {9 _ X4 C5 C cyberpi.console.println("開始語音辨識")
- i1 x8 E/ a. X cyberpi.audio.play("switch")
3 q# r h% s. A4 v, e cyberpi.console.println("--------------")- z8 W, m4 F" z( c: i
cyberpi.cloud.listen("english", 2)4 v' W8 e$ V1 {5 ~! v
cyberpi.led.on(0, 0, 0)6 o5 J6 x$ G- {/ D1 F
say = cyberpi.cloud.listen_result(), D* o% x/ R: N% B
cyberpi.console.println(say)
5 [ Q# i' A4 i cyberpi.console.println("--------------")" t2 w* F) A. H1 ]4 C' Q: _
for i in say:
" f: O4 _$ ^* w7 D6 \& e if i == '':
1 g4 b9 O& t# L keyboard.press(' ')
9 N$ C4 H& R5 |) g else:
0 x+ I! X* H9 Y7 f keyboard.press(str(i))
, O! }5 |/ M6 T5 c6 c9 g; O7 ?$ T4 ` time.sleep(0.03)
% m* Z1 E- h( v( @/ r. v _3 E( d [$ O" {9 P+ h
matplotlib音量柱狀圖
7 m% ^' ?# }* ?import cyberpi2 Z2 a3 f0 N* l. g! a4 B" [
import time* _' p0 m4 v7 g/ [2 \* K; L
from matplotlib import pyplot as plt
# E, u7 L( t% l4 w [) z
; d; Q6 ]8 a2 l# rplt.rcParams['font.sans-serif'] =['Microsoft YaHei']
/ Q/ L& O; F) y# M2 l# Oplt.ion()! l" l1 b$ l! ?& z
: b! x+ a' @3 J# b4 x
while True:
; w8 ^3 O) b; T3 { loud = cyberpi.get_loudness()
1 D7 b: T" [+ l7 \ plt.clf()
6 _1 X; M/ _* {. H# J plt.xlabel("數據名稱")
( m7 R! k3 S, g plt.ylabel("音量讀值")0 m' R- [* |* N1 Z# R$ H M/ \
y_locator = plt.MultipleLocator(5)* A: ^& j2 G/ R2 v6 f9 e! Z! o
ax=plt.gca()1 F" K! d8 M/ g" [/ g
ax.yaxis.set_major_locator(y_locator): [5 ?9 O' G" S5 D
plt.ylim(0,100)
8 {2 }$ I: F6 ? plt.bar('音量', loud, align='center',label=f'溫度{loud}')4 w! \9 T( X% l
plt.title('童芯派聲音感測器讀值') m `9 k" n- h2 f, ^
plt.legend()
/ S, K$ Q* I' L, X, K plt.show()& U$ Y0 j( e+ E. R% Z( N& H. T, ^
plt.pause(0.01)9 L2 F6 w: t7 g) o: E# L. S3 `
! `5 l6 ^- w" e* S7 o/ u
6 g& J) H2 [3 Mmatplotlib 多圖表顯示* M0 @( |6 j9 L4 x4 y# h
2 p8 o/ \4 z& a7 V; sfrom matplotlib import pyplot as plt
4 e# }, U& X% \( zimport time
, j: X" }+ P% b; Uimport cyberpi
, c" t7 i) a6 E+ p4 j: s( v: s! ~
; I% e u8 `& v2 }* P; floud_list = []- o8 S- I% ]* U% Z7 v
bri_list = []
3 W, u8 P& l% Zplt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體% i. \' F2 E- q5 ^- p
plt.ion(): u' ?) I6 E7 f( H
plt.figure(figsize=(10,10))
7 \. E! ~" r8 K3 Q8 O# t3 u1 Zplt.figure(1)/ d' G0 Q+ {3 z8 @9 t
x_locator = plt.MultipleLocator(5)
0 I }0 o" H" j; I A2 a2 r& \y_locator = plt.MultipleLocator(5)9 I) t- A: ?5 g, `2 i( j7 @
while True:
; y8 B2 @$ f; |* F& C loud = cyberpi.get_loudness()
, [3 w5 g- C" [6 `% w7 I bri = cyberpi.get_bri()0 P3 v" X" Z) s% O+ }( y3 z( R! B7 @
loud_list.append(loud) {0 W) \( c& t! d( _: Y5 z7 B* I
bri_list.append(bri)
. L9 q" U6 h+ x" ?: ?" |5 U battery = cyberpi.get_battery()) V0 I# y. N2 {
size = [battery, 100-battery]
5 s: n7 e+ f2 g/ x! q9 \3 \ status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']1 P% P C x k
ax1 = plt.subplot(221)+ ?2 B# t8 c7 v0 |
plt.title('光線折線圖')
; g* I; ?2 D7 p0 J W8 k! g8 o4 t( s ax1.plot(bri_list)
" U. v* w+ y9 Y1 r; I: O0 z- v ax2 = plt.subplot(222)
( R) C6 q7 J1 s2 B O! ]- w plt.title('聲音柱狀圖')$ A/ @' P1 f! Y J9 \& ?9 {0 F# b
ax2.xaxis.set_major_locator(x_locator)
* m& i |6 ]# y5 P8 t. n% @' N ax2.yaxis.set_major_locator(y_locator)8 N- Z' u- x" a7 R5 l6 J
plt.ylim(0,100)6 I# s* t! h% h" B
ax2.bar('sound', loud)# i9 B+ `0 S3 L2 {, d
ax3 = plt.subplot(223)8 g0 w4 Q' ]1 B( d0 V# X
ax3.xaxis.set_major_locator(x_locator)) ^; i! M. Z# I- z- a# x6 g" I
ax3.yaxis.set_major_locator(y_locator)
* h4 V! E7 a* S! w% @- F plt.xlim(0,100)! e( ^2 Q: L8 s8 Q0 ?- W( R
plt.ylim(0,100)% }: v8 T, `' z0 a d# O
plt.title('聲音、音量散點圖') I. X1 g) y" W* ?' _/ o# H
ax3.scatter(loud_list,bri_list)1 I. n, ^( c7 a, [ f
ax4 = plt.subplot(224)
! {7 c4 e0 a3 S; |$ z) I, Q ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
1 _* N/ [$ a5 T2 S3 S; d plt.title('童芯派電量')4 n6 A, n; @2 ^+ ~/ r/ F8 b! C& d
plt.pause(0.2)
! I* ?0 V4 {4 m; L plt.clf()& u, q: b. I3 s4 a& Y+ C
if cyberpi.controller.is_press('a'): x; w) X- i; S+ m" o p) v
break
' Q" |' U' J0 D: k7 t* J Q if len(bri_list) > 500:
: w7 M7 n: `' k! T9 _ bri_list = []* d* i5 T$ _5 U6 n9 Y
loud_list = [], ?, g e* D. K! r( d* X1 X+ Z
9 H8 s M* C! o1 x M- R |