pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0.  下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分:
. e8 L5 h2 U* q; H3 S! s2 X! [通用板控制见 pyb. - import pyb
6 B' E3 w$ h5 ~3 C P Y
, e; m P" `% T- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)
+ [& o% w' \ u ~# D8 ] - pyb.wfi() # pause CPU, waiting for interrupt
8 _$ `$ R4 R- T, P; e1 s - pyb.freq() # get CPU and bus frequencies2 e. t, w# s8 k- X1 z& F6 U* S5 f
- pyb.freq(60000000) # set CPU freq to 60MHz
5 w) u* u9 o$ | - pyb.stop() # stop CPU, waiting for external interrupt
复制代码 6 V1 y8 J$ B3 G" I0 T! Z; M
$ K' s) }) x# x' \延迟和计时使用 time模块: - import time* o" {; `6 K- l! n- f0 _
- " E% f6 `( Y0 p" n0 e
- time.sleep(1) # sleep for 1 second
9 K. Y5 d- X% C- O - time.sleep_ms(500) # sleep for 500 milliseconds; P! Z; p2 a$ h9 W9 a$ q
- time.sleep_us(10) # sleep for 10 microseconds
$ X) ~: }3 B, I# h* E* A5 M - start = time.ticks_ms() # get value of millisecond counter+ `# n9 B9 b: x2 a1 }* H6 \
- delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码 0 b) [" L& c7 ? {8 Y
4 D5 D! P1 j8 g7 n: ?
内部 LED见 pyb.LED. - from pyb import LED
7 p% Z+ \5 m/ _' L% j - $ N# }6 r3 I! U% v
- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue
+ |* t" Y( N' T3 E/ E* C' [ - led.toggle()# x4 {' [! O. }2 W6 k8 R0 W5 ~
- led.on()
; R9 n4 e5 `$ K g - led.off()1 R9 r: d+ V7 x1 G
. E$ O4 m& E: P( i; H5 q3 S- # LEDs 3 and 4 support PWM intensity (0-255)# K; ?- {( U) j. ?
- LED(4).intensity() # get intensity
5 T1 z' @0 X$ m7 s7 {' w1 @$ v* v z - LED(4).intensity(128) # set intensity to half
复制代码
" N. o# u; J( ^7 u9 o% q% c, v# M1 U4 l# m
内部开关请参阅 pyb.Switch. - from pyb import Switch
' E- ]7 A& ^+ S* r3 v0 H
/ L4 t$ m; [+ m5 l: X8 n- sw = Switch()- W. A6 \; Z" Q6 z
- sw.value() # returns True or False
2 g% d5 z) A) @# }6 f, w - sw.callback(lambda: pyb.LED(1).toggle())
复制代码
1 R2 x& c) e5 c& f
3 _ g" }4 M2 n- y" S1 ^引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin9 A- J& ^1 C+ f+ ?3 m B5 ^
- ( E7 R( n/ W& @* H: h. A
- p_out = Pin('X1', Pin.OUT_PP)
: h4 o' N( F' I$ E - p_out.high()9 y8 U$ b2 H2 X+ `: g2 m1 {) `
- p_out.low(): M& G c ?# O8 j4 _7 u5 V
- 9 d/ k2 b' @" g+ e# |' d
- p_in = Pin('X2', Pin.IN, Pin.PULL_UP)
4 v3 y! q+ q X0 B - p_in.value() # get value, 0 or 1
复制代码 $ a! ?$ X( L3 P4 j! F$ g
3 M. [: x0 r( e: I
伺服控制请参阅pyb.Servo. - from pyb import Servo
7 T3 e" x7 l$ l+ E
4 c/ O) [1 [0 x) U, ~& ?- s1 = Servo(1) # servo on position 1 (X1, VIN, GND)* _$ g3 u0 l( x& X9 T0 i: z/ S
- s1.angle(45) # move to 45 degrees
& t! U B/ Y- q6 U. T: A5 k - s1.angle(-60, 1500) # move to -60 degrees in 1500ms1 C E* p7 O2 t7 b
- s1.speed(50) # for continuous rotation servos
复制代码 5 W, R9 {1 g! O4 z6 k1 @- J4 V% f
/ ]0 e) Q) f S9 N4 o6 i外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt$ K) Y; x: O6 O( W+ |" K
- : B: M2 s, @% X* f$ x7 g3 ?! u& x
- callback = lambda e: print("intr")
) I3 ]- n! E$ I+ G6 Q$ F& i - ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码
8 D; j' H; }% g* _6 x2 l8 e7 u" y, V& T
计时器请参阅pyb.Timer. - from pyb import Timer P, S' i9 m% ~" z
- . q9 S% K6 i0 E3 k5 v$ P
- tim = Timer(1, freq=1000)
) S3 l3 b2 E$ @# L - tim.counter() # get counter value$ |6 u, a" l1 t0 W5 |9 y) _
- tim.freq(0.5) # 0.5 Hz4 A- A, R/ L% V& c# G: M1 \. y
- tim.callback(lambda t: pyb.LED(1).toggle())
复制代码 * C4 @2 m) [; ]* N* O9 {3 ^! \
RTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC% H; t9 z1 P Z3 }8 D& Z8 y1 J
- & A9 l2 t( a6 E! _' U1 p
- rtc = RTC()+ {3 Z/ }, N1 P. i" o
- rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time
, c0 X& f9 c, F B. Q: T: Q0 J$ D - rtc.datetime() # get date and time
复制代码
. p. b4 Y* J7 Q6 C6 f& W9 MPWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer: ^; G9 T/ v9 I% U$ Z9 C2 R
- : c# m' \3 K& m* m2 Q
- p = Pin('X1') # X1 has TIM2, CH1
2 b8 o8 |% M& L8 R M2 g( v - tim = Timer(2, freq=1000)
) g# m9 Y9 y! A7 y" S1 \- Y! W# C$ J: r - ch = tim.channel(1, Timer.PWM, pin=p)- C5 {% m. t: z/ }" b
- ch.pulse_width_percent(50)
复制代码 $ F4 d0 ?9 r' P
ADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC! P4 Q8 m* ^ G* _% `( Z n9 W
# U" j" h9 z$ {+ c X2 r9 T C- adc = ADC(Pin('X19'))
# f1 J4 P+ E8 L3 Z - adc.read() # read value, 0-4095
复制代码
4 ?2 \1 j. O( d6 h4 I- i! Y) C& N w! ?# A' I& m& I1 d
DAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC
# f! M6 V+ p v* s6 l- V - T1 D2 r' w2 Q) Y8 n) R
- dac = DAC(Pin('X5'))
* h) Y9 g: O& z8 F% h - dac.write(120) # output between 0 and 255
复制代码
3 I* q! M! {& [9 w( s! J7 R' U3 N/ h0 H
UART(串行总线)请参阅 pyb.UART. - from pyb import UART
f# j/ S& W% T) b0 A r - 2 o5 P, y( B; D, G
- uart = UART(1, 9600)( c7 \: `/ O, D0 P8 f+ c# L7 Q2 E3 Z
- uart.write('hello')
2 |/ v$ Y; v/ D9 b6 B+ l& _ - uart.read(5) # read up to 5 bytes
复制代码 6 o. ^; ~* N/ b8 T8 m( A& y
) n3 w; t4 K" _$ uSPI总线请参阅 pyb.SPI. - from pyb import SPI3 l3 {! d# j/ Z5 J$ d1 L( T
& S7 G* C9 R8 ]- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)
( O! r; x+ Y0 h1 \4 t- w" L& G) Z - spi.send('hello')
, K8 h% F# U; R# q - spi.recv(5) # receive 5 bytes on the bus
2 _7 X/ ]& F7 D' P; C - spi.send_recv('hello') # send and receive 5 bytes
复制代码 8 r- {7 R$ h/ K% n1 ?' S4 y
" U# \- T* G0 t6 s, h
I2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C
# E. W) E( M/ j+ I1 K9 I( }
! k/ X' Z1 \7 A. h& D$ p9 ]( h, D+ k- i2c = I2C('X', freq=400000) # create hardware I2c object
k1 c% L5 E( C6 u - i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object
) E/ O2 O) R: F. T5 h
& z* J8 X( w, C9 M D9 S- i2c.scan() # returns list of slave addresses
0 C* o8 M4 |% c [# X: C - i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x42' i) `) n3 B3 s
- i2c.readfrom(0x42, 5) # read 5 bytes from slave
4 }0 H4 e% A' S
4 D/ F/ u8 T9 ~7 M- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x10
+ d t+ S# A: G7 e! S2 b% o) h - i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码
6 @( u4 c& M. @5 r$ h7 r# x1 V" q! C( N4 G
注意:对于传统 I2C 支持,请参阅 pyb.I2C。 - @) m ?3 `% l2 f" i
I2S总线参见 machine.I2S. - from machine import I2S, Pin
' C$ k1 t$ R; M; x
9 o! \7 V$ s0 g/ a- 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 object9 l% m/ o# M% _; U1 w
- i2s.write(buf) # write buffer of audio samples to I2S device
7 K: X9 d+ ?, D2 m7 S) U7 m
& C. V1 {$ o. G/ p# ?- 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 object0 a0 a; u% J. ~
- i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码 ; p; Y, \) `* {; ]! b
I2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。
2 w7 _ e# }6 q' F, }+ JCAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN" }: E t) Z' N+ T% h. I
- F$ ?4 e( U; O/ I6 C" `% {6 g- can = CAN(1, CAN.LOOPBACK)
" f1 y* O9 q* J) S% Q - can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))3 o! ~3 e" r. \( |6 p7 L
- can.send('message!', 123) # send a message with id 123! o8 y7 F+ m0 ], T6 P; B: r0 m& e+ @
- can.recv(0) # receive message on FIFO 0
复制代码 : W; r8 }3 C. t z \! p
; h! E7 I' z' T' R$ f内部加速度计参见pyb.Accel. - from pyb import Accel
5 x, S: A& ~9 ?1 f - % a$ L! I+ j5 T. t. [, H
- accel = Accel()
% Q- |$ P0 P) l9 V; p - print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码
% l" I! G. u( a8 e! V3 ]
! I+ h. L3 _* O0 H/ R8 b& M. E |