pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0.  下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分:
3 }5 K$ ^8 y1 w' R' h! p6 F# _2 I: b8 X通用板控制见 pyb. - import pyb
" Y& ~8 Z" w, m( C: T
& y- I! d, R, O# ^( j3 \- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)# Y$ N' Z) l5 K, G! D/ W
- pyb.wfi() # pause CPU, waiting for interrupt9 j. P- ^: s" W9 F# d5 x
- pyb.freq() # get CPU and bus frequencies
/ T8 e& c R4 A6 N - pyb.freq(60000000) # set CPU freq to 60MHz1 h% T+ d; O& V5 P6 u& e% p3 P8 D& y S
- pyb.stop() # stop CPU, waiting for external interrupt
复制代码 * c9 J$ B! p* o6 {& y+ r$ y K
, t% \( R" e5 y2 K; h, U! s延迟和计时使用 time模块: - import time$ D9 J, T# l1 J" t
- 2 j4 i: N% v2 R6 r- T
- time.sleep(1) # sleep for 1 second
. a. F7 p4 k7 G9 p/ ~# ] - time.sleep_ms(500) # sleep for 500 milliseconds
. f/ F; k& n; j6 J" g - time.sleep_us(10) # sleep for 10 microseconds2 X q: t! `! ]5 W- ^, [' u- q
- start = time.ticks_ms() # get value of millisecond counter
' s1 y+ R+ N0 W2 ^ - delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码
8 T, t. u6 B! N& @# D4 F, z
) |- ?; z: i+ ~% B内部 LED见 pyb.LED. - from pyb import LED
1 T; W6 ], [9 k& y# J) Y
- K. b7 ~3 q2 S2 K2 @- s- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue
; B6 y2 _# s$ O" _; J - led.toggle()2 D+ ~0 r; |. D. \( ^* j
- led.on()
5 P [+ l' P% Y v - led.off()
$ s9 M) X" d& J" \6 ^
3 [# F5 `. o( f0 o& _- # LEDs 3 and 4 support PWM intensity (0-255)
/ k8 S5 |# E k9 f - LED(4).intensity() # get intensity
& v6 g- t) Q, o* U - LED(4).intensity(128) # set intensity to half
复制代码 , S1 V4 s4 w3 N" o+ q7 {5 G2 Y3 T5 X+ ~
2 a& C, N/ [! T) f" t
内部开关请参阅 pyb.Switch. - from pyb import Switch0 ^! s7 R- d9 a7 A8 T) p+ `; i
- 3 o8 ^( R0 J. V* k) h
- sw = Switch()
1 Q) f8 E9 j! g - sw.value() # returns True or False3 x! \$ D! f3 F" D
- sw.callback(lambda: pyb.LED(1).toggle())
复制代码
/ ? _5 w6 { U, a9 P p) I, g1 M" |) A% f
引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin0 g$ s9 X! ^( t$ G0 H5 ]* U
- 0 g& `- h! S/ S$ @1 g
- p_out = Pin('X1', Pin.OUT_PP)# M/ M1 h5 L* G; u
- p_out.high()
0 B6 G, n" u% C d - p_out.low(). ^- ?9 S4 q. b+ ?
: q/ N7 B# ]% W- p_in = Pin('X2', Pin.IN, Pin.PULL_UP)
/ c5 Z+ T7 n! h. _: j5 j# i2 G - p_in.value() # get value, 0 or 1
复制代码 ! J) j2 Q* C! j+ O( f
3 G+ j% L. r" H0 V
伺服控制请参阅pyb.Servo. - from pyb import Servo: ?- c1 \" ], a4 r3 Z* j
/ I3 g3 J- h: l _- b" y- W* d- E- s1 = Servo(1) # servo on position 1 (X1, VIN, GND)
0 L9 l& C# ~. g S - s1.angle(45) # move to 45 degrees, v# b w5 t+ ]# a
- s1.angle(-60, 1500) # move to -60 degrees in 1500ms
3 x! D" M) q2 a; ^; G# I - s1.speed(50) # for continuous rotation servos
复制代码
& }% Y% Z, w. {4 r
7 s- O" q9 ?7 e, m' u外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt
2 @7 p+ o6 W2 Z3 D( m8 T1 g
3 Z9 G4 v2 r! h; O- callback = lambda e: print("intr")
% b9 d( e9 e- c% A - ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码 + I0 |% W5 ?" x
( M5 G: T$ V' R5 F3 |8 w3 m/ _4 f
计时器请参阅pyb.Timer. - from pyb import Timer9 `" C; {* i( E
- 2 Q7 }& S2 k* o4 a% f+ @
- tim = Timer(1, freq=1000)) g! q/ B+ E2 j% Q$ l% m9 W7 E1 V
- tim.counter() # get counter value
) i' l& x/ K. n" _ - tim.freq(0.5) # 0.5 Hz
; Y& w" s! W& }- K# { - tim.callback(lambda t: pyb.LED(1).toggle())
复制代码 - i$ H9 \! R; }1 F5 Y( T' ^# f
RTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC8 }8 ^8 @" f2 i2 P
5 }: \" _" y h+ S; e- rtc = RTC()
9 ]/ [+ e! `. K/ R& n$ |' q - rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time
( d$ Q+ h! i: Z- F - rtc.datetime() # get date and time
复制代码
& w# k; _. N @0 ^# W$ kPWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer. E+ I" x- z! \4 ?1 o0 I
- ' ]1 r. N: T5 _" s
- p = Pin('X1') # X1 has TIM2, CH14 K$ u' V- j- O( m" v" J
- tim = Timer(2, freq=1000)9 l3 _% W1 b7 _7 F2 `$ e, z4 j
- ch = tim.channel(1, Timer.PWM, pin=p)
+ K* F3 ^4 n, `; S4 K - ch.pulse_width_percent(50)
复制代码 ! L5 W& q$ C. M m8 s- ^* K5 O7 ?
ADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC
) G, z+ N6 o* U( t
% w# S' c0 Y3 ^/ [1 b) ]0 b- adc = ADC(Pin('X19'))
5 H4 D$ `9 B+ m( J - adc.read() # read value, 0-4095
复制代码
% P6 i6 u! [. X0 y8 F+ [2 l
; H8 t# f z* i/ h' JDAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC
' r8 |/ u5 @# b' L - 9 u1 W# B8 y9 f1 r
- dac = DAC(Pin('X5'))
9 s' ]! A/ Z; [- ~1 L0 o - dac.write(120) # output between 0 and 255
复制代码
, ^9 S6 e+ _6 L3 q; q& j. s# z
UART(串行总线)请参阅 pyb.UART. - from pyb import UART
5 O ?; C: ~0 q+ O" k( \ ^' t0 l - 8 d j1 v- V2 B: {+ M
- uart = UART(1, 9600)8 _# p7 `4 r9 G3 g- Y" b
- uart.write('hello')2 i( e9 V% Q A6 l- ^
- uart.read(5) # read up to 5 bytes
复制代码
% Z( G3 s- Y$ u& g9 K8 S! C' B, _
SPI总线请参阅 pyb.SPI. - from pyb import SPI
4 _* J" ~ v4 O, M; D4 R
' A. a; m3 p3 p7 v- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)( s$ x7 k9 K5 u/ P+ J+ d7 b
- spi.send('hello')
6 y# y' [) b8 T( g% s9 ]- ^5 Z - spi.recv(5) # receive 5 bytes on the bus: n# y5 |+ [8 R& X; n3 Q3 j, L: {
- spi.send_recv('hello') # send and receive 5 bytes
复制代码
% z9 B: w! X" a$ s1 c2 c3 u9 g* S, f8 X; W' ?* w( ` O% @! @
I2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C2 V7 s2 B/ e- O6 t; k
- ( y+ t+ }6 e/ R3 e- n$ o4 l
- i2c = I2C('X', freq=400000) # create hardware I2c object
; Q) S& j9 ~/ g" }( r7 I Q% p - i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object
- u2 H4 r B) W( z
4 F3 J, Z' G' M% @( q- i2c.scan() # returns list of slave addresses
; h# P8 ]4 A! T1 Q2 T - i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x42" c, X4 f2 Y# A& y3 v
- i2c.readfrom(0x42, 5) # read 5 bytes from slave7 h! U. c, t1 O( |' ~
; V, V# K p% N( \& B- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x10" }2 `) }5 d8 \# z9 }
- i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码 ; F2 d: F4 Z3 L$ W! W$ q
2 e6 E5 m# C8 @$ i6 P O& J
注意:对于传统 I2C 支持,请参阅 pyb.I2C。
2 W3 E: W% F3 I5 |) k+ U5 ^I2S总线参见 machine.I2S. - from machine import I2S, Pin' J- T% Q% w1 k1 P* c7 e/ w
_4 ]# m$ M3 x, T; H- i2s = I2S(2, sck=Pin('Y6'), ws=Pin('Y5'), sd=Pin('Y8'), mode=I2S.TX, bits=16, format=I2S.STEREO, rate=44100, ibuf=40000) # create I2S object' u- v! R) n) I. v% w" F
- i2s.write(buf) # write buffer of audio samples to I2S device$ a5 f @1 F# A3 T. e+ Q, n. @
- # F4 S7 S4 c( N
- i2s = I2S(1, sck=Pin('X5'), ws=Pin('X6'), sd=Pin('Y4'), mode=I2S.RX, bits=16, format=I2S.MONO, rate=22050, ibuf=40000) # create I2S object9 ]3 N# z. M+ P8 B. i$ f3 } j0 O
- i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码 5 \2 K: H- W* A7 h; ?* h6 b
I2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。 ( H. O1 e- _2 M) h' j1 o
CAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN% _9 H. f1 R0 |- g: ^
9 V" ~- G7 b/ ?! ]- can = CAN(1, CAN.LOOPBACK)
$ `) k' x2 l% C2 P4 d - can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))6 b' N: v6 j& e& X) i! R. F$ Z: [
- can.send('message!', 123) # send a message with id 123
) J6 C( Z' O5 {) I - can.recv(0) # receive message on FIFO 0
复制代码 1 m, P6 w; N; s
) |# Q) y, H& L+ W4 M. I" a$ k( B
内部加速度计参见pyb.Accel. - from pyb import Accel; m+ w H! V& C4 X6 `
- ( e. Z# m! K, ~' n# m6 B
- accel = Accel()+ `0 S+ _5 B: u) }' K
- print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码
0 F$ D9 F/ b! d# G; ?; V. q: S$ h2 D" H$ a. ^/ R8 i
|