本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi 4 d, r! H6 @0 z: D/ K
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。4 V$ }2 M( G- T) Y& \: C, N& P
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載
! \3 m; p" ^' V! W, `' l) P- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。8 F4 _5 F/ m, b2 w. W. C
2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
/ t: q( }% I( h' I y1 z5 B
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
1 ^0 F& U! D B) J2 x" L' p
% V( S" T7 |$ r" W6 ?: [- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
& Q' g7 n! @6 p& W: x 9 _" s3 U0 {% w- g b
- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
& H$ i4 t w% h/ d . f$ N# i* g) m
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。, U& X5 d2 X7 _# K) \9 c% n% n
0 O1 A$ b4 ^9 ]$ i- j: J% u& X3.童芯派第三方編輯器程式設計準備
1 q$ E% n5 m; X; \0 O. F- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。
& v5 `" d# ]9 C# }; b K . A$ L. D# u5 _0 h5 ^; m4 n2 c6 f$ s
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。
& N5 J$ u$ v/ `$ V0 d# V/ v- V
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。 $ |% c. s2 e) f& K# B$ G, M0 C" U
- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。% m( Q& A5 o; @$ A( m
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 5 a+ g/ v4 {4 _( l+ J0 P
& l( h" x+ y. C' C
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。+ p8 n7 t1 c7 C2 N2 o
, [0 P; c" W" O! x V% J; F( V4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 1 |, D1 G" W# [
5.一些程式設計案例' A% p' P* _$ |8 F* Y0 k- S& L
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput 2 a* \. ~* i$ O: v4 M- r3 p( R Z
功能介紹:
$ T, ^# {6 Y2 z9 i; M利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。
& B$ m& d' p( r2 D2 X; s通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。& `: |: w# f* L: y
結合藍牙模組可以實現無線滑鼠的功能。
5 u3 i# y& b* @/ S' g" X: ?- p! p: H: ^8 I* A& J/ e& l
from pynput.mouse import Button,Controller# }0 p. C8 U* n& q
import cyberpi% u4 Y) h# l: l! `2 S* b
import time
- |9 Z+ q6 e7 h- c # s) o0 r( D7 [9 Q. R2 g9 ^
mouse = Controller()
$ P9 i" H- o1 z$ p7 p
; s' d$ m7 S2 @/ f. Fwhile True:! O- F/ Z; V: s
if cyberpi.is_tiltback():9 @, M7 }) J- `6 ^6 q2 {
mouse.move(-3, 0)
, U4 N5 b1 Y( X; _0 d$ i print(mouse.position)
$ w2 z7 a; S$ m; \ if cyberpi.is_tiltforward():9 Q4 p y6 S3 X' r& X; P( D
mouse.move(3, 0)% m2 ^6 D- i+ a8 s! D" \
if cyberpi.is_tiltleft():
# v8 L- g2 e5 r+ ?: B0 T+ G mouse.move(0, -3)
7 d3 N5 d. b1 z: Y" b1 U if cyberpi.is_tiltright():
4 \3 u# e# G4 P" }5 N- S3 [ x mouse.move(0, 3)! s. O7 j0 `* x8 G1 f
if cyberpi.controller.is_press("b"):* U3 a+ Z g5 n" H% f
mouse.press(Button.left)5 ?" j* I8 m$ Y m; _! z
mouse.release(Button.left)
& p5 _( _# U2 t6 U' F* s mouse.press(Button.left); f C/ I3 N% C0 d, z! r: ]
mouse.release(Button.left)
% x) S6 r2 e' P% Y0 O if cyberpi.controller.is_press("a"):# z4 a. S6 }5 W+ U {# x$ d
mouse.press(Button.right)- u3 m5 Z5 v. t R* v
mouse.release(Button.right)
$ }7 R) s; |2 D/ E) }% j time.sleep(0.01)
+ M. r! w0 O; O+ o
* Q& K! ^/ [% z* @4 @/ _1 i( y o, S1 B3 U2 o# }1 }
語音打字器
; ?. }' n6 y/ k3 \功能介紹:! L' Q+ S0 K6 p9 N5 O" }# t. g
利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
V3 D- P. R& w4 s( S: X1 C將語音辨識的結果通過pynput在文檔中打出來。
" |3 X. v/ } X) x% C該程式目前只能支援英文。
( O- q9 L9 L! K* E6 W# L' J# ~4 Y
% k9 f% z0 q: c( }import cyberpi b5 |5 E' ~. E" h3 q% Y
from pynput.keyboard import Key,Controller- f5 p1 V1 D+ V4 [
import time8 e+ |+ R2 V# T7 C; Z6 T
1 h9 u. w: m/ B" y5 \, I1 k5 X! Wkeyboard = Controller() [* s# w' l8 s. P& V
cyberpi.console.clear()" S: r- g5 k x7 E
cyberpi.led.on(0, 0, 0)
3 Z. r8 S7 J S! \) B6 X; Acyberpi.set_recognition_url()
, O4 V$ o. C: G$ K" S3 j9 R3 \7 Jcyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得
7 V! d8 j0 l& {4 E4 e. ~cyberpi.wifi.connect("WIFI名稱", "WIFI密碼") b* S0 W9 G& j* G$ b
while not cyberpi.wifi.is_connect():! W: F" J, h e. Y* K
pass
7 f: s) v1 _" l' l0 xcyberpi.led.on(0,0,255)
; }; u' ~$ A! s1 Z4 {% Jcyberpi.console.println("WIFI已連接")
. y; B* f O! s& bcyberpi.console.println("--------------")
+ l" E) ~; {0 Y7 z, gcyberpi.console.println("按下A鍵開始語音辨識")
* x7 B" y0 M. _while True:/ z( k, y" ]. g
if cyberpi.controller.is_press('a'):
0 G9 P, Q/ @4 W keyboard.press(Key.space)- B& ]) A) h% Y/ @* h; W
cyberpi.console.clear()
& v1 x1 x9 v3 h8 O. E cyberpi.led.on(100, 0, 0)( u8 _0 L2 |, Q8 M' ^1 W6 j* e9 i
cyberpi.console.println("開始語音辨識")* ]3 {$ w8 E! T
cyberpi.audio.play("switch")
. k3 l: b, x5 v& V$ r cyberpi.console.println("--------------"): m7 B, j3 S# q+ l! a& U5 ]4 A
cyberpi.cloud.listen("english", 2)+ Q9 D1 b2 B3 B4 `. J/ F
cyberpi.led.on(0, 0, 0)( F" H h( c' F; {, b9 L4 C
say = cyberpi.cloud.listen_result()
, l) f8 H: v1 d/ H! {4 n. V# P5 I Y cyberpi.console.println(say)
6 u1 f/ D8 N, b, Y. Q; `" d cyberpi.console.println("--------------")9 `' j; d( |4 D% t
for i in say:
$ R3 x# t+ z; \ if i == '':
% x; {# @0 K- `5 j0 @: [, ? keyboard.press(' ')
8 C; D: X5 `; V else:; \, X- Z9 W# k5 t1 P! `
keyboard.press(str(i))
. h2 e6 Z K- s3 H+ b time.sleep(0.03)
5 O) C' q/ j' W: d9 K2 e
! o6 s5 A4 l Q# umatplotlib音量柱狀圖 e$ w Y' h4 v& ~) h
import cyberpi* {, ^) Z6 y4 u- S
import time& h7 f6 x& ]4 C3 I1 p) W
from matplotlib import pyplot as plt0 A. T/ _. x$ o# f* L5 e
7 F' j" d1 G: d4 l$ X# Dplt.rcParams['font.sans-serif'] =['Microsoft YaHei']
" |" M8 _0 c: ^6 Q4 I( N4 \6 }9 jplt.ion()
6 r) {" p+ F, S% c2 B# G
* P' ?; D7 Y6 v& V& N3 Q" E1 @7 _% Swhile True:
+ z$ S% _. f# ^3 ^- x- H8 T loud = cyberpi.get_loudness()( g; k* e& A/ X8 [
plt.clf()# Z$ S; ]1 U: w% t0 O' @- |+ K
plt.xlabel("數據名稱")7 Y' `& U$ ~9 M& G# L
plt.ylabel("音量讀值")
" M- B5 B+ K$ k+ G8 o y_locator = plt.MultipleLocator(5)
4 f& w3 y! P3 ` ax=plt.gca()! s& y; c [- g
ax.yaxis.set_major_locator(y_locator)
/ P+ o6 f& ^0 c$ I3 a plt.ylim(0,100)5 t% u, `$ X- Q M1 E
plt.bar('音量', loud, align='center',label=f'溫度{loud}')9 `8 v. H* a8 M5 [/ k
plt.title('童芯派聲音感測器讀值')8 s2 W% b( J& O% Y3 H( c
plt.legend()0 K( E( ~' E$ p. P5 [2 N+ A9 o
plt.show()
% p8 r! I9 [1 v) b" Z* k& o& l6 k plt.pause(0.01)
# b9 w1 d: t: P( M+ c
3 X: n, E% H5 c! Z3 c6 N3 G) }# I+ J# \4 a- f
matplotlib 多圖表顯示0 j' b$ H. ?7 H% e4 A
, u# _& L2 C! _3 e5 {# S
from matplotlib import pyplot as plt
' M8 t, k# A X: n- E; l# ^import time
9 C: B$ h2 p# s2 b) Vimport cyberpi
# O0 N7 n1 q Y3 [! H' ~2 V9 l
# f ^# O9 r" p" Y' J* `loud_list = []# o& G8 R; B) ^0 |: o
bri_list = []
9 [& u& _+ V1 Mplt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體$ m7 ?: {2 I" d! a; a$ c1 R
plt.ion()! M) y% c+ u- X- m9 ~% |4 `
plt.figure(figsize=(10,10)). a- D9 `- ^0 K2 ~4 h
plt.figure(1)8 E# B w) k2 _, V
x_locator = plt.MultipleLocator(5)& W( U4 ], N8 i. R
y_locator = plt.MultipleLocator(5)
( O* u! {- e; C+ swhile True:
; z" @# q3 G% v2 U; K loud = cyberpi.get_loudness()8 J q) _' F5 z5 H
bri = cyberpi.get_bri()/ e4 O+ ]4 {& O
loud_list.append(loud)
: c" n+ A+ y; m bri_list.append(bri)
+ m$ l) _7 x8 o" V V7 S% H battery = cyberpi.get_battery()( c$ Z4 A4 J5 W3 L# z
size = [battery, 100-battery]
/ M- o X ~+ s4 K status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']: w+ ], s. x: W1 N( t- G
ax1 = plt.subplot(221)
3 K" Q) M; k F0 @, `' q- C" {$ S: g plt.title('光線折線圖')! T" O$ b' [* C6 v, ~
ax1.plot(bri_list)2 o1 V1 X# B5 b6 m6 Q$ r
ax2 = plt.subplot(222)3 H" N4 S1 e: j$ F- G( D, X0 o8 s
plt.title('聲音柱狀圖'): j0 Y. L: b5 A5 ]- F
ax2.xaxis.set_major_locator(x_locator)4 z* s Q% `$ H$ M
ax2.yaxis.set_major_locator(y_locator)
2 ]5 j- i) w. S; b plt.ylim(0,100)/ l3 a. e* |- H9 i$ m
ax2.bar('sound', loud)
0 D# N& T7 M% J ax3 = plt.subplot(223)
" G- S! @) o! J9 P1 F ax3.xaxis.set_major_locator(x_locator)5 A9 |4 _1 i$ s) C
ax3.yaxis.set_major_locator(y_locator)* D) S" T" C. {' N
plt.xlim(0,100)- ~0 Q3 w5 n7 g3 `0 e: [& i
plt.ylim(0,100)
, d7 q3 _$ q( o# \+ X) Y plt.title('聲音、音量散點圖')- }! Y- z7 a7 D% H. C
ax3.scatter(loud_list,bri_list)$ n3 u# b/ ^( Q! W2 k% y
ax4 = plt.subplot(224)
- f% e, o& l2 N- R/ ^* y3 p7 a ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})$ R _4 h! y1 f* h5 t8 N, K" b
plt.title('童芯派電量')
# Q% X0 ]2 s$ N! Q0 {& w plt.pause(0.2)3 R" w o/ _3 C+ ?( Z
plt.clf()
# O+ o2 m6 H$ w0 D, r if cyberpi.controller.is_press('a'):
" p: c& I) G! w k* r1 \ break$ T: Z: x# ~ o. n: b* v
if len(bri_list) > 500:7 K, }) h$ }) w
bri_list = []" R9 p% h, G1 f; ^4 r# K
loud_list = []) [2 x$ E3 D. @6 Z1 \) E! h3 ?
2 _0 h9 U# |; I1 B) r, h, i |