本教學譯自Makeblock官方教學文件,原文點[ 我] 本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。 快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。 pip install pyserial pip install cyberpi
5 e* S" @1 @( q) _& W1.安裝Python環境- 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
" N/ Q9 t. ?3 o8 l
Python Windows環境不同版本下載頁面:Windows Python下載 Python Mac OS 環境不同版本下載頁面: Mac OS Python下載 # k5 L' g5 G+ X P
- 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
0 H2 T6 P# u1 U/ Z; U8 _& T 2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。 - 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
- 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)
5 h( [/ x( b, T' s, o7 V+ a
- 點擊桌面上Visual Studio Code的圖示運行程式。
- 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。5 I3 X+ |- p! `
) z _5 ^' ?2 U0 y6 C! N2 p* n- 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)/ B2 [/ E& W5 r( N1 z/ M
- {- z. j8 O3 l x; C# Y6 t- N' S" }- 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
4 ?: X& Q* C4 y% @% n3 @
# K) _8 V/ t& r4 i9 P% k* n- 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
- 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。* g2 S5 Z s' j* z0 d$ X2 e; j
7 a4 m! S1 j8 {/ ?% D# C/ |0 F( E
3.童芯派第三方編輯器程式設計準備
" @- T$ e0 J' @- windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。
8 k0 n6 j9 L( o6 t2 @ * m% A( e0 P% M7 u
- 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。
8 L1 F6 _9 r; M, O- H8 u" d
在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。 * w1 V; a( `7 p. q8 R5 @2 y3 M5 {
- 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。/ m, M# @6 o: A
在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。 # k* k4 q( X$ E6 N
' Z7 \8 F1 n7 t- 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。- P: ?% T. y1 D- D- M0 ]
: q" p4 ?# s3 ~/ ^
4.注意事項 在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。
+ E+ e0 G, t+ {: M' \+ U$ \5.一些程式設計案例- V3 |( ^+ w1 E8 a2 `9 b
童芯派滑鼠 需要安裝pynput模組,參照上面的步驟pip install pynput # {2 s3 e; J! s
功能介紹:, g' z8 G X; N* A
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。' P7 |7 P( d* [) C' l3 m$ J6 F; c
通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。 u' G' H6 y5 y; m. r0 I) q7 z
結合藍牙模組可以實現無線滑鼠的功能。+ F" i3 o: q% N- I8 U0 a$ M0 K3 i2 |: O/ ^
0 l% ?. q" ^# ]& _# T
from pynput.mouse import Button,Controller# B* F/ G' P, R, W- G* }: [3 i5 D
import cyberpi3 V: i! ]7 `% S6 H& Q
import time
( f) @, g$ P3 z4 ?* e3 j
, y1 F' \4 ^; a$ Dmouse = Controller(): F y. Z2 F' R, K
" l0 |8 ~/ V2 _- @while True:) g2 L6 Q N; Y9 f6 Q" d: b
if cyberpi.is_tiltback():# ?9 j1 b0 G1 n" ?7 B; h
mouse.move(-3, 0)
% D+ V' _8 [, @1 x0 Z6 z print(mouse.position)
, B8 [9 J1 m! k- z. _: t if cyberpi.is_tiltforward():
# o7 j8 ?8 w3 f$ ]# a0 N* k mouse.move(3, 0)5 }. Z( `/ n u6 u) c2 U
if cyberpi.is_tiltleft():
" g- G% O V1 u2 `; F mouse.move(0, -3)0 E0 a- _$ N3 I, A5 i" ?9 _
if cyberpi.is_tiltright():
) w% b$ s- Y( Q! s8 a( P& k mouse.move(0, 3)
* T1 i, v$ @2 d8 o if cyberpi.controller.is_press("b"):
. V( Y- u% B4 h, f mouse.press(Button.left)
' b& l' ~1 F! ~9 N9 c) g7 ^ mouse.release(Button.left)9 [' o R5 T8 h" ~! M7 a5 s/ {5 n
mouse.press(Button.left)
q9 t2 s: H2 T/ c4 @ mouse.release(Button.left)
' _- |% b: J8 }. Q: O4 l if cyberpi.controller.is_press("a"):
; z5 X+ V: O) V6 p mouse.press(Button.right)% }1 d+ r7 l, k
mouse.release(Button.right)- H# e. ]+ t" L. x% E
time.sleep(0.01)/ g2 i- \9 J! H- k8 V/ i# X
9 W' e0 ?( D; x$ Q' a( s' _; y
: o& ?' s6 e: O# b) |語音打字器
/ {7 B1 W& {9 E% U功能介紹:
. h1 v$ i( m8 c2 H3 Y( p" O利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。3 G5 r4 U/ z& q1 r
將語音辨識的結果通過pynput在文檔中打出來。
9 k5 H$ E2 C2 M* q7 N& P該程式目前只能支援英文。
& d9 g2 n9 |) t/ X& O: ~) F
2 A* Y6 w3 K7 t% {5 H' l. Bimport cyberpi9 Y1 S' w# M( E
from pynput.keyboard import Key,Controller
) q( ]2 ?/ Z- }- J2 I8 gimport time
2 f1 E r2 x* j5 ^2 R! L
0 Y9 f' p2 ~9 ?8 x: jkeyboard = Controller()
8 p' P5 a2 {$ m# K4 R+ |3 Ccyberpi.console.clear()+ u6 q" J- D( Y g( c
cyberpi.led.on(0, 0, 0)% T& Y. H3 t7 A+ x# B$ T
cyberpi.set_recognition_url()
; G+ s- L* E$ {# S4 {cyberpi.cloud.setkey("請輸入雲服務授權碼") # 通過慧程式設計帳號可以獲得3 @ G' L* g# G2 ~# v
cyberpi.wifi.connect("WIFI名稱", "WIFI密碼") H5 R9 K9 h8 D* U- O9 o7 M8 @( {3 `; V
while not cyberpi.wifi.is_connect():
- r4 W6 v$ r0 `) I L, C5 p pass
- {2 `$ p0 z, h- B) E! `cyberpi.led.on(0,0,255)1 v7 e. e8 L# O: N, R
cyberpi.console.println("WIFI已連接")
% ^0 C& H: N( a# ~9 d- h: xcyberpi.console.println("--------------")
* q- s9 f C, B2 m( Fcyberpi.console.println("按下A鍵開始語音辨識")
& V1 P9 m. r0 S; f, Gwhile True:6 ]+ A1 `, P8 v; a
if cyberpi.controller.is_press('a'):
H, X$ j1 i) z keyboard.press(Key.space)+ G2 l- K/ [% x' [9 `' D k
cyberpi.console.clear()& e9 V" k; f6 ?( a2 \$ l. @4 ]
cyberpi.led.on(100, 0, 0)9 M& a7 a9 V- {' V
cyberpi.console.println("開始語音辨識")
! g |" E1 u5 k0 t, q; d cyberpi.audio.play("switch")
2 v3 m* q$ y( C: [7 j cyberpi.console.println("--------------")/ M/ ]0 Q0 J5 Z) u! d! [- n; H) k
cyberpi.cloud.listen("english", 2)7 T2 G% s8 Z \7 e; a7 g+ h
cyberpi.led.on(0, 0, 0)
( j! m1 y3 p; X& p say = cyberpi.cloud.listen_result()3 r, I& g) E3 ~ b2 m k
cyberpi.console.println(say)
, [6 E, z$ v6 s! H cyberpi.console.println("--------------"). Y% a4 I# d/ D0 h# i7 m8 q/ c
for i in say: w+ m4 S% [6 G1 U5 A- Y( J
if i == '':. l3 E& s7 e* [' r: D
keyboard.press(' ')! l7 i/ A' d" d3 O! E" i
else:
! r4 X3 F9 y0 X$ h keyboard.press(str(i))
4 S; i, I: T. M: w) p0 M time.sleep(0.03)
. b* D5 m) \% x5 F! U, o; x; s. g+ B l0 L7 n" n) l! s
matplotlib音量柱狀圖 . y6 E3 L( S3 t+ C2 L u
import cyberpi
- V6 X+ o% n' _- L$ O3 uimport time
* H9 x# a* X) I& i, |from matplotlib import pyplot as plt
0 F* {1 D/ L5 }/ d6 e, W: W% { : e, L8 ^) z; a8 V1 l8 k* F+ N: T
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']1 o/ J$ p+ |. B: s# j" \* H
plt.ion()
8 f7 Y4 p' d( _6 {9 ^$ n: P ^
! _9 F& G/ K+ u Kwhile True:
! N" `1 v# x; q, l5 v \# i+ s: \ loud = cyberpi.get_loudness()) {, J& l- c; I4 h- _
plt.clf()
) j; h3 P1 s" H* z5 W; U H plt.xlabel("數據名稱")
+ U9 m4 P/ a5 A" E plt.ylabel("音量讀值")
$ E- L- |7 R! z7 c6 d/ H( h7 g y_locator = plt.MultipleLocator(5)% r1 N4 }5 c2 b" L1 v2 ]
ax=plt.gca()
7 H* T/ X8 \5 R% Z ax.yaxis.set_major_locator(y_locator)
, @) Y0 r' s+ I plt.ylim(0,100)
+ E# C( u/ ^" t. C$ z, g0 h: \ plt.bar('音量', loud, align='center',label=f'溫度{loud}')
( B+ X% n/ V( c3 ?& E plt.title('童芯派聲音感測器讀值')# T/ |- v. I0 F6 L' Z
plt.legend()
3 `( z$ c% K/ o# _* a F0 J plt.show() _3 N) O/ q- {7 O0 d2 {
plt.pause(0.01)
m3 W% A2 t7 C' f/ Y
% K! G+ c( Q6 P" C- @+ q B$ e* J& F& \2 ^( z1 ~
matplotlib 多圖表顯示: C$ S. F% w' L0 t! A& G' b! M$ _
% M7 C% x) ^0 R- Y% c- y! `9 R! ~from matplotlib import pyplot as plt
. q4 b1 T- ^, T: y" I0 B; kimport time
1 I. _3 r$ m, K _$ u) U3 zimport cyberpi" f9 ?& ?! R6 Z2 Q8 _2 c
! L# o, @! W# _
loud_list = [], u! V7 `% x! b# p# P* J
bri_list = []: b) ^' K3 X# z( |4 U7 h
plt.rcParams['font.sans-serif'] =['Microsoft YaHei'] # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體0 F3 i; y! [" ?' ~. B6 ?& f3 y
plt.ion()( W7 G, K% P. Z( i$ F% ?2 m
plt.figure(figsize=(10,10))
2 G( ^0 [& V. P4 nplt.figure(1)
" g D6 s2 I6 h' d6 _x_locator = plt.MultipleLocator(5)
/ {* x; a" R# j) j/ s, S: Iy_locator = plt.MultipleLocator(5)% c; a/ R! Z; E7 S
while True:
/ d# S ?0 w+ y- y3 D1 v1 n( d loud = cyberpi.get_loudness()
& e) J; k4 g, [) \ bri = cyberpi.get_bri()0 i, y& t L8 i( s
loud_list.append(loud)- `$ H8 m% q, ~6 r& z6 _
bri_list.append(bri)
8 b! l2 ?3 F/ o* ]* c battery = cyberpi.get_battery()
. X8 \0 Z# O2 E size = [battery, 100-battery]$ y5 w T+ y' [1 D
status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']; g P- N5 K" h% u9 W) L5 x
ax1 = plt.subplot(221)
" a" K# A9 p! }1 i5 m plt.title('光線折線圖')
3 ~' B n9 a! h8 f# M) D3 [1 W ax1.plot(bri_list)! z5 ]; |! J' g# T, r
ax2 = plt.subplot(222)
- G" |& G- B/ T plt.title('聲音柱狀圖')+ w: G0 H- z6 e& s0 w& a
ax2.xaxis.set_major_locator(x_locator)
) K/ g; O8 R' D) r& J4 t% } ax2.yaxis.set_major_locator(y_locator)! f; c# l5 Q3 u0 S
plt.ylim(0,100)" l# z! P0 p$ A8 a9 S
ax2.bar('sound', loud)6 g7 ^0 K7 x+ R5 [- B
ax3 = plt.subplot(223)8 B& ?5 Y' g& O% N
ax3.xaxis.set_major_locator(x_locator)
) k1 Y" [& y1 U5 Z* i2 V7 C ax3.yaxis.set_major_locator(y_locator)& r& w; K2 t# d, L5 v
plt.xlim(0,100)4 m, ^& c4 h. g" H! o$ `
plt.ylim(0,100)
, E0 _& G& v3 \9 C plt.title('聲音、音量散點圖')
5 |& U. d. F- ^: U ax3.scatter(loud_list,bri_list)
9 P/ J5 \& g5 O) L/ y2 p9 c ax4 = plt.subplot(224)4 l$ [/ f( \! V* v" C
ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})
2 C- {6 P5 n t* _5 s9 b& ~6 b plt.title('童芯派電量')# d( J' r; D* G6 A$ r
plt.pause(0.2)
+ h( e: R, ^& p) e, g7 q/ _ plt.clf()
8 }) H/ \8 ?+ t; I0 j5 h if cyberpi.controller.is_press('a'):0 E' J. c+ M/ J: T {
break
, X4 }- V H9 r3 {% m9 D if len(bri_list) > 500:
. C3 Q, A- s5 S7 i bri_list = []& z v7 S+ H8 M+ E: w" @" a
loud_list = []' b9 }) f" b f
5 a6 W R1 X' T& B# P$ j" g |