pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0. 下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分: ! b! M1 F h' ?; S. b8 q1 ?
通用板控制见 pyb. - import pyb/ X; r. i k% O" i& V9 _6 Q
- 2 F1 s3 H" C* W9 f2 X0 h! H
- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)4 r A. p; }: W' \% ]! V# R8 w/ {
- pyb.wfi() # pause CPU, waiting for interrupt
' O4 a* X& M- r, L - pyb.freq() # get CPU and bus frequencies
3 Y: ^! i+ v# F$ S$ W- ^ - pyb.freq(60000000) # set CPU freq to 60MHz# ]7 N8 Q5 N+ L9 ^
- pyb.stop() # stop CPU, waiting for external interrupt
复制代码 : n1 @2 _- I9 D* I
& x: h) o) P/ H D延迟和计时使用 time模块: - import time" r2 V4 M: V* | ~) n2 J
6 I! X6 t: F0 ]+ k9 q0 a- time.sleep(1) # sleep for 1 second# T6 T y' O" i0 B
- time.sleep_ms(500) # sleep for 500 milliseconds
! B2 Y1 b/ j1 S+ B - time.sleep_us(10) # sleep for 10 microseconds
7 S, Q2 n1 J6 J. Y3 i5 E - start = time.ticks_ms() # get value of millisecond counter
' E2 l- x, G& J( {4 e T- S - delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码
2 K7 x& c+ u. I' I1 y6 d
" L7 C8 u2 {; h2 i内部 LED见 pyb.LED. - from pyb import LED
6 c: o+ g: q2 V - 0 q8 f W( k" A; d! W, k
- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue% A- T& A" N! M# w2 q( |+ d0 W- x8 L: J
- led.toggle()
- U. g/ n- j. T; S: N# g5 p - led.on()
: z$ {6 {5 O+ z) e8 G* _ - led.off()
+ S& c+ e: z" c' L& F1 C% M5 } - 4 Y+ G0 \+ m7 M z% E
- # LEDs 3 and 4 support PWM intensity (0-255)
8 A: h, ^( j9 N- [& E+ V - LED(4).intensity() # get intensity
. [( ?/ ~1 ~" P: N* @7 D& j: [ - LED(4).intensity(128) # set intensity to half
复制代码
( h9 \" t4 f2 x) d1 F( K, }" e7 [, H6 F, W8 Q* ~& l
内部开关请参阅 pyb.Switch. - from pyb import Switch) Q: ?' D3 J# A2 ]% w% _
( [# ^8 Y8 a# B! m8 H- sw = Switch()
m7 k) \0 `$ i: U - sw.value() # returns True or False
( g; f! Z2 b# c: ^4 } - sw.callback(lambda: pyb.LED(1).toggle())
复制代码
$ O9 C( n6 L; y9 h8 d! r
, z6 ~7 A4 I$ l. @) |引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin
6 i/ Y; o# e. B7 y1 `6 t - 2 o6 U, S8 M: ^: D
- p_out = Pin('X1', Pin.OUT_PP)
- m2 r, C4 `& p; b( S8 R2 T - p_out.high()
, V1 c3 ^0 g8 u0 {9 i6 H! J( D( D7 p - p_out.low()' a6 ~$ e6 U3 q/ J4 p: s
- . @6 g F. ^9 x% e( L+ m# n' Q4 L
- p_in = Pin('X2', Pin.IN, Pin.PULL_UP)
8 D. S; C$ ?3 Y+ p- ?2 J, K - p_in.value() # get value, 0 or 1
复制代码
: I, S/ o7 H' Y5 O
% S9 P) s9 d9 n* G, A. h4 V9 p伺服控制请参阅pyb.Servo. - from pyb import Servo _6 Z/ k. q& ?8 i# c+ |& s- K
- & Y6 |1 I& h4 f" A, ^6 U! r
- s1 = Servo(1) # servo on position 1 (X1, VIN, GND)
9 I8 A1 ^6 z% i) b - s1.angle(45) # move to 45 degrees
/ n Y) D0 b! f" t: B& L2 R - s1.angle(-60, 1500) # move to -60 degrees in 1500ms% M4 t4 h) f% Y+ K( Z
- s1.speed(50) # for continuous rotation servos
复制代码
1 ~$ }' Z. K P7 o5 Y0 c$ @
2 K3 u0 l9 r e2 A+ l: p外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt! i( x4 c5 x7 Z. |6 [! y6 {9 z9 Q2 S
# _$ f0 A+ P) e$ O- callback = lambda e: print("intr")
5 y" z( w1 Q' M - ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码 ) n& V" t2 `. g1 R6 F# G. T4 G/ Z+ G
' E3 E5 V4 y" I, [5 N' i& y
计时器请参阅pyb.Timer. - from pyb import Timer
4 x4 R* @; k# f' A- Q0 k k% c - # p/ ~9 Q* y% L- _ U: a9 s) q) v
- tim = Timer(1, freq=1000), X& {) K- w6 r# P$ b" _) L% u3 h: W; G
- tim.counter() # get counter value% Y: K$ }8 r% f+ K
- tim.freq(0.5) # 0.5 Hz
t V$ E$ J; }3 L2 I - tim.callback(lambda t: pyb.LED(1).toggle())
复制代码 + q" V% J. H5 U5 `% M
RTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC
0 }, C$ n- M5 s' N8 ^% m
) D' B% |9 r! K3 n( ~# M- N- rtc = RTC()6 J; z2 W/ d! B7 K4 l n* V) J G# c
- rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time
6 ], t+ v2 j5 K - rtc.datetime() # get date and time
复制代码
" K$ G# y. o" bPWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer# H' c ?. l1 Y% V4 e8 V
3 r- `/ V. B3 x) ]- p = Pin('X1') # X1 has TIM2, CH1
8 R- |/ F- t8 \ - tim = Timer(2, freq=1000)
' z6 ]( {9 \. K- p% \% V - ch = tim.channel(1, Timer.PWM, pin=p)
* o( y* X4 v2 `/ }$ ~" ]6 ] - ch.pulse_width_percent(50)
复制代码 n( b% J7 N- O7 v% f. M
ADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC; W) d7 R7 q! K9 z
- % t: Y6 e7 y) U! i" _$ k: H
- adc = ADC(Pin('X19'))
- A% s! U9 Y/ y1 K* f0 W. Y' O - adc.read() # read value, 0-4095
复制代码
. K8 w9 x! D6 r2 n# h
0 z7 ?( a0 L& tDAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC% U8 x7 w0 L/ X
- ! b0 a" i! [( L' R
- dac = DAC(Pin('X5'))2 ~4 Y! K. ~+ c% F1 D
- dac.write(120) # output between 0 and 255
复制代码
, P7 u7 |; h7 X( k* ?
1 Y! Q4 ^# g" J R5 p6 w( C1 @ r+ |4 rUART(串行总线)请参阅 pyb.UART. - from pyb import UART
; b1 K2 i, y( l- W - # V. a' L9 h! l7 C3 d8 Z, O
- uart = UART(1, 9600)
& y9 Z2 B' U7 L& ^2 n: p, I - uart.write('hello')7 E# M( O& i2 V. V/ Z' v7 j& [
- uart.read(5) # read up to 5 bytes
复制代码
0 N4 [; a% P; E7 I) a7 @' O5 U2 Y C% K
SPI总线请参阅 pyb.SPI. - from pyb import SPI; D6 f3 V1 Q: e6 S; E5 D
, z! B" U5 ~# ]* |! P. {- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0); v% L& D9 Z) F- {2 y
- spi.send('hello')
; B" j$ m' ^6 W; j, I - spi.recv(5) # receive 5 bytes on the bus
2 e. k8 f; z1 _! D: i; x: [ o - spi.send_recv('hello') # send and receive 5 bytes
复制代码 % ^9 g) V Z. e% o
/ f! S, K U* DI2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C
9 E1 \: ?% A9 B0 i9 [
2 m& a/ B" c- j2 r$ C- i2c = I2C('X', freq=400000) # create hardware I2c object1 F9 A% S# M, t
- i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object- w- s( R/ E/ s x6 E
* N- v& E4 B6 N- l5 B+ _/ z- i2c.scan() # returns list of slave addresses
1 j5 ?# N9 y; \9 J' f' b2 n( Z - i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x42( e* J. d$ a) ?
- i2c.readfrom(0x42, 5) # read 5 bytes from slave& Y. k$ } ?. @
: u+ _2 J+ Z& X+ ~1 z- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x107 i) p0 S) | ]" Z7 h% i+ u( H5 D( g
- i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码 ; x" R! G8 c/ u; O P, @; N: S8 {
4 G; z3 b7 w* D5 y6 B$ m) J注意:对于传统 I2C 支持,请参阅 pyb.I2C。 ) e1 n- X. D" C2 ~ z# w
I2S总线参见 machine.I2S. - from machine import I2S, Pin2 @) h v6 Y) Z% g5 r5 {
, L+ `# n0 Z& z. O- 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 object4 b2 z, v% u% }- a d
- i2s.write(buf) # write buffer of audio samples to I2S device
5 x) S& F9 l& K# e - 5 {; \3 m$ t5 E! ?7 J5 t( S
- 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% O7 V4 e- w8 E" r: ?! \4 o4 C& h
- i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码
c8 @& h8 d* m o6 F" _I2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。 - H6 t1 z! u3 N& {
CAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN E+ N; w" Y+ W2 p+ F0 B
- 7 Z" \ r! f7 B
- can = CAN(1, CAN.LOOPBACK)7 F1 W6 y$ V4 Q# K$ s
- can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))
; `/ ~5 C; ?% d" ^) ]. l/ A2 A - can.send('message!', 123) # send a message with id 123: L3 z. Q" y3 G* }# R
- can.recv(0) # receive message on FIFO 0
复制代码
, x. Q% Y6 Q" z0 b
* G: }2 b! A8 k0 s% J) E2 C内部加速度计参见pyb.Accel. - from pyb import Accel
/ A5 l$ h6 C4 B2 h5 ^. j- u4 M3 g6 T
, o" W! q8 g1 _/ o! U( O0 _: O- accel = Accel()
5 R4 H6 U( a$ g8 a5 u; N9 C. ^ - print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码
% {' |! R% y* X U; W
. T1 x. \ W; a7 p7 q) L |