pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0. 下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分:
# W0 x5 { z( G; \4 T1 \* V0 W通用板控制见 pyb. - import pyb
5 |; J y: h3 g: h
0 r4 _/ f2 D2 j# g- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)
5 z2 d! n$ O, ^4 R* D/ C - pyb.wfi() # pause CPU, waiting for interrupt
. i3 Z1 _, }, b4 h, _! r+ i; r - pyb.freq() # get CPU and bus frequencies
3 S/ X! {# A% O4 N - pyb.freq(60000000) # set CPU freq to 60MHz3 d' l6 p6 [/ r W% ~: x, ^
- pyb.stop() # stop CPU, waiting for external interrupt
复制代码
o |+ C1 W& ]' X. p2 _9 J' t! D3 N* C! T* ^1 A
延迟和计时使用 time模块: - import time' S; q" U. ~/ y7 C
4 ]0 i3 I/ ~0 u. G" b- time.sleep(1) # sleep for 1 second
# z. A6 }3 W5 |( w% S; Y' o - time.sleep_ms(500) # sleep for 500 milliseconds( p1 p# g$ h3 S9 m4 H
- time.sleep_us(10) # sleep for 10 microseconds
; C$ K+ G& O; s0 ? - start = time.ticks_ms() # get value of millisecond counter* J5 T; ^% r% w* r7 H2 {" |
- delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码 A* v4 O8 f3 ^6 g# P& q
1 m# }$ ^5 K- Z* p: \1 s2 v7 g1 c内部 LED见 pyb.LED. - from pyb import LED
1 e. A) g! i9 ?. s( j - ) V3 D `- ?3 d* o: H6 z" F$ M. i
- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue
7 J/ \3 g! v9 e+ D) p4 r - led.toggle()+ H# H9 S# l6 d
- led.on()
: m+ j! C1 `# h, y2 v* ?% K w& F - led.off()( N( z7 ^; G& k+ N. r0 ~1 E5 e
. b* v: m; y% }/ H2 W8 o- # LEDs 3 and 4 support PWM intensity (0-255)3 [/ x8 v% g# [+ c. H
- LED(4).intensity() # get intensity
, h$ i3 V. |+ {6 Z1 H - LED(4).intensity(128) # set intensity to half
复制代码
2 p. L# H r ^, K
5 |* l/ ?- Z, c$ g% F内部开关请参阅 pyb.Switch. - from pyb import Switch
8 F# w! r/ v' j - 8 \, v M, Q3 K% _/ b7 }
- sw = Switch()
( B* z4 G9 W7 V6 h V- m$ [. c - sw.value() # returns True or False% C c9 h6 T- M3 B
- sw.callback(lambda: pyb.LED(1).toggle())
复制代码 . w# S% c; `, g. H' h% f; U, z
" C0 v* F/ k6 }0 H( J T引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin
' f0 o- t- H, X: Z* Z1 K
- e0 U: i' ^' ? u4 a- p_out = Pin('X1', Pin.OUT_PP)8 p t* n1 P, s$ w# |' D* S2 Q
- p_out.high()
, q- x4 E5 e) Y8 [: ~3 w - p_out.low()% G( G" C* ?( P2 Y- }0 O8 t
: b' z9 }6 h% M9 R- p_in = Pin('X2', Pin.IN, Pin.PULL_UP)3 d3 m9 ~, \6 K3 |1 c$ Q! F9 K
- p_in.value() # get value, 0 or 1
复制代码
- \7 D1 i- @3 H& E( i/ t# \7 @# f. Q# k* h
伺服控制请参阅pyb.Servo. - from pyb import Servo" U L' d ^' n0 v0 f( U1 S
: W8 @$ u/ V2 D: y' k5 G- s1 = Servo(1) # servo on position 1 (X1, VIN, GND)0 [% c, V* J. x+ D0 u0 i3 e8 O
- s1.angle(45) # move to 45 degrees1 c, }- Q& d2 ]" u. V( ?$ o$ c
- s1.angle(-60, 1500) # move to -60 degrees in 1500ms' u U4 i7 ^# v* L" |
- s1.speed(50) # for continuous rotation servos
复制代码
/ p+ e" U/ ?; _: E) |+ H$ R; |! c; O- L5 ]0 F
外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt: q: v( C! F4 S/ U5 [
- # d- t2 K& y" n; r5 p
- callback = lambda e: print("intr")) y0 p" E" f, z
- ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码
" z- L9 S; H m0 e6 Y$ @6 v2 C6 ` A. d
计时器请参阅pyb.Timer. - from pyb import Timer
0 L7 v% W+ {0 I, n - ( L& V+ j4 L a5 ?
- tim = Timer(1, freq=1000)
0 B! z/ `, m& |: _" z+ e - tim.counter() # get counter value
; A3 V. J0 u6 q. S - tim.freq(0.5) # 0.5 Hz
/ {; E) I1 K2 }% _8 f/ k- t4 _& w - tim.callback(lambda t: pyb.LED(1).toggle())
复制代码 ! c: p7 H" m5 `# j" d2 Z' U
RTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC
: q6 x6 ~4 i n9 [' v+ x: K - ! l% o0 e! c1 D
- rtc = RTC()* l+ S( S* x" k& S0 F& g" D
- rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time9 P/ W* u" i( T# s. v" i2 b; o. E# w
- rtc.datetime() # get date and time
复制代码 : r3 [! N6 z7 b, S* S0 E
PWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer
) U2 S. {8 R& [. O5 j - 3 p, D# _- D9 B: d
- p = Pin('X1') # X1 has TIM2, CH1
, l$ }2 w$ h% M - tim = Timer(2, freq=1000); I y, H$ x) x- q1 R2 ?
- ch = tim.channel(1, Timer.PWM, pin=p)
$ @2 K& Z' S1 K/ s( o: P+ _ - ch.pulse_width_percent(50)
复制代码
: U8 c: }. E2 e" D, ]ADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC' q2 g# |" P' u0 r9 u. u, c% @4 e% [
- / |. h* V+ Z# ?8 J7 t- g
- adc = ADC(Pin('X19'))5 W Z# I @) Q' i& j
- adc.read() # read value, 0-4095
复制代码 ' J& v. N8 h; E+ Y( O
* q9 F2 b' {3 o1 x% w3 J
DAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC
$ |7 O% p5 J& e- V, Q5 l - ! x' w; e2 S9 D) n! X1 a V+ s% z
- dac = DAC(Pin('X5'))
: H' e: f1 k0 K* { @) M0 |, I - dac.write(120) # output between 0 and 255
复制代码
2 J& S2 Y, Y0 G, w8 h7 v+ G
( `9 F3 ^" K1 A: Z3 V& M3 R) mUART(串行总线)请参阅 pyb.UART. - from pyb import UART
) m' ]$ |9 c# q7 p# I7 a# X
6 n4 \6 O0 ]/ Y" |- uart = UART(1, 9600)
) l: W; X9 ]+ e: f2 Q1 f - uart.write('hello')
$ e+ p8 ]& y3 ?% h% i - uart.read(5) # read up to 5 bytes
复制代码
S- g3 W2 J2 n# P- F8 [
% h8 h$ l: ~- Y! ESPI总线请参阅 pyb.SPI. - from pyb import SPI% x* S! Z6 [6 O7 s7 v. |# n
- / M9 k& G* \# P+ M3 t, b
- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)
$ p9 X q6 D" S. r" P( X; x$ d - spi.send('hello')9 u( } ?. m8 U
- spi.recv(5) # receive 5 bytes on the bus1 P' B) C6 d, a c {! N9 V
- spi.send_recv('hello') # send and receive 5 bytes
复制代码 & c. l: l& A, I& N' s
; t/ [8 y0 y( {
I2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C7 |; p0 H, u) j' L
2 L% N- v* T: V( r0 m" [0 @- i2c = I2C('X', freq=400000) # create hardware I2c object
; T. J- H. L4 q - i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object
$ W( w; h6 g5 ~% i
4 g7 F9 w; \0 F4 n) \& ]- i2c.scan() # returns list of slave addresses+ d& S A/ O# P3 M
- i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x42
4 o1 o b' V+ M - i2c.readfrom(0x42, 5) # read 5 bytes from slave
- L6 u5 e" x9 _5 d. N5 R3 n# J% X - " H4 w9 L5 B1 K6 R+ L* I. C
- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x10* i- M* q/ s4 J
- i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码 & H8 g, L z6 q5 v, K, j4 }* G0 O. H% A
% u4 c) v# H" ? n9 ~注意:对于传统 I2C 支持,请参阅 pyb.I2C。
; Y; w3 e9 s7 w; _8 |% HI2S总线参见 machine.I2S. - from machine import I2S, Pin
* t* \6 M* z- k* u
5 {) m+ v5 r0 V* n6 k }- 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
6 q$ \. h. Q @& a9 T9 k' P - i2s.write(buf) # write buffer of audio samples to I2S device
$ D- D* [& e9 h$ s - 4 x2 m! e o/ u' j! ?% D$ ?
- 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; F! F l2 q$ l6 a4 S
- i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码 # \7 b7 J" M) a4 M& {; b
I2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。
: t- D/ R# R) P8 e! x& A3 B/ \CAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN8 V/ g4 o/ d. K0 t2 ?
- + O7 i0 O/ E2 n( N* ^: j
- can = CAN(1, CAN.LOOPBACK)
# g1 {9 ^$ g$ M2 W& U3 M2 F - can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))
, n% f+ ]8 X. g* o1 h- K - can.send('message!', 123) # send a message with id 123( C$ e* l' `' l4 q
- can.recv(0) # receive message on FIFO 0
复制代码 0 `+ e6 p. K8 Z1 l0 i5 W( s: l
- G3 V' @* m6 n9 G3 A内部加速度计参见pyb.Accel. - from pyb import Accel/ }# [! |2 o4 [" I
& O! i4 ^3 t6 X& n& `- accel = Accel()1 {( Z7 w, R2 q8 G" @% E; Z7 Y' L3 h
- print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码 ; v3 W1 `" H9 _3 r0 Q* C9 M! v+ e
4 q. ]5 G2 J% w& U5 f! y0 n
|