pyboard 的快速参考 以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0 或PYBLITEv1.0-AC 或 PYBLITEv1.0.  下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分: 0 L5 s" \7 m- l/ \6 n2 j
通用板控制见 pyb. - import pyb
, F. S6 r4 b0 w( i5 A - 1 D% `! ^1 n: O5 N$ {
- pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)& _* ]5 t. M, x" c+ p
- pyb.wfi() # pause CPU, waiting for interrupt* k4 R! E2 \, H& m. X/ O2 p# z
- pyb.freq() # get CPU and bus frequencies
9 L7 o8 p. Y! G& H6 c - pyb.freq(60000000) # set CPU freq to 60MHz! w" e: w) T' i% s
- pyb.stop() # stop CPU, waiting for external interrupt
复制代码
5 s" i, N$ @" r; g% X/ D
9 w# O! s7 j x9 |延迟和计时使用 time模块: - import time0 p. S2 [$ `7 s. o5 ]) h
- l: [% Y. _0 [- time.sleep(1) # sleep for 1 second
4 D3 x: M# J+ M: z( Q2 [ - time.sleep_ms(500) # sleep for 500 milliseconds, ~9 j# v' i' g9 w, F8 U/ i
- time.sleep_us(10) # sleep for 10 microseconds
& ?/ `' C( N% K8 J - start = time.ticks_ms() # get value of millisecond counter
9 q! S/ p+ w; l, v% A - delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码 / d0 Y- F1 |" |2 E+ V0 Q( X. u
1 u/ i, q: D! T* L3 a内部 LED见 pyb.LED. - from pyb import LED
( g/ s9 @$ M d
. Y+ L" u! F0 u& h- led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue
6 l. {) g1 J" J; O8 d - led.toggle()8 S) e: b @0 g: j4 B' t P
- led.on()
2 J C( ^: E# a; ~. t# I9 v - led.off()
( g- ]; d' \4 Z8 W% ~ - ' V7 L( s. @- ~ O: _6 d
- # LEDs 3 and 4 support PWM intensity (0-255)
: P1 o# T g5 D - LED(4).intensity() # get intensity! n2 N! ?4 L: H c7 a% g
- LED(4).intensity(128) # set intensity to half
复制代码
: h: ]+ y' S# x/ N: f
" c: G$ W9 V. l3 G- N) z8 m内部开关请参阅 pyb.Switch. - from pyb import Switch3 u& n `2 u) i1 B
7 ~% t5 X( v# s2 S B$ \- sw = Switch()/ r; [; J0 J S: [& i3 K
- sw.value() # returns True or False+ `! I. ^9 I# s* R% p: X0 Y+ r
- sw.callback(lambda: pyb.LED(1).toggle())
复制代码 1 z: \' N& y, v1 Z
+ _2 p5 u+ ]2 T3 E3 f% M4 o5 ?- B引脚和 GPIO请参阅 pyb.Pin. - from pyb import Pin, s) f; a" c: } j4 w: y2 e. |
, y. e5 w% W0 \; R+ D, D& N- p_out = Pin('X1', Pin.OUT_PP)
9 o4 N7 \5 n3 k! l - p_out.high()
4 r/ H& Q- o8 `& C) ~: g) h - p_out.low()
' _0 c, Q1 [/ q
" ]/ e+ f) n* l8 s/ `- p_in = Pin('X2', Pin.IN, Pin.PULL_UP)
- X2 M( Y9 v: T$ X - p_in.value() # get value, 0 or 1
复制代码
) R( a$ r$ n- U$ p2 _- u) e& u& l& }1 Y" y3 Y5 Q" V
伺服控制请参阅pyb.Servo. - from pyb import Servo9 p/ ?! I2 k& I; w, q
& v5 |9 h5 \0 A8 x8 ]3 ~- h- s1 = Servo(1) # servo on position 1 (X1, VIN, GND)' G0 |5 t6 |2 n4 t
- s1.angle(45) # move to 45 degrees8 T, g% V1 [! Y
- s1.angle(-60, 1500) # move to -60 degrees in 1500ms" | U7 A/ Z1 X+ x( V4 _! U# n1 u
- s1.speed(50) # for continuous rotation servos
复制代码
6 V3 q1 u+ G" {$ {9 x
2 p% w0 l/ u' P& w) T/ ~% c外部中断请参阅 pyb.ExtInt. - from pyb import Pin, ExtInt
; w" B, C5 }- U- o6 x - + z. i3 E+ Y" P1 {+ q) x
- callback = lambda e: print("intr")
5 K. B4 G3 W; m* ?' | ~2 Q7 X - ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码 + c, t! @' m+ w+ s( i0 l7 e
/ L7 r, O% M, m, G. G, C
计时器请参阅pyb.Timer. - from pyb import Timer/ j3 j5 S% v. o3 ^+ r V5 @
- : a' i H) i/ ]$ y3 o) l+ t
- tim = Timer(1, freq=1000)
3 {6 c! x% w9 k: r - tim.counter() # get counter value8 |9 Y( e1 d# j9 c7 G
- tim.freq(0.5) # 0.5 Hz, n' P/ g2 a9 r# _
- tim.callback(lambda t: pyb.LED(1).toggle())
复制代码
7 F: ~/ G) }. Q+ x9 j7 bRTC(实时时钟)请参阅 pyb.RTC - from pyb import RTC% Z: Z/ N* O$ J/ ~( P" h! l
2 A$ k# O2 ?/ o3 Z+ I3 T- rtc = RTC()* ~; X/ q# |; [! X( h& `
- rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time! R# B7 s$ P# Y/ Y ^. m8 Q) q" p
- rtc.datetime() # get date and time
复制代码
5 r8 R: \7 \$ h- W& w/ C2 H. @2 C& ]PWM(脉宽调制)请参阅pyb.Pin 和 pyb.Timer. - from pyb import Pin, Timer
( ?: N# v- ^( `" U1 P( l
3 W7 x" p; a9 b* M- p = Pin('X1') # X1 has TIM2, CH1
) B0 h( `- [- q - tim = Timer(2, freq=1000)
% e) R+ u8 {. _8 A) ? - ch = tim.channel(1, Timer.PWM, pin=p)" S1 t( G2 ^6 u& T# i
- ch.pulse_width_percent(50)
复制代码
' x) I2 t/ q% ~3 H% e1 NADC(模数转换)请参阅pyb.Pin 和pyb.ADC. - from pyb import Pin, ADC# Q$ d- d% a5 P, u- ^
- 0 {7 w) ?+ G6 F( T6 Y
- adc = ADC(Pin('X19'))
; N: E! o/ D+ s$ r* ^* C - adc.read() # read value, 0-4095
复制代码 . e; H3 M. V2 v0 p1 a6 Y
9 K* b0 N5 J4 u3 O) r9 \2 ]' M
DAC(数模转换)请参阅pyb.Pin 和 pyb.DAC. - from pyb import Pin, DAC
" s' L8 N6 l' ~6 A t; W - 8 C0 F& b: n( g1 S2 M
- dac = DAC(Pin('X5'))5 z+ Y& v) q# E% [
- dac.write(120) # output between 0 and 255
复制代码
. g3 i, e* m$ i F3 n u
3 m' N# k$ l# L% V0 A0 ?" {8 k7 OUART(串行总线)请参阅 pyb.UART. - from pyb import UART
' ~8 n4 q8 H& `' _- U" N* Y: Z - * ?6 X0 ~: F- _3 X: X5 m
- uart = UART(1, 9600)
( P/ T% g* h! c2 s! D9 ^3 V: f+ r - uart.write('hello')
/ s' j) ~) M9 o) L p3 Z8 x, W - uart.read(5) # read up to 5 bytes
复制代码
" H2 U& \' |5 \0 k* ?% D2 F+ z0 k+ ?$ W* }' W1 I1 q# o e
SPI总线请参阅 pyb.SPI. - from pyb import SPI' n- s( r$ o+ R) l% o/ S! F
% ]; |# N7 R' h/ C! D8 R- spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)% H+ J. ^$ l9 N
- spi.send('hello')7 q8 H/ I, M0 ^; j, P9 b% @7 A* f2 `
- spi.recv(5) # receive 5 bytes on the bus$ J# m/ z) O) g) k) F1 R/ u! `% _( V* \
- spi.send_recv('hello') # send and receive 5 bytes
复制代码
7 T% d4 I. _7 k* d, B5 K/ s+ v9 a; o. M, C
I2C总线硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C. - from machine import I2C9 l# e' d W% h- F& ^- f+ H
- 5 {( k0 [7 X* \9 A) b
- i2c = I2C('X', freq=400000) # create hardware I2c object5 g5 P1 |' A: {) u" w
- i2c = I2C(scl='X1', sda='X2', freq=100000) # create software I2C object
2 [3 Y @; R) t
8 a$ _- J- f9 I8 A7 p- i2c.scan() # returns list of slave addresses
^0 T$ l' s. Z0 B+ l2 e6 T2 W - i2c.writeto(0x42, 'hello') # write 5 bytes to slave with address 0x42' J! z8 q% T. ?, x
- i2c.readfrom(0x42, 5) # read 5 bytes from slave
! a* c! J% c- Y" W+ B& B
7 |* Z) y: ~+ u" r" e: `0 d+ _- i2c.readfrom_mem(0x42, 0x10, 2) # read 2 bytes from slave 0x42, slave memory 0x10+ i8 w1 i* X& D N4 x* c& R$ q
- i2c.writeto_mem(0x42, 0x10, 'xy') # write 2 bytes to slave 0x42, slave memory 0x10
复制代码 ; i2 Z3 i" o3 i) c* Y% F
7 N, F: w" Y P9 }( [0 f
注意:对于传统 I2C 支持,请参阅 pyb.I2C。 4 k6 t1 \+ ~) B/ k
I2S总线参见 machine.I2S. - from machine import I2S, Pin$ ?7 S4 R+ \0 g. y! N2 i
- ! q! u; J6 e6 [
- 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* t& Z! k4 [% _' H
- i2s.write(buf) # write buffer of audio samples to I2S device
2 X$ @4 ?4 {" b
1 B) J, o& x% a8 ~ F; W" R- 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
! s0 b0 c4 A% |' Q, K) z - i2s.readinto(buf) # fill buffer with audio samples from I2S device
复制代码
$ B. w9 s1 d7 q0 C: |: {) EI2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。 PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。 4 P$ ]9 A0 X; ~
CAN总线(控制器局域网)参见 pyb.CAN. - from pyb import CAN4 i6 |5 e- `8 g. X
- ]( w L2 \) r' E( ?2 e6 V
- can = CAN(1, CAN.LOOPBACK)
# T* Z/ w9 j5 z' U& _9 j. W' r: Q/ S, Z - can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))! b& S% \, r8 g: j, W
- can.send('message!', 123) # send a message with id 1230 Q+ k g4 U+ h" y2 \# ?4 E/ X5 ~
- can.recv(0) # receive message on FIFO 0
复制代码
) I% h& M2 E8 G, b
( X' Q. K; k# ] w" V/ c9 A3 o: V内部加速度计参见pyb.Accel. - from pyb import Accel/ I3 f6 |9 C- }' ~
- 5 Y4 U) q$ j( Y
- accel = Accel()- X1 Z0 g) E1 W {. T. e9 J
- print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码
( h+ d. X) Y' V7 }9 R: w5 p& A
# C0 W+ M- f" d/ I3 T, F P ]5 t9 g; M |