pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0. 下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分: 0 p& t9 Z, K% `3 y m" n& O
通用板控制见 pyb. - import pyb6 u# \3 i. u( Z! Y/ {. w
- ; ?' l/ A0 K0 i- K" H+ f" n
- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1): t [6 R6 Q: m1 y
- pyb.wfi() # pause CPU, waiting for interrupt0 y- d8 f G: P. V
- pyb.freq() # get CPU and bus frequencies
0 S& Y* ]7 c( Y9 a- y- V - pyb.freq(60000000) # set CPU freq to 60MHz
; N o* g% y! J8 ^* | - pyb.stop() # stop CPU, waiting for external interrupt
复制代码 1 r: n" h( q# [ u: K [) S
9 V1 x3 j+ S6 ]) X# r6 ]' T延迟和计时使用 time模块: - import time1 K3 V, c% K, B, }. o( Q4 o: n: F1 ]
6 L2 X2 K5 z) a2 {- X- time.sleep(1) # sleep for 1 second
6 R3 l. [% l, j& w - time.sleep_ms(500) # sleep for 500 milliseconds
! ]: F" ]; W. P' ]8 m' t6 C% l' E - time.sleep_us(10) # sleep for 10 microseconds( Q8 g7 a E9 P/ @% O! s1 n
- start = time.ticks_ms() # get value of millisecond counter
/ x8 @( F' M1 N. e- g4 \! g1 V7 Y - delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码
$ u: J5 H& z! n' R& }! n$ u4 ~- ]9 f. s) s8 i
内部 LED见 pyb.LED. - from pyb import LED
5 \2 l/ M( X+ C Z* n
0 p ]+ D7 P! _3 y( G% x9 l- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue% j, q! \# ~5 k' Y) D) A
- led.toggle()
1 y% p: A% w; m5 P' J/ p0 J - led.on() k% P7 E5 g" Q
- led.off()6 L+ \* b3 x1 I3 l, {) e
: x( a- g5 [) X2 x( E/ y- g% |; x- # LEDs 3 and 4 support PWM intensity (0-255)7 z2 \2 l# }% g6 E
- LED(4).intensity() # get intensity+ V) [0 z" O( t0 z! \5 M; D7 a- e
- LED(4).intensity(128) # set intensity to half
复制代码 2 o4 L- u/ q( X( [" v3 P
7 L* N/ a/ S1 S9 Q3 C! s6 T内部开关请参阅 pyb.Switch. - from pyb import Switch Q# X- T' F: }4 g
- 8 \# n8 L) [' p Z, a, O3 J1 x% }8 a, q
- sw = Switch()
" U9 O# p$ o$ f2 x. _$ X - sw.value() # returns True or False" e) a& e# x* t+ |6 a
- sw.callback(lambda: pyb.LED(1).toggle())
复制代码
& ~8 F% }. J' y- s" C/ X5 f' U# z+ ^1 W6 B
引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin4 t/ P9 u7 f2 {( z7 B
- 5 ^" I/ q8 [& v) [3 b# ~
- p_out = Pin('X1', Pin.OUT_PP)$ g( [. F0 w8 Q, K
- p_out.high()
! }+ q8 Y. V9 t- d! e" u& z - p_out.low()
. p- w( g6 {! J9 | - ) V# f O' g4 s6 Q( S. o4 L. x
- p_in = Pin('X2', Pin.IN, Pin.PULL_UP)
7 t5 j9 U, Q+ K) B - p_in.value() # get value, 0 or 1
复制代码
+ W1 h0 i$ o' M1 c& L" }4 r# b& j$ p# L; r
伺服控制请参阅pyb.Servo. - from pyb import Servo! x) s7 B! z! A0 D B; U
- 0 ~/ L: Z9 X1 Y* W: G& y
- s1 = Servo(1) # servo on position 1 (X1, VIN, GND)
( A9 }& i0 C5 w, Q4 H0 Z - s1.angle(45) # move to 45 degrees
9 X8 Z: x# h& C. z - s1.angle(-60, 1500) # move to -60 degrees in 1500ms6 S8 Z1 ^" s: B0 o0 Y" [% ` E
- s1.speed(50) # for continuous rotation servos
复制代码 r4 i( i" c3 x& x
- f w* {4 x: ?$ b! p8 C3 I/ \外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt
$ {2 G% _+ w) e9 v1 l" h$ O
6 |: y' G" F1 ^$ v" `! {5 l5 V r- callback = lambda e: print("intr")' x) k6 h* }. F# S# W
- ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码 6 h( x: O" ^7 ?4 B
0 z S0 o5 o$ O4 N8 I. Z) w
计时器请参阅pyb.Timer. - from pyb import Timer1 G! J, X( z) Q
- - Q+ S& s6 Z) f- o9 i0 r4 N
- tim = Timer(1, freq=1000)
2 T0 b! U P( ?+ H* m8 I - tim.counter() # get counter value. z, g' \" Y% w% _, L3 w
- tim.freq(0.5) # 0.5 Hz
. p' K+ I# x; s. L - tim.callback(lambda t: pyb.LED(1).toggle())
复制代码
( p: X0 ]/ G6 J7 S V1 QRTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC3 ?; L; X8 ~) n7 `7 k& G% ]
; }* S4 G/ O6 N9 K- p- rtc = RTC()
I0 v* d5 `, Q0 A - rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time( S3 j- M1 C9 I
- rtc.datetime() # get date and time
复制代码 O W! s& F* X7 Z" a
PWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer
* X5 p3 a; q" e - ; C3 K4 z U" }& w
- p = Pin('X1') # X1 has TIM2, CH1( Q* o, l. K' L/ H1 `2 W
- tim = Timer(2, freq=1000)
9 ~0 X- ^' `' K - ch = tim.channel(1, Timer.PWM, pin=p)2 h \$ W7 Z) t/ R
- ch.pulse_width_percent(50)
复制代码
$ G/ v' K, }3 a' ?/ \4 I, b# @ADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC0 Y9 `4 |3 Q0 h0 [' b1 y
- p6 ~9 {/ W5 j! l3 y
- adc = ADC(Pin('X19'))
/ {- x" f, }) E0 w) I - adc.read() # read value, 0-4095
复制代码 / [5 b' u1 G& C- o# W& k5 o
" A3 R% l c) d9 x0 }- s5 Q! |DAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC! ?; Q {8 z# S) w5 r5 f
. V0 m! W- w! {1 j- dac = DAC(Pin('X5')), P" Y. N6 b5 A
- dac.write(120) # output between 0 and 255
复制代码 $ t0 Z v$ k' L+ l6 j( f
# s" x( F, a- F2 K/ G% p
UART(串行总线)请参阅 pyb.UART. - from pyb import UART' g5 W: z+ B$ i7 o( q j/ t
- ! |, a) x# j! F7 k
- uart = UART(1, 9600)
. o+ |$ Z9 |6 M4 _" I$ ] - uart.write('hello')* B" f6 d i* i( F
- uart.read(5) # read up to 5 bytes
复制代码 * A: c. l8 ^1 X. y
- d- |- Y3 J S& g* h# ]# P
SPI总线请参阅 pyb.SPI. - from pyb import SPI
0 P: E/ \; G- [; J - 9 ~( o. f! L; Q7 W" o* ?0 _( r
- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)
9 B- K" n! Q3 J# S6 B% x - spi.send('hello')# p6 A8 {8 D* \/ l
- spi.recv(5) # receive 5 bytes on the bus( m: Q* k @" ^ b! F( q
- spi.send_recv('hello') # send and receive 5 bytes
复制代码 ) o# P- _8 O' v5 g% n7 z
; s' b s* B8 K$ |. |# J4 G6 T
I2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C
2 X) |5 D/ d, k2 n( Z- u, f - ' Q: k5 P z/ A9 o$ Q/ O- J% B
- i2c = I2C('X', freq=400000) # create hardware I2c object* \6 a5 j8 A: P$ y0 Q3 x" h
- i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object+ Y# @* b5 w9 @! n! y0 v1 f
0 C% V; w7 g1 f* _ J- i2c.scan() # returns list of slave addresses
}( L( x0 d* h, ^$ g) q; h - i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x42
/ t Z4 F* D- h) y2 `* X4 R - i2c.readfrom(0x42, 5) # read 5 bytes from slave- I0 T: c$ Z. z; [: x
- 6 @5 V3 g l7 ^9 e% \( @3 u9 X: S
- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x10
7 n3 w+ i: U0 ?/ y - i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码
( Q* Q1 O7 C4 o+ G0 p: r& t1 }+ j
. |' A( J; g5 _" j* p$ x注意:对于传统 I2C 支持,请参阅 pyb.I2C。 2 p4 [& p! k* Z- l% r5 ?
I2S总线参见 machine.I2S. - from machine import I2S, Pin3 X0 O+ \8 p+ s: R! E- w; K
$ r* ]) G- _0 |9 D/ r- 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( @# H! b' V( G* m2 i4 H# b
- i2s.write(buf) # write buffer of audio samples to I2S device
% q4 `: a" a0 C. {& q
+ n# ]) Q6 M2 s7 W4 O- 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 object
+ P7 K7 m, h9 m5 ~, `, C- h - i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码 : m1 S3 K# A9 g4 {* b' D7 W* V+ |
I2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。 $ b- {9 s% x: y& E7 k' g+ b. |$ `9 Z
CAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN. l# x& b5 v1 y3 J N4 Y
0 A4 r) t$ c' Y4 E9 b/ h2 _2 R" [- can = CAN(1, CAN.LOOPBACK)0 @, T" ^$ i9 _" `5 n$ Q
- can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))
& ?3 ]* ]3 _4 u J- J( d - can.send('message!', 123) # send a message with id 123$ e1 M$ g% C8 M e) D/ X
- can.recv(0) # receive message on FIFO 0
复制代码 + {6 _. u4 c+ G* f& j! j
8 g% T) S; h, d* W2 P* G内部加速度计参见pyb.Accel. - from pyb import Accel4 G$ T6 N4 q' o3 m, q
- 3 T5 Z5 M) E6 W+ N6 D9 ?. k
- accel = Accel()8 j) T0 e: o5 ^
- print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码
" p1 E+ F1 \- j, f# [" X `/ m. U& Z- }8 E
|