pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0. 下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分:
9 `* O2 L8 y- e' y r6 g9 H通用板控制见 pyb. - import pyb" x( O$ W) X- J" L( V) _ e
- % z3 w4 t) Q: \" z1 d
- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)( U: {) P2 c% w7 j' |
- pyb.wfi() # pause CPU, waiting for interrupt0 E3 A4 [3 S4 ~1 p5 R0 X* B, A) c5 h# n
- pyb.freq() # get CPU and bus frequencies
6 i2 a" N& j$ s* w - pyb.freq(60000000) # set CPU freq to 60MHz9 m" ?" p+ T% p
- pyb.stop() # stop CPU, waiting for external interrupt
复制代码
% s2 F1 y3 ] c8 _" L0 ? g9 ?4 j( N r/ t& f
延迟和计时使用 time模块: - import time
' z1 ?5 I; g: `/ { C
* E: Y- {. L( i& S: m( X( Q4 `- time.sleep(1) # sleep for 1 second! G- i- \5 f% {
- time.sleep_ms(500) # sleep for 500 milliseconds
) j5 [! @1 t9 E( m; t( R6 @( y - time.sleep_us(10) # sleep for 10 microseconds
6 p8 A: b2 J/ @# R. D# m! x - start = time.ticks_ms() # get value of millisecond counter8 D8 W7 f( t) y4 C# I
- delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码
0 n( t K' P4 |) J8 T
2 Y/ I9 i, r2 V0 k' I内部 LED见 pyb.LED. - from pyb import LED) B( p5 x7 m. r7 v8 G
# F5 h/ l& ]& M4 e4 G- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue6 e! M2 m. {$ `7 g2 L
- led.toggle()' ?) c7 I+ Y* s, D
- led.on()
2 A$ a3 X( l! Z5 I( C. V - led.off()
$ Q8 s; X$ a, d% J - ( d- t3 l3 k' |/ |* w
- # LEDs 3 and 4 support PWM intensity (0-255)
% j2 Z- u; C& z: k% x- Y7 K - LED(4).intensity() # get intensity2 c- C8 i" |8 p& @$ H
- LED(4).intensity(128) # set intensity to half
复制代码
; d s7 f ~! O
( `1 [5 D" U: d# V" C内部开关请参阅 pyb.Switch. - from pyb import Switch
+ } q' k, w& ?9 r$ r3 J( e - 0 b3 y; R' M% @6 V" H* x
- sw = Switch()( i& B* b0 U2 a
- sw.value() # returns True or False
/ X7 M; L& L9 _, s. Z - sw.callback(lambda: pyb.LED(1).toggle())
复制代码
% f3 |" w0 P' Y2 a, X6 ^0 i8 @9 x3 {7 Z8 Z: ^+ g
引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin
4 J# H8 p; P+ l, @5 ~
& d7 T! G# k0 p* W9 P8 h- p_out = Pin('X1', Pin.OUT_PP)
$ A% K- Q7 m6 x- k$ _ - p_out.high()/ }1 B; u6 T1 o
- p_out.low()# d) ~( E' L* N# D* R
8 O* e M8 h0 P8 K. {- p_in = Pin('X2', Pin.IN, Pin.PULL_UP)
/ v2 M g8 L. K' }) |: o! x - p_in.value() # get value, 0 or 1
复制代码 3 g) [4 i# Q" Q; j6 [6 m+ j
' r7 r( b. L! }伺服控制请参阅pyb.Servo. - from pyb import Servo
8 F; ~; E8 C/ v5 g - % C: [( C( ~; z. u/ a+ Z
- s1 = Servo(1) # servo on position 1 (X1, VIN, GND)0 [ U. }* O; ^( k/ ]
- s1.angle(45) # move to 45 degrees
4 _+ D$ x- c5 N7 j7 ?% Z - s1.angle(-60, 1500) # move to -60 degrees in 1500ms. y" a1 z, r* \. S
- s1.speed(50) # for continuous rotation servos
复制代码 + _" _" K3 F) K" U& [# A
; r# k0 V; M4 D( m外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt
8 Q: _0 g { _
3 [9 Q4 U6 N0 O1 N9 [$ |- callback = lambda e: print("intr")5 t/ ?% f; o0 d3 ~. |5 `
- ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码 6 [! h5 {/ E7 a- r& N" U$ p
6 j- O3 Q I% Y- J7 [0 o O, Y. W
计时器请参阅pyb.Timer. - from pyb import Timer: L# e6 @4 ] j# K9 P. T( V
6 O4 Z: Q7 T i; e- tim = Timer(1, freq=1000)
; O1 C* u+ r% j0 U - tim.counter() # get counter value
* O/ v* e: c& c0 {2 R - tim.freq(0.5) # 0.5 Hz8 ]6 b' _5 U0 C/ s( ~
- tim.callback(lambda t: pyb.LED(1).toggle())
复制代码
* o4 k$ W# N7 j) JRTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC
0 ? h5 y1 x i- J T
5 d0 I5 U: z/ e- rtc = RTC()8 G8 o) W, q7 F2 g8 F8 S" f* X
- rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time
6 p: }# A; }; f1 V# n$ y) m+ ` - rtc.datetime() # get date and time
复制代码 ' o, }% u S/ D8 _7 t: @6 T
PWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer' g" U& S% z7 _' L4 L9 y% j; h
- C: [6 U& |& ]; K5 ]; Z
- p = Pin('X1') # X1 has TIM2, CH1' \, o3 B' D/ A' C/ N
- tim = Timer(2, freq=1000)
% S3 ^' j# S6 K5 C. u; O4 K - ch = tim.channel(1, Timer.PWM, pin=p)- ?5 _- `8 k4 P. {. H" i+ y
- ch.pulse_width_percent(50)
复制代码
/ `& ]0 G; F5 o- }/ ?2 J' ?0 u4 eADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC
1 Z$ n* z, {0 b5 C6 M# \
7 q; c: _& N1 x" ?! V- adc = ADC(Pin('X19'))
: E% E, R6 \ f. h, L4 h/ { G - adc.read() # read value, 0-4095
复制代码 ; }( u9 c o5 G- R- ~
; E7 i. g: r& l% A
DAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC
3 L" k- \) W5 \6 ~+ h; H/ Q6 ]
" H- m- x, G8 k3 x3 J- dac = DAC(Pin('X5'))
5 g' z- F) O) g6 D - dac.write(120) # output between 0 and 255
复制代码
% y* w7 ^! W2 ~7 l9 p* b
8 q2 {* a1 v) k8 r' S- s* rUART(串行总线)请参阅 pyb.UART. - from pyb import UART
' H% E# i; ]5 y - & J- T- _2 `. Y+ v) ~9 S, r! ^ O
- uart = UART(1, 9600)" A& [: s W2 w/ Z# S
- uart.write('hello')
# [! G4 U8 }0 N; L4 E - uart.read(5) # read up to 5 bytes
复制代码
% g q7 h) S; p% D# a( s1 \% Q; _- q1 b" A1 Z6 O& Y3 \# t
SPI总线请参阅 pyb.SPI. - from pyb import SPI
- R$ p; a2 D3 U9 d+ a2 ` - # l- D3 U; E; B' N4 `5 o! H
- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)5 B' G& {* \/ ?+ Z6 I& j" f. P& P$ x
- spi.send('hello')
( S" q& n- L, G- j. j - spi.recv(5) # receive 5 bytes on the bus8 j1 H& R! m$ z
- spi.send_recv('hello') # send and receive 5 bytes
复制代码 0 q& Q; j ?. O+ X- Q8 N, _* u5 E
$ e4 D a D/ x( b4 s# s) F* {
I2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C
; ~- g8 B; C& @, E @ - : h! T3 ~3 M) T7 ?
- i2c = I2C('X', freq=400000) # create hardware I2c object
% L( r3 b3 R2 A- A1 F - i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object- [' u" o4 f7 N% Y I
; C5 y- Y4 w1 ]- i2c.scan() # returns list of slave addresses
* |: t7 t# x1 R6 G0 @ - i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x42
+ N. ^% H" @& R% d - i2c.readfrom(0x42, 5) # read 5 bytes from slave7 {% l, b8 n) | c7 s' t" I( M
- % m) |0 [ s @5 ?) J @, k5 Q
- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x108 y7 b. j, ?- h9 F) Q+ Q
- i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码
" `. _+ g# m! X2 M; B6 F$ @0 v3 Z! ^; V% l$ H3 P6 Z* n
注意:对于传统 I2C 支持,请参阅 pyb.I2C。
0 f% e. e3 l' V. Y0 E# l8 A4 BI2S总线参见 machine.I2S. - from machine import I2S, Pin
2 N3 h' T; [3 v1 H4 k3 B# y - 1 O* O/ G$ Z5 a8 ?6 N' H2 y( p
- 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: }$ {% M. ~' L9 j
- i2s.write(buf) # write buffer of audio samples to I2S device, t, O1 @2 C6 Q2 N! o! i$ Z
5 r# w3 q/ |- J+ M) p9 m2 @; g- 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
. G& N( L" I5 s; g y5 | - i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码 4 n, y! R, w5 o& S1 z
I2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。 8 }9 T e0 ` M& s7 @
CAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN; j) p1 ^+ |1 E
5 r& Y8 }( Y W R, U, J B2 |2 |' H- can = CAN(1, CAN.LOOPBACK)
e$ ?5 T% { r- B8 t& f - can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))7 }$ O' v5 u# T; J% d8 |
- can.send('message!', 123) # send a message with id 123
% `! H1 k7 Y9 J1 ^; Q4 T - can.recv(0) # receive message on FIFO 0
复制代码 , p4 v$ E2 C' n; u% [/ p
% y L+ O3 l2 \: J/ V& `: D% J内部加速度计参见pyb.Accel. - from pyb import Accel1 k1 I' } ~1 n; c, a* n, K
. x# {4 |$ A: y5 _8 ]7 w9 b* E- accel = Accel()
# Y( w4 w: ~; {! U - print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码
* h5 n4 V( J# z; ]
3 {2 s: h2 e* h( H% m) \% t( ]3 [ |