pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0. 下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分:
" s6 V u# _4 Q6 {/ h7 v+ A通用板控制见 pyb. - import pyb$ }7 D3 Y7 o# z; I$ t2 M
- ) g0 C Y8 b$ ~9 c) M# f; G
- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)' g" B8 B, B z: j" D8 H
- pyb.wfi() # pause CPU, waiting for interrupt+ O; D7 ^$ w$ [
- pyb.freq() # get CPU and bus frequencies
" N0 f( N2 ^' ?2 \" S - pyb.freq(60000000) # set CPU freq to 60MHz
$ b" ^" [: D, U$ B/ U - pyb.stop() # stop CPU, waiting for external interrupt
复制代码
9 Q4 X6 u; j% a- C: m0 `& n/ }, a( d
延迟和计时使用 time模块: - import time
4 Y, X* e: A. z" t - % R0 g& S& h$ `- W+ D6 s2 {0 Y
- time.sleep(1) # sleep for 1 second
) y) Y* Q; b( C( h* C - time.sleep_ms(500) # sleep for 500 milliseconds8 \% P$ I" g& p
- time.sleep_us(10) # sleep for 10 microseconds
. M) @/ ?) @/ J4 @ - start = time.ticks_ms() # get value of millisecond counter
3 u6 a) o6 C1 ~% B: G* j' `/ S - delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码 1 _0 s- Q5 G( a; \& I7 C
0 J( G2 X( f0 ^内部 LED见 pyb.LED. - from pyb import LED
( j( S9 W$ o! C# s
! j) x0 J( c8 t0 [1 S0 A- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue
0 V2 o' q3 [' [+ j) }5 [1 b' r9 X: M - led.toggle()0 N1 [/ d" R* t3 t( u
- led.on()( ^4 v& D K. ^# c
- led.off()
2 [7 @( [% b7 c0 E7 x: n - 8 r. ]- A3 J b3 |! q+ C7 b
- # LEDs 3 and 4 support PWM intensity (0-255)
. y4 ?( B& v! m4 T8 } - LED(4).intensity() # get intensity* }: t# J( K0 v$ o- r- [
- LED(4).intensity(128) # set intensity to half
复制代码 6 N4 n' s, v5 a% c- }$ }% a! V! Y
$ X6 Z. ~& h1 [
内部开关请参阅 pyb.Switch. - from pyb import Switch6 r; c, ^7 [2 ?
J0 i7 y% n6 H/ J- sw = Switch()
2 I* }8 @5 H# b( J& z - sw.value() # returns True or False
. u0 c5 C+ B3 G& } - sw.callback(lambda: pyb.LED(1).toggle())
复制代码
6 Y- M" X+ E7 W& C/ \
- N) u1 ]- f, b7 U4 x引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin
% j3 P: b! \# B# k/ o) u4 \
/ E9 }8 }: J$ E& Q) S- p_out = Pin('X1', Pin.OUT_PP)- V/ k" v# y$ c, N
- p_out.high()5 f6 i3 R! c2 M: Q I4 S
- p_out.low()
6 Q, P9 y' i6 Y s% k - 6 g8 h4 g+ M1 ]) |: l
- p_in = Pin('X2', Pin.IN, Pin.PULL_UP)' T+ B3 F7 {( x) X) a/ J
- p_in.value() # get value, 0 or 1
复制代码
7 `# a' _) u( j# F2 D+ B" E. ^: i* ^. G
伺服控制请参阅pyb.Servo. - from pyb import Servo
# v6 Q% B6 T2 k I- k% n$ g; q2 w - - w2 f3 e9 R9 r" r2 {
- s1 = Servo(1) # servo on position 1 (X1, VIN, GND)# @. X0 [% B+ h5 I
- s1.angle(45) # move to 45 degrees
/ @0 k3 Q4 T+ D1 Y, W - s1.angle(-60, 1500) # move to -60 degrees in 1500ms$ W; a* w i( H2 Q" f7 g% R- w7 |1 { C
- s1.speed(50) # for continuous rotation servos
复制代码 ( W4 v1 e! N& a$ j7 P$ N( b# f1 j
. S0 R! w. g/ T1 s5 s7 y
外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt# \' k# t$ a$ M7 x4 z/ @! w
- : B# N$ z) D$ M- p- |3 I% q
- callback = lambda e: print("intr")
7 E4 E1 T. u; i3 I - ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码
B, ?3 j7 I4 w2 o& ^ U" p0 M4 w( c/ c# A
计时器请参阅pyb.Timer. - from pyb import Timer* L+ p1 h% i' S% [( N" O
- # ?' o2 M+ z H
- tim = Timer(1, freq=1000)
6 B1 x$ U; F k ?& o* J! { - tim.counter() # get counter value
, J& m/ C! v& F" w - tim.freq(0.5) # 0.5 Hz1 t3 K% p- M; b3 ]; y+ R
- tim.callback(lambda t: pyb.LED(1).toggle())
复制代码
) X3 A' w5 ^8 _1 sRTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC
; a% A+ ^3 w* w" V - " z3 L6 _/ \- B' p, L+ `2 l
- rtc = RTC()
* A( E. ]: U$ B4 u8 @* ?! X) @$ j - rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time; l0 N6 ~. A; f7 W$ W7 T
- rtc.datetime() # get date and time
复制代码
/ B, ?6 c* q4 }8 pPWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer
6 v' n$ O0 h. f7 |9 l' ^4 | - " i7 n! J% S6 U# @* N
- p = Pin('X1') # X1 has TIM2, CH1
$ j- P7 {4 |5 S - tim = Timer(2, freq=1000)
4 C4 ]: W @; C2 q) H, J( b& B - ch = tim.channel(1, Timer.PWM, pin=p)
( a4 L. n0 S5 q - ch.pulse_width_percent(50)
复制代码 + N! S7 h8 ^: N' n& s5 O
ADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC
* M* e9 `' B' M0 b$ V$ m - ' c2 u- @1 ~$ q/ [7 a* ^" m
- adc = ADC(Pin('X19'))
8 M; w2 c9 S4 } - adc.read() # read value, 0-4095
复制代码 $ ]+ B( V& V4 l. `& a1 q; A
; p; ?) n0 m; O' M) P+ P- @
DAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC/ B( x+ ]/ \4 K& a
0 ?0 f; E: n$ S! q6 o- dac = DAC(Pin('X5'))
6 r4 F$ k" V0 w, C - dac.write(120) # output between 0 and 255
复制代码 , ]' @0 N v5 c; a6 V# y5 ~& K! e
/ b! P7 x- y1 y) w. n; `$ p$ u
UART(串行总线)请参阅 pyb.UART. - from pyb import UART
: h0 |; z8 {* S2 k4 p9 d - " S- x- `+ d+ y. D5 a9 L
- uart = UART(1, 9600)
6 D/ W5 K# r9 @6 t8 E/ r - uart.write('hello'), o" Z1 B! r% C# Z4 ^" o" [
- uart.read(5) # read up to 5 bytes
复制代码 + j' Q2 Y4 _. B% H8 s9 ^
. i' T, {6 }3 [) @7 u6 aSPI总线请参阅 pyb.SPI. - from pyb import SPI
9 C, M N, H: K3 g9 r" I - ) a+ }2 g5 [) a
- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)# w! R& X V- m" |8 o; D! b
- spi.send('hello')9 a; C! e; n6 B2 M
- spi.recv(5) # receive 5 bytes on the bus
0 D( o R% I- i Z/ w9 B% ` - spi.send_recv('hello') # send and receive 5 bytes
复制代码 & V# H; }, p6 X; S3 T$ v6 S
8 q1 w: Z0 G% T
I2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C6 E) e% Y- t. Z' e
- 5 H9 ^( ]$ D* t* q7 H/ C& Q! ^
- i2c = I2C('X', freq=400000) # create hardware I2c object; W+ o( H; a: e% ]0 N! r
- i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object
7 x1 |0 r* S2 x" E; T M1 w - 9 v& i+ Z+ V/ j; m+ q
- i2c.scan() # returns list of slave addresses
) F6 N' V, T$ v6 U - i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x42# I8 \! p4 F r: A; `
- i2c.readfrom(0x42, 5) # read 5 bytes from slave4 r5 w! f3 R( W3 {' H- J( B1 c% V& `
- ) _% ~6 G; K. n" U: e: {- t
- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x10
- ]2 l9 ]+ t$ r: n& F9 X8 u% k I - i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码 4 ?! M& O" M- E/ B! I# {% f
6 c, L* K7 Q/ t& `3 Y( C注意:对于传统 I2C 支持,请参阅 pyb.I2C。
9 K4 o$ V; s0 s4 ^6 U( Y# II2S总线参见 machine.I2S. - from machine import I2S, Pin
% A; P4 I! Z2 r' h$ n' t
3 L# x) H' g( M' a0 F& c9 U6 a6 n. t! Y7 V- 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
_* ?$ V) u9 c( F/ b! [ - i2s.write(buf) # write buffer of audio samples to I2S device9 I t ?. Q5 o/ n: z
# U/ O1 {& K, L6 Z4 m5 u) {* K+ Y- 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 object4 x7 ~6 r- ]+ k- D
- i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码 7 _: m5 c5 ?' H9 g% V$ y" h
I2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。 & f/ j& B& k/ W- Q$ I O& E5 |
CAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN5 r' m2 Q/ c: D0 i1 }9 |+ y6 F
- + x5 t" q0 x0 H& p/ \: m
- can = CAN(1, CAN.LOOPBACK)
$ @$ G& P5 v7 C# A- @ - can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))
3 s4 o2 T$ L# t - can.send('message!', 123) # send a message with id 123
1 i$ u6 G* O& w7 C( R - can.recv(0) # receive message on FIFO 0
复制代码
1 k2 y f0 I" u
6 i4 c/ C& r* J! ?5 h; g# T内部加速度计参见pyb.Accel. - from pyb import Accel, _* F( v4 m7 M
- ( K2 g* k; ]5 w$ r& {
- accel = Accel()
/ z) V3 r/ O" J1 A# J$ [( u - print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码 6 u/ c6 t( A( V- M8 n1 G. Q' s
2 T* ? [. t/ s6 [/ Y) p/ i- | |