本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi 8 T* p, _' j3 e r# @" `
1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。, @1 c1 T+ c) h4 ]. H) b( E$ g# @2 K
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載
$ i& [* n. T3 O8 R1 V- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
4 _8 B6 n* @- J# W8 ? 2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)$ S0 j; G" k6 k! `$ [! D9 [1 J
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
: G4 C# [* ` _9 V0 R$ R3 ~ F. D
6 L) i: v3 |7 e5 \. S2 P! U5 s- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
# u; y; W$ _6 Y V
2 }0 R' a' s/ p) D8 @" S9 [! a/ w- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
9 f/ V, ^) F4 R! O+ \ ) `2 j, \" q7 _2 ^6 D9 \
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。5 e4 X! x; G, h
5 Z; s; N* b& a/ n7 @
3.童芯派第三方編輯器程式設計準備( g5 j5 H3 i' r
- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。9 ?' z- {" E' n! u7 l# g* u& w
, E3 B9 F4 m w6 s* ?# b
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。& a0 y3 r- K' S/ F+ {! ?
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。
6 e( J% H8 N7 R% b5 o& k) X- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。8 r5 s$ d$ U" Y, Q- l9 B. d: \1 {+ y
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。
- n) Z+ S5 {7 }& l/ e; ]1 d$ E4 m! R3 S2 a
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。
3 M3 s9 J$ k3 K& x8 t, H & L3 c% w' ~; h" C
4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 0 G6 D: b: u5 A) b
5.一些程式設計案例- _* w: i7 B! L1 [+ H
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput
* f- k- m$ @$ S9 W功能介紹:! x" D# W2 I7 r9 ]: X3 C
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。" [/ I* ^& ]' i0 A( k$ `
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。
, W3 k. p( F9 b結合藍牙模組可以實現無線滑鼠的功能。
6 m, X7 o, E- f! U8 \! F$ T* [! _! X T* a C3 K/ m c. b. R
from pynput.mouse import Button,Controller
$ L1 G9 [3 F/ d, S0 q7 A2 `6 J3 limport cyberpi$ h# x; n7 I9 ]- p
import time6 x, L/ J( T8 T3 Y& ]9 n' a) G
! `2 z- u, C4 ]$ i) Zmouse = Controller()3 ?" z. o4 o j" \. l1 v3 u8 v
, U; ?: F2 {4 n" E4 j- D0 x% w
while True:% S9 ]2 V' }9 \
if cyberpi.is_tiltback(): t% Q! t0 w' F# @
mouse.move(-3, 0)$ F k& I1 g# T. c4 M z/ `
print(mouse.position)6 T; b$ L0 ~1 |. z2 |
if cyberpi.is_tiltforward():6 L& [; B! x* U# m! s# I7 B
mouse.move(3, 0)
: Z* T `% E$ ?) u if cyberpi.is_tiltleft():
5 Z X3 ~6 H. ^/ k! | mouse.move(0, -3)" v4 F% U5 @. n F' h4 a
if cyberpi.is_tiltright():
$ H8 @3 F& S+ ] mouse.move(0, 3)
6 z& t7 v+ t. R3 t0 Z) | if cyberpi.controller.is_press("b"):
) I# M. P0 J6 h) U( S# R2 x mouse.press(Button.left)0 m* ?8 Q3 d8 U) C
mouse.release(Button.left)/ G4 @# ~1 ^9 H
mouse.press(Button.left)
2 P0 e9 f( K8 q! H a mouse.release(Button.left)4 _% m/ V R) z9 u2 D
if cyberpi.controller.is_press("a"):
1 l) t, L5 G. @& s v4 `9 ~ mouse.press(Button.right); n" O; `# f7 U. p f
mouse.release(Button.right)
! O" c- z' i# P! h, b& G time.sleep(0.01)
h; E3 }) L$ b3 l3 U; b, z6 Y& z
; U2 V: k0 j3 z1 ^- h
語音打字器 2 |4 P/ S# A6 y: ^
功能介紹:9 d% O2 l/ _: ?# w% f$ |
利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
; s8 {- H; s8 G. o將語音辨識的結果通過pynput在文檔中打出來。5 t% C- X0 u' ~9 m0 i& c5 z
該程式目前只能支援英文。 ~ [: Y0 t1 H) L; U# ^% Z) B
; @/ F' t) K: q3 O5 i5 ?import cyberpi3 r1 f( X7 G" c7 j1 E% H) O
from pynput.keyboard import Key,Controller( d$ k: Q* r/ x' c3 E
import time
3 C7 W( i2 M1 m& L L0 F
( o! j3 U& i3 x: L4 ^keyboard = Controller()
* O4 P+ g: X) A2 q- ^8 H% _cyberpi.console.clear()9 o S# z8 p! \/ A+ |5 z
cyberpi.led.on(0, 0, 0)9 [% `2 G: }* p2 I: R% i: k
cyberpi.set_recognition_url()! y2 B3 B+ N K4 N2 M+ `
cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得- }2 \( |) M1 w
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼")+ O0 [: a# w( Y. u8 O4 i3 J* D
while not cyberpi.wifi.is_connect():0 F& M9 `/ P" C. O) e$ m
pass
) \0 S! q% y$ Z5 N8 L" {cyberpi.led.on(0,0,255)
7 i# M+ ~1 a$ d. `: Jcyberpi.console.println("WIFI已連接")- \. k4 K; {# D& i
cyberpi.console.println("--------------")
! {4 G0 H+ u5 ^' fcyberpi.console.println("按下A鍵開始語音辨識")4 I) b+ W! k/ p( A
while True:4 h8 }2 H5 j/ p- J3 k
if cyberpi.controller.is_press('a'):2 N% v1 ^' f% R9 b3 e+ n/ J
keyboard.press(Key.space)$ ]+ G8 x) h4 G& {
cyberpi.console.clear(); [; K- T5 P/ J8 q3 M+ H0 X( g
cyberpi.led.on(100, 0, 0)
! y$ ?9 e5 ?7 R' C0 p$ a* { cyberpi.console.println("開始語音辨識")% s0 u4 v8 K8 ?
cyberpi.audio.play("switch"), M9 ~! m9 H$ C
cyberpi.console.println("--------------"). ^ p7 N' d( f4 q* Y- O/ V5 B
cyberpi.cloud.listen("english", 2)0 \9 b9 q8 `" X. A
cyberpi.led.on(0, 0, 0)
% `- E( U/ g- X4 P F8 x say = cyberpi.cloud.listen_result()9 ?, Z! d- \* `$ S
cyberpi.console.println(say)
0 U8 r4 F) s4 B$ d cyberpi.console.println("--------------")/ l7 _) n, x+ j) r. [* N
for i in say:
" e& T& W( g2 f- j$ g" H2 V if i == '': ^+ ~9 ?+ k% M% n2 i
keyboard.press(' ')0 ? e+ T2 Q; z6 j6 I# S n
else:
& L- ^2 F+ n9 \; O) `$ A keyboard.press(str(i))
% n e8 L9 r" I5 q time.sleep(0.03)
, P. S& J0 u f2 X4 w' k6 S2 W2 r* n' k
matplotlib音量柱狀圖
, x; C, A( u r8 [" Ximport cyberpi$ l0 k* Y4 g6 K8 Z4 s
import time
7 \" _1 c# q3 }3 Wfrom matplotlib import pyplot as plt
& p% x8 ^$ ?* i$ B ]1 k% ?7 G3 r
# Y" f" |6 M2 s2 T n, c" {. ~plt.rcParams['font.sans-serif'] =['Microsoft YaHei']
) Y1 k1 {9 j4 W9 w+ Oplt.ion()
3 j# B d( p- f* r- X & E0 J. [. x( V7 N1 o
while True:
# R4 F& b' b* u j; [. w loud = cyberpi.get_loudness()
8 P2 Z5 Z5 }' `3 U" ?! I! i9 \& a plt.clf()
! ]! L$ h- p" j) {+ ~' V8 q: E plt.xlabel("數據名稱")
& H: @9 g7 j4 ^ plt.ylabel("音量讀值")
. F3 o' w1 ^; G1 k y_locator = plt.MultipleLocator(5)3 `& \6 D0 l+ c+ I
ax=plt.gca()
0 F! X' u' S% _5 f ax.yaxis.set_major_locator(y_locator)
" f' Q0 H K5 E: W plt.ylim(0,100)* o* {4 Q: C' A' S5 \2 q- \
plt.bar('音量', loud, align='center',label=f'溫度{loud}')
+ @; F2 z: o6 A& j# N plt.title('童芯派聲音感測器讀值')
! i$ U' R, s4 F' R; }+ v% l2 W- J plt.legend()$ L4 d- Y, B1 _( N5 ?8 d7 J
plt.show()
% Z. C/ d: Z8 f0 f plt.pause(0.01)( m5 ~. o; u9 ?1 F1 |8 q+ H
9 ]7 J2 F; h- ~/ n' O2 m
# v; H( @# p; O. @: [: |. Y
matplotlib 多圖表顯示5 b5 @5 F0 [( V" P
, N" r" U) b8 W! J
from matplotlib import pyplot as plt
0 k8 y) s8 ~* r* F2 g; Q2 Aimport time6 y! c+ n3 r7 O8 S7 p$ I, C1 e. r- e
import cyberpi
% e6 [1 P3 L$ e" Q6 }9 B
3 F) K9 Q# D8 l- h% ^3 bloud_list = []
8 u; q+ L2 \! i( abri_list = []- r1 ~# j- }3 ]1 r8 J- |2 r
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體
/ Q% j1 y# u1 ^4 z$ tplt.ion()' r* N- ]9 }3 \! o3 w* r) ?; {; u
plt.figure(figsize=(10,10))$ \/ R% b$ `+ } d
plt.figure(1)# i( }' I+ U, T ~( Z9 u9 D8 M
x_locator = plt.MultipleLocator(5)+ G) }; h; K3 Z. A' T1 M) N, n
y_locator = plt.MultipleLocator(5)8 Y9 P" }* C! t( Q. ~7 {2 Q W& n
while True:
: D; ~" ?( ], m loud = cyberpi.get_loudness()1 J& o* L/ h9 p* `+ O G
bri = cyberpi.get_bri()
2 V& B& S4 z, v- w loud_list.append(loud)+ f4 H! T2 k4 X- O! U
bri_list.append(bri)! P# \. a# A5 p; I/ N% r# g! P
battery = cyberpi.get_battery()3 x4 p: Y& l4 ]! V
size = [battery, 100-battery]
) X; ?. Y! g6 d1 h1 ^% S: z status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']0 M) a( |$ Q0 R
ax1 = plt.subplot(221)
) p0 x4 j, P; C4 z0 Q* w5 S plt.title('光線折線圖')
% F# K& F: w# x3 U: s6 N/ K- t ax1.plot(bri_list)* q' P) A T& \. Z/ C, J' O
ax2 = plt.subplot(222)
- R% A1 X+ ]% w8 @ plt.title('聲音柱狀圖')
6 j& O% |6 o9 L' Q ax2.xaxis.set_major_locator(x_locator)
- l& w8 Z N) ~2 S$ S. P( g ax2.yaxis.set_major_locator(y_locator)' K$ B1 A$ R0 e# N4 ^ s
plt.ylim(0,100)+ F C' W, r8 p
ax2.bar('sound', loud)% k3 @# F. v- s& f1 m T3 i1 A R6 Z
ax3 = plt.subplot(223)* o4 S- L3 q+ |6 T5 Q9 M
ax3.xaxis.set_major_locator(x_locator)" B" j0 a4 J* I. i* M: t
ax3.yaxis.set_major_locator(y_locator)7 c- w, x) I( h1 o, f4 s, s% }
plt.xlim(0,100)
h6 r) k; K. }; }& R+ Z4 ` plt.ylim(0,100)
+ E6 {" W- R: G plt.title('聲音、音量散點圖'): I+ u& P& ]3 |; K2 `& T! u
ax3.scatter(loud_list,bri_list)
7 c) J0 m9 J& Y( z T ax4 = plt.subplot(224)4 E d5 w1 o4 v, I+ g U( J
ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})3 V5 v. I# Z$ } O) {4 \
plt.title('童芯派電量')# _9 Y0 q9 L5 \! H8 F8 h
plt.pause(0.2)& A( q0 `( d0 N( a2 i3 B, |
plt.clf()
; P6 R1 y E, j if cyberpi.controller.is_press('a'):
/ s! E& [! t" u+ m5 Q- ^% [& a break0 Y. m `0 m* f- L* n0 C+ D+ N0 S+ s
if len(bri_list) > 500:$ d7 \6 a1 \; g ?& K0 f
bri_list = []
0 a4 E" Y' ~8 V8 F2 W. }5 |: q$ W loud_list = []* e) f) n6 R. ?. X
: x9 C6 o* Y9 [ |