本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi
$ H/ s/ v5 v# o0 A! c5 r1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
- \- g/ X4 d8 X
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載 & @5 J- _# a) D1 E1 X( z1 w
- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
, W4 D! S, t5 T, m8 h/ c/ W 2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
9 Y# a$ ]* N: r' W; L
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
& A' k& R8 N+ h7 X# I . `' y% W& l. ` ^* c, Y# I1 k
- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)0 O9 h; v0 n6 Y; [9 M* }- T: A Q
2 P) x; i3 \- N& `; [: `) Q. d7 j0 k( t- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
# f4 f7 l3 O4 y; e; U4 J1 a $ }/ L5 J5 E2 o1 Z ^$ g
- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。
- W' Q7 M; b% j. [& U % A' q; p9 S) `8 }" x/ V
3.童芯派第三方編輯器程式設計準備
) Y4 i+ u7 F4 D6 K5 [5 R9 A- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。
1 e( F# v! e8 U. N% ` I9 } 0 ?+ W) f: i# R _
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。, g! ^- }' J/ L1 B9 t( f @
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。 # k- a% j: J# m0 q2 s
- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。" h+ H+ ]; J$ o6 |. i
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 , y" ~1 S$ ^% z) o
* ~6 q' P0 ]: p |( Q# u' _
- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。" s4 u! O7 p+ P) i
5 W+ T7 C9 U7 H, w/ }8 l4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。 6 C8 r0 Y' e m# _( J/ h& c$ D
5.一些程式設計案例
. A7 z; o4 ^* k& h! @5 Z# S童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput - z% N z5 k$ x" P% d
功能介紹:% h; d7 e1 _ j" ?6 q f4 L
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。 z# P0 }1 f2 u, o; O
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。# Q( O9 i3 R7 `6 c/ H$ \
結合藍牙模組可以實現無線滑鼠的功能。
: l8 V! l$ _' R& E' I- `6 Y$ w$ v7 B8 Q9 [+ p2 r
from pynput.mouse import Button,Controller0 v0 x8 X# v( b! i4 L- Q9 Q. x6 Y
import cyberpi
' B0 w/ ~' C, cimport time
0 l, c* o( q% y, L& n. a
) n K5 |6 n$ i& B+ i' [% Nmouse = Controller()0 T1 e# g( c" E! a5 W7 z
% N/ C" T* h' e) P1 \& swhile True:. X8 y" s& S+ Y1 Q; k' y7 ~
if cyberpi.is_tiltback():
% `2 q/ g* ^( p mouse.move(-3, 0)2 ^ L* a6 |& |, E5 Z, [$ I
print(mouse.position)+ C, j$ y! T1 T8 ?3 x, ^. Y4 z2 ~
if cyberpi.is_tiltforward():9 n- ^" O' [1 F" z% r0 L$ B1 ?* l
mouse.move(3, 0)3 g: h3 f5 W S% \1 C$ [
if cyberpi.is_tiltleft():1 d! u b3 w' E, S; B5 E
mouse.move(0, -3)
. b6 |5 q- L$ Y+ d% G; ^( P o if cyberpi.is_tiltright(): p& U `3 F& Z: B6 @
mouse.move(0, 3)' J( e+ j z! z1 q6 n% P
if cyberpi.controller.is_press("b"):* Q6 u9 O1 Z+ f8 f" h2 v# k/ f
mouse.press(Button.left)
1 D+ |6 e" z v' A mouse.release(Button.left)+ _" v; |0 e2 X" J3 B1 H
mouse.press(Button.left)$ i/ p2 t( v* C/ ~( i
mouse.release(Button.left)
* t/ d9 C$ g8 Z9 u) U; `0 Q" S if cyberpi.controller.is_press("a"):
% c8 f& u9 y) G* _4 P+ \ mouse.press(Button.right)0 f! R2 M$ O f7 H! n
mouse.release(Button.right)4 A( u0 X9 i" d, \: b c
time.sleep(0.01); j% g8 y8 o k; \
* A0 C; ^0 }& s
+ P& E/ [4 G9 o% S( Q/ u0 N語音打字器 ! A! z" z7 k5 {( h" S0 b' b
功能介紹:0 g; R* ]5 ? d! L4 K/ w
利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
4 l! ~" |& f9 v! h$ g5 z9 F將語音辨識的結果通過pynput在文檔中打出來。, d9 B2 O" \& E4 R; k+ J
該程式目前只能支援英文。
" H7 V, h' d- D3 R: _) o4 C; J
1 [6 ^: v: f0 d. aimport cyberpi
& r1 a, h+ q$ e7 y" q; rfrom pynput.keyboard import Key,Controller" ^. X% x2 d/ s
import time
8 J4 @' U( }. g$ q6 j 8 x- l' C' @- g3 e
keyboard = Controller()
2 ^) K+ U3 Q' j2 r4 K, Zcyberpi.console.clear()6 g* C4 M9 Z: r2 y; [# O
cyberpi.led.on(0, 0, 0)
' j: t# b" y9 F' c l/ y) hcyberpi.set_recognition_url()
& E) t- y, P" r2 H4 c$ H7 @: `1 Pcyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得) s. e4 p4 _' D5 Y
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼")
2 @% C" x; F+ qwhile not cyberpi.wifi.is_connect():' Y/ m6 s4 e' [
pass, N' H1 Z& p. k; l
cyberpi.led.on(0,0,255)/ g6 k* w; w+ X& ?) ?) D
cyberpi.console.println("WIFI已連接")4 I% J5 Y" d4 r, ~7 r
cyberpi.console.println("--------------"); k# K: c3 ?3 k, v" f# T
cyberpi.console.println("按下A鍵開始語音辨識")7 q# E3 s, u |/ _
while True:
6 E, T/ }% x: _( w3 J" [ if cyberpi.controller.is_press('a'):8 o: ]4 b. G4 u o7 i; d6 N8 }' t
keyboard.press(Key.space)( u s. s' G( x1 ]3 l6 M6 l
cyberpi.console.clear()
& S! b! u( {% O8 D0 ? cyberpi.led.on(100, 0, 0)
9 k% A9 G- |( i# l cyberpi.console.println("開始語音辨識")
. L+ p9 |, n7 c/ ~) Z' J: @ cyberpi.audio.play("switch")
u A3 n! S) B cyberpi.console.println("--------------")8 A( j: ]+ ]' l; Y% i2 b) q; G
cyberpi.cloud.listen("english", 2)8 ^- x* N2 D. J- ^) ]
cyberpi.led.on(0, 0, 0)- J! D s- C% e2 B
say = cyberpi.cloud.listen_result()
7 m1 A y$ p/ x& M cyberpi.console.println(say)1 W2 s) W9 r& ^& J$ y7 ^/ f
cyberpi.console.println("--------------") V, F0 F _% W+ I
for i in say:
) \& e$ d2 ]6 a1 _- g. u0 q if i == '':
: z& ~( W9 C, @5 p1 r% Q keyboard.press(' '); z$ d. C% }' @1 ^, _$ p! y
else:
9 q7 |: h# _% L! E keyboard.press(str(i))
5 n6 S0 G9 B# r- C% x time.sleep(0.03)
; a0 G) e2 R" d! O. Z7 h* e7 _4 i8 m. H9 N: V) s
matplotlib音量柱狀圖
; Y/ y/ Z y0 x3 K6 m% J, ~& V& simport cyberpi/ O, Y7 }3 }1 A6 d; v
import time
6 W- ?9 P- j6 ^$ A) a, \from matplotlib import pyplot as plt
P. b" y3 w: o" `8 L0 ` ) `- v9 ~6 Y: B: j f% S
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']4 y: O) H; y9 D* `8 Y( q" L
plt.ion()
# S' I$ E' d( v7 ~$ L' _& F/ ~
% \/ J) u; Y* ?$ s6 ywhile True:* G5 j2 g: ^. q; o S" D9 r
loud = cyberpi.get_loudness()
/ ^+ T3 L& Q7 C: P% i9 a. F plt.clf()
% U* K+ h2 X y9 m* j" d& P) V: l plt.xlabel("數據名稱")
/ h" U8 |, s: Y plt.ylabel("音量讀值")
, g8 S% f: v6 L y_locator = plt.MultipleLocator(5)
; X, G( R- I3 l1 f' N ax=plt.gca()3 p) A+ W$ a5 P7 {; v
ax.yaxis.set_major_locator(y_locator)0 b3 W4 n4 C; k9 b
plt.ylim(0,100)" @$ |7 M2 D$ b- p7 l. [
plt.bar('音量', loud, align='center',label=f'溫度{loud}') m3 d Y! W0 W- b
plt.title('童芯派聲音感測器讀值')
/ L6 n0 |* u/ S plt.legend()
! `6 C" M( M1 Z& X' r plt.show()0 {0 [+ J9 r% I2 H3 i- j6 T
plt.pause(0.01)1 U& S* r) X7 w# ^% r
1 b1 h0 k! R; o/ X; U$ Q# O
3 N* h+ `8 p& t! f5 ematplotlib 多圖表顯示; ?: G* ?& A" V5 K9 h: w, m
8 o& f: V: P% g6 g s# X
from matplotlib import pyplot as plt( p) k4 P9 R6 r7 f. ], j+ W
import time3 w3 |: d9 Z. h( u
import cyberpi
$ |+ Z. h* g% o2 m8 A1 V* r8 l $ J, [2 {4 n. R3 c1 }
loud_list = []( w) y. r v+ P
bri_list = []4 G. q8 u' m3 t8 [- H l9 b
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體
1 t1 J4 I) x2 @1 Nplt.ion()
4 [3 G3 t1 ~7 \3 X$ S0 X$ Cplt.figure(figsize=(10,10))
$ _& f! n8 E4 o0 E; D% `0 Splt.figure(1): c, `6 U/ f: x9 P# r/ C
x_locator = plt.MultipleLocator(5)
$ p. J2 C) \- G, B% S/ D% e* s' Qy_locator = plt.MultipleLocator(5)
P$ U; g. R- H. rwhile True:
0 o, [5 t: u& g& s, i/ b loud = cyberpi.get_loudness()* ?- p2 x Q7 G; w5 @
bri = cyberpi.get_bri()9 A+ p" B+ l/ }; z4 e
loud_list.append(loud)
) m; }% _$ ~3 b) F6 R bri_list.append(bri)# P2 y2 |: i$ u7 s. w) u
battery = cyberpi.get_battery()
( K; ?6 A5 r4 ^# q; q, J size = [battery, 100-battery]
$ N' w2 f* W. ~2 {& o9 R4 M" x status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']
$ g8 @/ R0 s; y2 F ax1 = plt.subplot(221)$ c3 D, P1 M! t
plt.title('光線折線圖')
+ Y5 U9 @% g2 {! [1 l ax1.plot(bri_list) a! N; u$ e& L; F
ax2 = plt.subplot(222)
$ t9 U. A3 e/ J0 W plt.title('聲音柱狀圖')
- i' b. r h1 ]% P ax2.xaxis.set_major_locator(x_locator)( B2 b% t O. n
ax2.yaxis.set_major_locator(y_locator)* f" ^. b( r7 I1 t" ?7 C
plt.ylim(0,100)- @6 P& Q9 |, x6 H* @
ax2.bar('sound', loud); R6 w$ I0 t1 P! \4 L' d) X
ax3 = plt.subplot(223)$ {0 b3 U+ V# e, E& ?' e) {
ax3.xaxis.set_major_locator(x_locator)
/ i5 k/ [* J0 w, m0 _ ax3.yaxis.set_major_locator(y_locator); ^, ^) {6 V0 p- d
plt.xlim(0,100)+ W( a Q4 y; G) O- }
plt.ylim(0,100)% Z7 t' u8 _1 |2 _. J. H
plt.title('聲音、音量散點圖')
/ F+ s% c% ~0 j2 S ax3.scatter(loud_list,bri_list)' k: O% P% t f% D2 v9 w5 V
ax4 = plt.subplot(224)
1 T5 u8 h4 d* L, D4 b# _ ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})) g; k; J- a# c, B0 c
plt.title('童芯派電量')
Y( C+ V* E* f plt.pause(0.2)
1 {$ J: m/ k6 ~( e$ b9 z! A plt.clf()
' F% B% f5 r8 }( I+ o7 T: M if cyberpi.controller.is_press('a'):
( {! {! I7 V7 u' o2 A d9 p4 E break) m- R- g# x+ s2 G0 P1 c
if len(bri_list) > 500:
2 \' D* v& E, Z; x+ c+ [" v- p bri_list = []) e1 x7 }& `; a i
loud_list = []8 P+ h" j# h7 \! v W
# d/ V4 v1 }, W. P. Q2 D B; P1 p |