pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0. 下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分:
' K6 B) t8 A9 P7 m通用板控制见 pyb. - import pyb) S+ o' C/ k' H* X. u9 a ^' G: K
- D4 i4 X; E9 m+ [+ y- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1) |- A8 }# [% M6 N
- pyb.wfi() # pause CPU, waiting for interrupt
/ P# n. w& l- X% E2 r% N - pyb.freq() # get CPU and bus frequencies, O- @- s! c& x+ x, c
- pyb.freq(60000000) # set CPU freq to 60MHz( M& ^3 \( K7 b* }) Z
- pyb.stop() # stop CPU, waiting for external interrupt
复制代码 7 s; Z) D/ C" x: J4 o
1 R, b! V) x" v9 N! Z. r延迟和计时使用 time模块: - import time1 U: q9 d6 a5 D2 v$ ?" \+ f
- . L" d9 f2 [2 ]6 p- N
- time.sleep(1) # sleep for 1 second
; ~( |6 t; n1 M' s/ S - time.sleep_ms(500) # sleep for 500 milliseconds
) x4 j! H% u. C8 L - time.sleep_us(10) # sleep for 10 microseconds, u% M+ M5 L% z) Y% F
- start = time.ticks_ms() # get value of millisecond counter. q7 r i A/ _
- delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码 l' F. H0 U; `# T" F; h+ w
I/ b! ^* }- [5 W8 X# M
内部 LED见 pyb.LED. - from pyb import LED
, G9 d/ S% Y& [" w - . R1 c6 s6 t2 k3 t) L, R
- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue
y. P7 D+ \0 A* ~5 d# k! _& S. f0 h - led.toggle()2 E2 `3 `$ r, F8 k
- led.on()
N6 a, e) k' j+ x2 L$ t - led.off()8 f% M g( J* j! w
- & f5 \& R5 R5 Y8 X
- # LEDs 3 and 4 support PWM intensity (0-255)# j8 l9 C4 k# h: H7 _
- LED(4).intensity() # get intensity
; ]! j9 p, w& f6 s0 K# v1 c7 ` - LED(4).intensity(128) # set intensity to half
复制代码
# U9 X7 h3 {1 o9 I& d: s4 e! L* k+ ^- X1 k2 h8 d
内部开关请参阅 pyb.Switch. - from pyb import Switch
5 s4 |; k+ v" C+ ?; K) L" D; q
# j' P( s U# C: H- sw = Switch()# s$ s& k# \1 G8 c- X! G( n
- sw.value() # returns True or False
+ V1 }* G, H. ^3 d* X% d - sw.callback(lambda: pyb.LED(1).toggle())
复制代码 0 u+ T. z0 G$ D8 c. I/ A1 C
Q' t/ G# s1 p/ s2 G- Q引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin. X3 ` }3 W! y7 w* k2 Q
0 l: c/ l& c& E4 B/ L+ |- p_out = Pin('X1', Pin.OUT_PP)+ r3 b/ p. J$ p0 m/ @' v
- p_out.high()
4 h* C' s7 V' _" }; Q0 l3 f6 g - p_out.low()
; E' x! x& `2 Y4 m! j1 j; m- _
+ H2 x; H+ K+ w4 D* F- `: z- p_in = Pin('X2', Pin.IN, Pin.PULL_UP)
/ }! M( r$ h+ ~3 } - p_in.value() # get value, 0 or 1
复制代码
8 m9 b) F$ d" u' F# X! X
: e# z- k* _" s4 F1 t# F, j伺服控制请参阅pyb.Servo. - from pyb import Servo
) f1 H. g" y5 `# |7 c5 F; R
- E1 R1 y7 `1 q) D- s1 = Servo(1) # servo on position 1 (X1, VIN, GND), q7 N& b0 i9 S. D/ F' @
- s1.angle(45) # move to 45 degrees
7 r0 ~4 o+ x- R5 M/ ` o: p - s1.angle(-60, 1500) # move to -60 degrees in 1500ms3 Q, p% r a! d- D9 l( V( p
- s1.speed(50) # for continuous rotation servos
复制代码
$ ~8 F" X l2 m/ k5 f! e0 [, f
+ l5 w7 U6 M8 ~4 M外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt
& S% w; d, E7 W/ s1 q/ l# T* l# w
6 @' s9 }9 \8 Q; d- callback = lambda e: print("intr")
" i% _. T* F, m- y - ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码 # t. g( h( f0 H( Z# |$ U' k
1 [8 {* H/ e1 B: W/ R; d4 f6 {8 ^! O: G计时器请参阅pyb.Timer. - from pyb import Timer
& }2 E' r9 T& e# C
/ c" a# _: M# G- tim = Timer(1, freq=1000). R. b: G% x0 n. N* ]0 z
- tim.counter() # get counter value
& Y; p% R! H2 e- f/ D9 } - tim.freq(0.5) # 0.5 Hz3 ? R' y1 C3 q
- tim.callback(lambda t: pyb.LED(1).toggle())
复制代码 6 f4 F3 T* l) S' Q/ V9 J( Q0 o
RTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC; A1 D9 K$ X' l+ @1 X/ v" K2 ^4 s
( J# R" T. W3 g) r! D, D8 ]1 u- rtc = RTC()# m) |- X b' U0 A+ ^1 X' H4 o
- rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time
- b: p/ U8 P7 H+ { - rtc.datetime() # get date and time
复制代码
; A, R) _, o% O; f2 i8 bPWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer
8 Q5 v x, o" Z6 G5 C& S: P
! @9 [3 @0 C# P- F" X- p = Pin('X1') # X1 has TIM2, CH18 ^& D+ F3 Q$ {. R; p# I% ]4 D. m
- tim = Timer(2, freq=1000)
7 s9 H8 k- u, E; [! L# _ - ch = tim.channel(1, Timer.PWM, pin=p)! f$ z6 `+ ~: O' v8 }
- ch.pulse_width_percent(50)
复制代码
p+ c( l/ y& F4 r( sADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC
) H- T- a" C) x( V; I) a - ) E% z) |9 c; r# W$ q
- adc = ADC(Pin('X19'))
- |: u" S4 s- B; F3 m7 t - adc.read() # read value, 0-4095
复制代码 9 O q0 q! A* q. a+ o. f
" L0 [; v5 I( ^
DAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC
/ T/ n4 N( s% h; w" g
6 t5 M- ~) S5 u& W: r) @# _" o- dac = DAC(Pin('X5'))+ V5 h# ~% E* j4 H: v4 x8 _
- dac.write(120) # output between 0 and 255
复制代码 % L& [ l$ x& T4 [8 f! l; R
& V: N! |( I: t7 i/ J
UART(串行总线)请参阅 pyb.UART. - from pyb import UART
# C7 v, U6 L6 t( J* y' X - : z8 l3 p3 C: X2 {, W: R. W
- uart = UART(1, 9600)
7 ?: t# q/ T7 S6 R9 `4 N - uart.write('hello')
1 v5 U: F* P1 V7 q" p, ~ - uart.read(5) # read up to 5 bytes
复制代码 $ H+ k1 p: j2 S. p2 x1 _3 g& H
& O5 w' N- x$ v5 F+ y
SPI总线请参阅 pyb.SPI. - from pyb import SPI! F7 g) t: {# F% a9 M
1 _) w% z {8 h2 ~- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)
# F7 d, X! n* q3 _6 I7 Z2 T p - spi.send('hello')
2 G" x" P; a8 u - spi.recv(5) # receive 5 bytes on the bus
: u) F9 z1 }- h' ~8 d: n) K) D2 h - spi.send_recv('hello') # send and receive 5 bytes
复制代码 : [4 ^! g3 m2 O7 ?9 Z0 a, }
9 u" @+ P. K# x( `. u- V5 K! S$ {
I2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C( u1 ^$ @# I5 @7 `
- # b+ F4 G8 u; i" V( X
- i2c = I2C('X', freq=400000) # create hardware I2c object
f7 x U" M- C" {5 I" c8 c - i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object, d$ o8 O2 ~1 g3 l9 ~7 @/ Z
# E7 F5 |/ n, u' I& J0 d# `" D V- i2c.scan() # returns list of slave addresses% _/ g; c- @$ R; r$ Y9 d& \
- i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x42
5 |. G7 {) X, `6 l - i2c.readfrom(0x42, 5) # read 5 bytes from slave
. t8 ^" O( u# U2 n) c8 ]) j% S5 c6 l, `$ X - 6 u! S0 H' ~. r5 F; A' D0 F
- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x10- s, D8 V& M, \
- i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码
/ T9 A6 d" d% d5 q5 g1 x
% q6 i3 c# K( V注意:对于传统 I2C 支持,请参阅 pyb.I2C。 ' C6 M: ]4 m* Z6 e) E
I2S总线参见 machine.I2S. - from machine import I2S, Pin
. c9 y' ]6 q# Q7 j
* l) x$ l9 [; ^, s, N- c- 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
( @ l* u, v0 \) f& B - i2s.write(buf) # write buffer of audio samples to I2S device% z; G5 m9 ]: o% G9 Y3 {9 f( T
- ; U$ b2 q6 b; |* x% d+ B
- 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; S1 V* i- J5 W* i
- i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码
! g, G4 n/ Z1 W tI2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。
$ K* y: b: b5 T6 |CAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN
/ \" H o/ e# A1 O4 l; ^4 `2 K - , F+ F9 s) G, {/ t
- can = CAN(1, CAN.LOOPBACK)% j t! C8 \' k% i0 I% c/ B
- can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))
: g( w0 v5 z u9 v4 P - can.send('message!', 123) # send a message with id 123
& B1 Y/ O& t0 Q1 D7 ~1 h8 S" l - can.recv(0) # receive message on FIFO 0
复制代码
% g$ [" M5 z) a& c& Q0 W, Q) j X8 o& O( Q6 B1 ]
内部加速度计参见pyb.Accel. - from pyb import Accel0 ^& v/ o3 T) O7 }0 Q
- # ^0 k, V4 f U% S6 ?# e/ b5 H
- accel = Accel()' n. s9 \+ j. u v. R/ }; N; [# U
- print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码 ( b$ Q' x2 g. y( k
- E6 y( ^. P. K8 `8 y/ p
|