pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0. 下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分:
: e) E5 G, U" G! E7 [! ^7 l通用板控制见 pyb. - import pyb6 U) g. w* \$ O% ~' d C s& B
- ! `1 ?9 E' W8 ~! X( d( e( m9 }- l
- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)' t. d, A" F" u: ~1 k
- pyb.wfi() # pause CPU, waiting for interrupt
( ]' J: m" V; x* `" N# d8 j$ P9 t - pyb.freq() # get CPU and bus frequencies
' u' @9 `2 M, P1 S - pyb.freq(60000000) # set CPU freq to 60MHz- N. z5 U; T2 H* Q5 y9 c/ A. c3 y
- pyb.stop() # stop CPU, waiting for external interrupt
复制代码
! k- h- X2 A2 J/ R* {+ P
- C0 f. V9 M4 p延迟和计时使用 time模块: - import time
7 S) Q1 e& p* f
; Z0 ~- E+ {: L$ Y. R+ ?- time.sleep(1) # sleep for 1 second0 R1 V; I$ {9 O$ d! u
- time.sleep_ms(500) # sleep for 500 milliseconds8 }* o0 I6 x2 _" E( h
- time.sleep_us(10) # sleep for 10 microseconds
7 ]; T4 K+ H7 n- Y+ Q# t! s# T( f& e - start = time.ticks_ms() # get value of millisecond counter
' L7 c& u( ^. B0 a - delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码
4 X9 Y) Q& W; \1 p! E1 ~- M( C& B" x* s3 H2 H
内部 LED见 pyb.LED. - from pyb import LED
+ U8 h0 t+ o7 H% L
, l4 k4 C) @; J4 c; v- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue
9 W! b8 ?0 C! A* g - led.toggle()
& m" K$ C3 D6 J8 G - led.on()
) S$ c; h& ~1 W6 ] - led.off()
7 N c( f; G: z4 d) d - 7 d9 p# J- j1 d! E8 H6 s: P
- # LEDs 3 and 4 support PWM intensity (0-255)2 T' g" h! u+ l7 {# [- [0 T
- LED(4).intensity() # get intensity
! Y' z V3 |& X& @3 @* W - LED(4).intensity(128) # set intensity to half
复制代码
" c2 ]# p5 H) h3 @6 M C+ A9 o1 O1 @' L4 Q
内部开关请参阅 pyb.Switch. - from pyb import Switch* x J% @0 l6 }3 b' s" g' l
' @# C8 {" R. I2 O. V, B$ B' ~- sw = Switch()
& |' D4 b7 {7 b4 I- u6 @ - sw.value() # returns True or False
- q. Z u# `; [" F, o' a - sw.callback(lambda: pyb.LED(1).toggle())
复制代码
+ M% I2 K+ Q! H0 v$ I9 w3 k$ v5 F4 C" z
引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin# m$ Q( N5 \ a( e+ K( l
; \2 J, U( ]' r u1 v- p_out = Pin('X1', Pin.OUT_PP)
4 p; z" |. _/ a9 N2 o - p_out.high()
4 {5 N0 s0 V. [: u6 ^ - p_out.low()
. `$ _; t& ^0 `7 Z3 ?, q
# g* O" i- l- s1 c; [: y& e( j- p_in = Pin('X2', Pin.IN, Pin.PULL_UP)& y9 _8 h# n* B, f m: X6 s/ S
- p_in.value() # get value, 0 or 1
复制代码 + v0 d* R4 |, a( t0 x9 Q7 [7 U
. @" Y' k2 ]% F- j8 j3 M伺服控制请参阅pyb.Servo. - from pyb import Servo& B) N& x" u) x) B
- ( \: V+ ^# _2 @1 R
- s1 = Servo(1) # servo on position 1 (X1, VIN, GND)) ?, F: ^- j3 t+ N* W% Y) u
- s1.angle(45) # move to 45 degrees
6 T5 p0 L( m F: K m+ z - s1.angle(-60, 1500) # move to -60 degrees in 1500ms
" I# J7 V" R- T$ w0 l - s1.speed(50) # for continuous rotation servos
复制代码 9 O. v& I; t# k2 T
0 S9 z w0 g! ?0 Z. _: l* b外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt
' w5 C& I: R! t5 |2 l+ F' d6 ] - 7 J3 A. P5 R7 u2 Z
- callback = lambda e: print("intr")1 v; X* E2 I, L# w/ _
- ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码 + `9 T! L; I) l( a% E
( ]! v! ^+ L1 M" e% p8 c计时器请参阅pyb.Timer. - from pyb import Timer
u" [$ |3 J7 q2 S4 {( p - 6 ]7 b% S3 V' j- h$ h+ C
- tim = Timer(1, freq=1000)
+ B0 I8 J. j3 v - tim.counter() # get counter value o9 g. y3 q! B/ e
- tim.freq(0.5) # 0.5 Hz+ |! C) \+ X) A' T7 ]
- tim.callback(lambda t: pyb.LED(1).toggle())
复制代码 4 _" ^- V8 \: v p; g
RTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC" h* g) H: e) j# H8 P
- ( U: _% C/ G& Q! H! {! t" P8 w
- rtc = RTC()
$ `3 V9 }6 M/ D, u - rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time
$ B5 O- w. N1 m5 H: f - rtc.datetime() # get date and time
复制代码 ' [0 K- \1 L* p% O
PWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer
) i2 d6 R$ H' k/ ?. L6 o* [6 A
( Q0 M3 C% i X4 b, d5 g/ R- p = Pin('X1') # X1 has TIM2, CH1. t* U8 A; K) K1 W% s9 X4 K$ H
- tim = Timer(2, freq=1000)1 k" M6 y- Z% {& h* C
- ch = tim.channel(1, Timer.PWM, pin=p)
- e( Y9 b& U( k% [ - ch.pulse_width_percent(50)
复制代码 [6 O3 [# A) Z K1 B8 d
ADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC0 @0 R8 N6 M( j+ v* G$ M" Z
' z7 z. t: s6 n4 V, p H- adc = ADC(Pin('X19'))
. p: E. J4 u6 \3 j! P# f0 B C - adc.read() # read value, 0-4095
复制代码 6 [0 W5 Q2 l! D& I' j1 y$ ~# w
4 @2 `% b/ ^% q5 SDAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC
X* f. Y! [. A
* M2 B, i# g# U* P n9 H1 ~- dac = DAC(Pin('X5'))
. w, I+ P9 D& n: f - dac.write(120) # output between 0 and 255
复制代码 2 `, O2 e( s; |. `$ \
9 w1 S. ~9 O0 @( oUART(串行总线)请参阅 pyb.UART. - from pyb import UART
9 E( F" j7 X3 u$ Z
$ s3 F. @ L, {7 \- H ` H" S3 ~$ ~- uart = UART(1, 9600)8 |7 S' ?. w2 b7 b; a
- uart.write('hello')9 M: v' i& f4 s+ C; h& _
- uart.read(5) # read up to 5 bytes
复制代码
! h1 K& h1 @: K7 p/ H! R3 W( O1 G1 p) M- p) y: U4 f
SPI总线请参阅 pyb.SPI. - from pyb import SPI. f0 i2 M$ h! A' r/ ]
0 H% R! G- O* O1 e% j6 t6 c- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)/ L, @, Q. a/ D0 H! f, e# y: k8 Y
- spi.send('hello')
# M5 p2 \, ]- f, q. ` - spi.recv(5) # receive 5 bytes on the bus) B0 T. k! Z1 h S4 n8 o
- spi.send_recv('hello') # send and receive 5 bytes
复制代码
* @. K% R) m" k: p4 w3 P3 s9 B7 Y' d% w3 j$ e' U. ~
I2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C' K5 `' ~5 {) H! {6 P! v; |
$ U3 `2 y. F6 J; G) o4 h5 o' n0 h- i2c = I2C('X', freq=400000) # create hardware I2c object8 t" p8 a9 s( J( z y# w
- i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object
. v) `$ Q% n1 {+ R* b: k- e
! s' e- m4 r f. p7 G" ?- i2c.scan() # returns list of slave addresses
1 ~8 i% p% J% K - i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x42
* Y& o* m9 v9 f9 z0 d8 V& t. X - i2c.readfrom(0x42, 5) # read 5 bytes from slave# j' ` {) V2 N: t" X
, d1 N. B% \6 i3 G" {5 r. x7 ]- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x10) v' j) z+ T8 [: A: ]* s
- i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码
9 e, c0 k: C5 I: n
8 [/ {) c) S* [- q3 w! }注意:对于传统 I2C 支持,请参阅 pyb.I2C。
+ S! _3 `; ^3 {I2S总线参见 machine.I2S. - from machine import I2S, Pin. v; G: w M3 ^0 G P4 x9 y
- 5 P) ?& ^" c9 b4 q3 q. ~
- 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$ B- F+ Y6 O0 ]0 e+ u. D3 }. ^
- i2s.write(buf) # write buffer of audio samples to I2S device: R: h7 Z* x# v( ~
- 1 s& d$ |3 _) [6 s. C
- 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
6 R$ ~2 G3 X$ n: d7 |5 h - i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码 / K% ?8 ^0 X! ~1 _# \& `" Y: k% d
I2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。
0 V! p: n) [0 _3 y; fCAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN! \( ]5 u$ v9 F3 _5 z) n% Q
) o+ }+ [6 h7 o7 X7 B6 {; X- can = CAN(1, CAN.LOOPBACK)' I) _4 m# a0 F
- can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))8 A- p% e+ s2 i, p0 u( W8 `) Y
- can.send('message!', 123) # send a message with id 123
& I5 B- g: ^7 g, p5 g8 Y - can.recv(0) # receive message on FIFO 0
复制代码 5 h; U6 S. }. W
2 y! O4 Q6 W0 g! _内部加速度计参见pyb.Accel. - from pyb import Accel& S* q2 ? \3 g# T
- 5 f. }* W3 ]+ l; u8 B# F4 }3 f
- accel = Accel()
/ u* V( p9 B, a$ @# u# U4 u* D, m - print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码
7 |, e. L3 k2 ?) M3 ?8 v7 M3 Q2 I" H/ N4 O
|