查看: 9853|回覆: 0

童芯派搭配第三方Python編輯器使用教學[轉載繁譯]

[複製鏈接]
magiccar 發表於 2021-7-2 15:47 | 顯示全部樓層 |閱讀模式
本教學譯自Makeblock官方教學文件,原文點[我]
本教學文件以windows作業系統環境為範例,Mac使用者可以參考結合實際情況進行操作。
快速教程:如果您已安裝了Python環境和第三方編輯器,請跳至第三步。或在您的編輯器配置的Python環境當中安裝pyserial和cyberpi程式庫即可實現童芯派第三方編輯器的程式設計。
pip install pyserial
pip install cyberpi
1 h' L3 P1 n) J  R* o* I  B3 H
1.安裝Python環境
  • 進入Python官方網站下載Python環境包,請根據自己的作業系統進行選擇。建議下載3.6-3.8的版本進行使用。如果下載最新的Python版本,可能帶來無法正常使用的問題。比如Python3.9以上的版本目前是不支援Windows 7作業系統的。
    : \8 S1 G. V" h# I; t

Python Windows環境不同版本下載頁面:Windows Python下載

Python Mac OS 環境不同版本下載頁面: Mac OS Python下載

+ Q4 d: T/ _( k2 T5 [. H" m6 k: s: E
  • 按兩下安裝包進行安裝,注意勾選下方的Add Python 3.6 to PATH,點擊Install Now進行安裝,也可以點擊Customize installation將Python環境安裝至指定目錄下。
    3 {  H5 `! ?. y: J7 x
2.下載安裝並配置協力廠商Python編輯器(以Visual Studio Code為例)
提示:不同的編輯器在操作步驟上有所差異。同時建議在編輯器當中配置安裝在系統中的Python環境。
  • 下載 VSCODE,請根據自己的作業系統進行選擇。 VSCODE下載地址
  • 點擊下載下來的安裝包進行安裝。(根據提示進行安裝即可)  K. v$ P  y# `- R
  • 點擊桌面上Visual Studio Code的圖示運行程式。
  • 在軟體介面左側找到下圖紅色方框當中的圖示並點擊。
    ( k5 Z( {- g+ W3 h0 y2 R* D0 e

0 ?. Y  o& d: v+ Z5 V9 p
  • 在彈出的介面的搜索框當中,搜索Chinese (Traditional) Language Pack for Visual Studio Code,並點擊進行安裝。重啟後可以實現Visual Studio Code介面切換為中文。注意該擴展外掛程式發佈者為Microsoft。(如您習慣在英文介面進行程式設計,可以跳過此步驟)
    7 O6 L3 G) ?) W1 k8 k
& o) g% i  i. H( a8 }4 t- Q. G8 d
  • 繼續搜索Python,安裝Visual Studio Code中的Python編輯環境。注意發佈者為Microsoft。
    3 C7 @6 c( B8 L
  [3 p4 x0 U* E
  • 在Visual Studio Code編輯器當中配置前面安裝的Python編輯環境。
  • 新建資料夾並新建py尾碼的檔就可以對基礎的Python程式編寫。
    * E. {. s; W; o. M9 ^
' p. X: W% r. e4 c
3.童芯派第三方編輯器程式設計準備$ p* `* L; a6 ~
  • windows環境下,按下鍵盤上的win+r鍵,輸入cmd並按下Enter,然後會彈出cmd視窗。# n1 ?  k- L& P" ?
0 T2 s! x2 x5 [2 {2 R5 z" ]
  • 安裝pyserial程式庫,pyserial程式庫可以確保童芯派通過USB線或藍牙Dongle與第三方編輯器建立連接。
    2 j2 ~, b. Q. E2 X4 v

在cmd視窗中輸入pip install pyserial 並按下Enter,等待安裝完畢。


5 o# w' Q; {. V  v
  • 安裝cyberpi程式庫,cyberpi程式庫是用於對童芯派進行線上程式設計的Python程式庫。0 a* u: L/ h' S4 N4 H1 x& [

在cmd視窗中輸入pip install cyberpi 並按下Enter,等待程式庫安裝完畢即可。


# _/ O/ `3 a: f1 W$ Q
查閱cyberpi API文檔見:童芯派API文檔
6 U0 y  I. b0 u: }! p/ h9 G. Y4 @
  • 完成安裝後,您就可以在配置了Python環境的編輯器當中進行程式編寫了。& F  D. g0 f# A2 v
2 D( D* }4 |) o/ b/ C
4.注意事項
在第三方編輯器當中目前僅支持對童芯派進行線上模式程式設計。
1 f  p" j9 z" d0 {# _' H
5.一些程式設計案例! J( |% C: z$ b+ ?5 [
童芯派滑鼠
需要安裝pynput模組,參照上面的步驟pip install pynput

" }7 W7 r* k( P5 L, w" N功能介紹:6 Z& \! B; r8 |1 ^3 g, x# t) w
利用童芯派的陀螺儀模組和按鍵結合pynput模組的滑鼠控制功能,實現滑鼠的功能。
5 p; Z- w  S! R, [2 S  A2 J* T# i3 D通過陀螺儀控制滑鼠移動。通過按鍵實現滑鼠按鍵功能。8 t8 J) I8 T( d
結合藍牙模組可以實現無線滑鼠的功能。! O) N6 `/ j) l; |# F$ L, o

3 I9 o4 ?4 l2 p, D& p3 T* B: I0 ~from pynput.mouse import Button,Controller
. C; s( h# F  F8 ]: Bimport cyberpi4 n5 q  D7 \* ?  L, v7 M* _
import time! x: V3 h# t8 R0 L: f, ]# \8 N+ b
2 ~) L% g+ B. a! J
mouse = Controller()+ v, C* {4 O% K4 p9 y! E
/ a: @/ P; q2 ~, e) G- L
while True:
; L8 v* ^! f) {0 t+ h2 X5 m/ x   if cyberpi.is_tiltback():; F. b8 }3 @5 h4 s5 p6 R
       mouse.move(-3, 0)5 o* k6 x; w( i. x
       print(mouse.position)7 W. a! D: r" K! Y/ k. c, l1 I
   if cyberpi.is_tiltforward():
5 C" e8 J7 s% j# I6 U  E, s       mouse.move(3, 0)& h0 c9 F/ N* c* S, G
   if cyberpi.is_tiltleft():% R3 Y& V+ I8 o8 u( ]
       mouse.move(0, -3)4 ?; H" L' m0 s2 l/ ~% Z7 [
   if cyberpi.is_tiltright():
1 t0 l6 P/ l% w9 |       mouse.move(0, 3)
  M2 m+ Q. P% c   if cyberpi.controller.is_press("b"):: y! L7 l, D. m4 F" |& g7 @
       mouse.press(Button.left)# a) e( \. i* t# @. _9 k
       mouse.release(Button.left)4 O1 }+ N, \; @6 w' j% D
       mouse.press(Button.left)# i( I5 l& \4 z' r# y; y0 j2 F$ k
       mouse.release(Button.left)8 y# e1 V, o7 u: d- |: H
   if cyberpi.controller.is_press("a"):3 }# z% K! T7 a! p
       mouse.press(Button.right): Y7 k! Q8 Y! h5 c: y- T
       mouse.release(Button.right)
8 q6 y) B1 P% [. P3 d( b    time.sleep(0.01)
; o  i1 t; |. w7 _( u0 _3 l4 q9 @0 a2 G7 w) V* p; X$ U

  ?% R- Z& Y  h, h
語音打字器
7 ~. ^8 W0 K* `" L- Q
功能介紹:
4 i, o2 }* |" v2 ^7 w8 l& U利用童芯派的語音辨識功能結合pynput模組的鍵盤控制功能。
) E* Q: R* @4 @) B9 F9 ~9 u將語音辨識的結果通過pynput在文檔中打出來。" M: i. M  S  Q
該程式目前只能支援英文。
( n- e0 I  e! W6 [+ p0 V; v# u1 f2 u6 v( {* x7 Q$ E
import cyberpi3 `2 b/ f% D. s) {/ ^; s
from pynput.keyboard import Key,Controller
8 r2 y7 ]& e5 \import time5 l5 N$ E. l5 G* P
* x8 |& S3 j7 r2 k
keyboard = Controller()8 T( J0 a0 X" c' ^' z" H
cyberpi.console.clear()
/ ^. J$ h5 a5 E, Dcyberpi.led.on(0, 0, 0)
, O* d# r: u9 |: n- ^; B' `cyberpi.set_recognition_url()' V6 p& u7 m) |  }
cyberpi.cloud.setkey("請輸入雲服務授權碼")    # 通過慧程式設計帳號可以獲得
" e7 k* |9 C4 L. `# l; Icyberpi.wifi.connect("WIFI名稱", "WIFI密碼")
# L% z7 G1 j8 @0 x9 |7 qwhile not cyberpi.wifi.is_connect():
  y3 c  [( r# a" q; B   pass9 D8 W0 l  M3 m5 A4 e: H
cyberpi.led.on(0,0,255)6 `" H) K# J5 w( \% q+ q
cyberpi.console.println("WIFI已連接")* q1 l3 Q7 M7 A. i
cyberpi.console.println("--------------")
% ]7 t& m# I" `$ ?% K8 _7 Scyberpi.console.println("按下A鍵開始語音辨識")
/ E% d7 w0 c; P7 Dwhile True:, |$ [+ e8 W7 H; E; M
   if cyberpi.controller.is_press('a'):7 n4 y# N- b6 {$ D2 |' b! }7 |/ Z
       keyboard.press(Key.space)( P1 w( E: ^8 }: {
       cyberpi.console.clear()
: x  ~+ L7 S; k: b% }/ @       cyberpi.led.on(100, 0, 0)+ I3 P7 L/ k+ ~+ X& T
       cyberpi.console.println("開始語音辨識")
: E$ }/ D7 W( Z3 T, E- ?! r       cyberpi.audio.play("switch")3 ~* y$ o0 I; ~. m
       cyberpi.console.println("--------------")* w3 _, e1 O2 J& I! t. z& Q
       cyberpi.cloud.listen("english", 2)
+ {5 B. e. k( U( n% P: U( I       cyberpi.led.on(0, 0, 0)! T- }  X6 L6 _$ A! E. m" c
       say = cyberpi.cloud.listen_result()
% s  w+ A: C- \& {) ]7 D. ]6 p       cyberpi.console.println(say)
, x1 y0 {" ?+ I, Z# l3 N0 O) ?; Q       cyberpi.console.println("--------------")- v6 q6 l. l* E) T8 L, Q  }! n( M
       for i in say:6 A6 `* }% f6 z, y, A) o7 F1 k
            if i == '':$ Z: O4 j3 E' P( p
                 keyboard.press(' ')
9 J* D, A& E7 u, Z* l            else:+ L' J1 O1 \5 x$ j! s" X
                keyboard.press(str(i)); m5 ~5 |6 i' j: P" R
                time.sleep(0.03)) A* v- u9 H1 V$ O- P! o4 D7 s
0 e0 f6 f+ a& [1 ~
matplotlib音量柱狀圖
- o% Z8 w5 w4 R
import cyberpi
* `. E8 G+ R4 P1 H8 A- x- L" Zimport time
2 Z( e. g$ x. _1 M$ H7 K1 f: n1 rfrom matplotlib import pyplot as plt
6 r9 y, i1 L) N
) T7 R# d8 r6 ]# u. a0 p. Iplt.rcParams['font.sans-serif'] =['Microsoft YaHei']$ |; V/ g; K! J* U' t; K
plt.ion()5 }( k$ O' V" j& R  s

. A  q" D8 X/ G6 q- O* bwhile True:
! N; m- O3 Q& E+ d7 r" i- ~0 w   loud = cyberpi.get_loudness(); t( J8 R8 I1 c. E" H1 @
   plt.clf()
$ U' d! u5 z  a# u; X( Q* R9 {   plt.xlabel("數據名稱")
; B# C, H0 H2 t% T- y8 ^# e   plt.ylabel("音量讀值")( ~. F, G- m5 h6 W
   y_locator = plt.MultipleLocator(5)
1 _9 l/ F" G7 p" A   ax=plt.gca(): T! q$ v( W) D% P. o
   ax.yaxis.set_major_locator(y_locator); Z/ s- q. o3 S' x# I( K8 q7 U
   plt.ylim(0,100)
. G9 H5 }! l3 \" @3 J   plt.bar('音量', loud, align='center',label=f'溫度{loud}')  N% o+ `! N4 L+ F: y
   plt.title('童芯派聲音感測器讀值')
  ~) N5 I; v& W. r! S   plt.legend()" b! h" P- k9 x0 ]/ p* M. S& G9 g7 M9 m
   plt.show()
& [* a7 i/ ]8 F, K. m    plt.pause(0.01)* R9 _# A$ Y, [" E4 P
4 ]0 H* l3 i( a; S3 X; V; B# ]2 d$ V

; D5 i6 `5 C) }% e) T& `5 g8 ?matplotlib 多圖表顯示
- d& q0 N# {8 `8 k* U
3 v. e0 n0 N5 _7 K, d
from matplotlib import pyplot as plt
9 W. a" u0 O$ q) G& j  v9 g6 |import time
3 ~( a! w: y3 Y- ?import cyberpi
. C$ L% A0 z* Q8 j$ m& |# ~) B 1 h7 O  d! }1 W" R; i3 Q
loud_list = []
" U4 A% G, V, Z5 z; cbri_list = []
+ x2 O9 Z) u' j5 |. b* xplt.rcParams['font.sans-serif'] =['Microsoft YaHei']   # 載入中文字體,這裡載入的是電腦的自帶的微軟雅黑字體
4 h1 }3 T5 J9 n8 splt.ion()
5 I6 I6 T0 G- j& p0 A+ j! Fplt.figure(figsize=(10,10))+ {' p6 F% K( }: X' x- G8 n7 {
plt.figure(1)2 g$ G, C; {( x/ A' U
x_locator = plt.MultipleLocator(5)
7 [# \5 l4 J# @y_locator = plt.MultipleLocator(5)0 I3 z1 [; @2 a& Z1 g
while True:( t. |& C( e, s6 o  ]5 {, W5 R" S) L
   loud = cyberpi.get_loudness()  F7 }) D* D! q1 P$ D
   bri = cyberpi.get_bri()& d! m) D$ ^7 B  ]
   loud_list.append(loud)
0 I; P7 V/ B! B4 F  F. z   bri_list.append(bri)
6 T+ r$ s9 I# `) @! `   battery = cyberpi.get_battery()4 j! {% ^' z& K/ e7 x+ }. t- t
   size = [battery, 100-battery]
. \3 Q% ?& G5 t# D9 o3 H6 b   status = [f'剩餘電量:{battery}%', f'已用電量:{100-battery}%']- n; _9 T9 O6 }! B9 w( }. ~' Z! W) q
   ax1 = plt.subplot(221)  P8 t; a" N- o& n" P# ^* {5 a: }
   plt.title('光線折線圖')4 ~, N1 g2 A+ @9 d6 `& v* }/ p9 p# ]5 |
   ax1.plot(bri_list)! [/ J& z( S2 L/ q% q
   ax2 = plt.subplot(222)9 b. @7 T6 j4 l" N2 c, m
   plt.title('聲音柱狀圖')' b& C( `% f' k8 g& l
   ax2.xaxis.set_major_locator(x_locator)
  L9 `, U1 O: L   ax2.yaxis.set_major_locator(y_locator)$ }5 L5 b5 [4 q3 s+ ~: y
   plt.ylim(0,100)+ Y/ d8 n, b' a, y# n7 u; k! F
   ax2.bar('sound', loud)6 v4 k$ s$ m" D" |5 ]
   ax3 = plt.subplot(223)4 z- }; G7 h* X# l$ h8 W7 ^$ Q5 Y
   ax3.xaxis.set_major_locator(x_locator)6 z* q! }% d, J
   ax3.yaxis.set_major_locator(y_locator)2 I& L7 }9 L9 v0 G" s  j
   plt.xlim(0,100)
, P: O+ U- v% p% G: u" K/ i: q0 [   plt.ylim(0,100)
5 }' v! M% Q0 C2 r$ [9 M   plt.title('聲音、音量散點圖')
4 L4 ~- z+ ?6 C6 l6 \  }   ax3.scatter(loud_list,bri_list)8 Y5 n& L, a: p: ]0 s" A; L
   ax4 = plt.subplot(224)
4 w, a: ~6 h: P' ?5 n" T   ax4.pie(size, labels = status, radius=1,wedgeprops = {'width': 0.3,'edgecolor': 'w'})# B% k  U# |) r. p
   plt.title('童芯派電量')
7 X& B3 E6 K" u   plt.pause(0.2)
" C( S& f' b  S* ~/ g   plt.clf()
1 r0 q1 ^, I( t; s, S% O1 }   if cyberpi.controller.is_press('a'):
0 N# m' c+ H: v; d! \) e- J/ P       break
, O1 }1 M7 x# j. ?   if len(bri_list) > 500:7 R8 }& \/ g: N8 b  i; W
       bri_list = []  X; ~1 M1 o8 A1 f; G0 \9 W" L
        loud_list = []& D0 A7 y5 ^6 P" X; @* V" l

9 w% r0 v4 T) Z1 [, w

本帖子中包含更多資源

您需要 登入 纔可以下載或查看,沒有賬號?立即註冊

×
您需要登入後纔可以回帖 登入 | 立即註冊

本版積分規則

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版發帖返回頂部