micropython编程爱好网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 353114|回复: 8

pyboard 快速参考手册

[复制链接]

24

主题

24

帖子

3274

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3274
发表于 2020-4-19 10:36:57 | 显示全部楼层 |阅读模式
pyboard 的快速参考

以下引脚分配适用于 PYBv1.1。您还可以查看其他版本的 pyboard 的引脚排列: PYBv1.0PYBLITEv1.0-ACPYBLITEv1.0.

下面是 pyboard 的快速参考。如果这是您第一次使用该板,请考虑先阅读以下部分:

; z) Y9 s2 Y6 T& g+ W5 x! p. s  V
通用板控制

pyb.

  1. import pyb
    - ]) X1 T' \7 F) H1 d
  2. ) f5 z0 v& E. k7 q5 k
  3. pyb.repl_uart(pyb.UART(1, 9600)) # duplicate REPL on UART(1)
    + H4 ?$ ^$ a1 b9 x0 J( C
  4. pyb.wfi() # pause CPU, waiting for interrupt- E3 N7 }/ l. ?" |) x6 l; s
  5. pyb.freq() # get CPU and bus frequencies
    5 U5 C# A$ T1 n9 U% G
  6. pyb.freq(60000000) # set CPU freq to 60MHz* W9 T( X$ h. e: `
  7. pyb.stop() # stop CPU, waiting for external interrupt
复制代码
2 \7 M- D! n4 L0 x6 w
  E2 U4 W3 V# j$ }: c# Y" O
延迟和计时

使用 time模块:

  1. import time
    * x5 [' C# h, G/ u

  2. ' m- T/ _; H% C
  3. time.sleep(1)           # sleep for 1 second8 n7 ]; N0 u' r3 Z6 I' R3 x9 s
  4. time.sleep_ms(500)      # sleep for 500 milliseconds
    ! B: F6 B0 A: Q
  5. time.sleep_us(10)       # sleep for 10 microseconds5 b2 S/ [" R! M1 e6 c2 b
  6. start = time.ticks_ms() # get value of millisecond counter
    % i0 c0 P1 F3 F9 L$ C4 {
  7. delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
复制代码

* Z/ ~% e3 n0 \; Q$ Z% J$ p) F

. P, j8 v* s5 \内部 LED

pyb.LED.

  1. from pyb import LED
    5 ~6 o- p5 b; K5 Y6 O+ X
  2. * N9 t+ Q/ k1 j
  3. led = LED(1) # 1=red, 2=green, 3=yellow, 4=blue0 \* N2 d" q9 O  T- N
  4. led.toggle()
    - I. f3 C1 K& w; }
  5. led.on(), V1 h3 f& J: D  M/ S9 K
  6. led.off()4 Y, G4 E/ {. Y, u3 |* {5 t
  7. ; h+ y( u5 r; ~( u
  8. # LEDs 3 and 4 support PWM intensity (0-255), V/ _: S, I, {# Q+ N" ?" K+ _! S
  9. LED(4).intensity()    # get intensity4 f% F) p8 }6 B
  10. LED(4).intensity(128) # set intensity to half
复制代码
6 c. n. P  m' {2 K
; ~& b2 e  t1 i6 L
内部开关

请参阅 pyb.Switch.

  1. from pyb import Switch& y1 {% [/ c5 |4 p! J/ |; n2 g0 X

  2. 4 D, ?1 t* S2 N8 r0 N
  3. sw = Switch()4 a0 c7 o; ~  j( N9 `
  4. sw.value() # returns True or False- Y7 E+ ?8 d# E% p# \$ u
  5. sw.callback(lambda: pyb.LED(1).toggle())
复制代码
9 _' z( y$ m" m9 F2 }
& s# G. O9 g$ b# I. k
引脚和 GPIO

请参阅 pyb.Pin.

  1. from pyb import Pin
    5 s: A+ O3 T4 x1 A: V& A% ~7 G; J

  2. ! q5 Z" v8 m% h/ n
  3. p_out = Pin('X1', Pin.OUT_PP)
    + z: x) n9 X: e# @: ~  T# R
  4. p_out.high()
    : F: E' r1 O/ F* f5 h4 I8 s
  5. p_out.low()2 T$ ?4 H0 z4 l, }! n

  6. , d8 o+ @9 h. t. F9 G* |5 v6 X# S
  7. p_in = Pin('X2', Pin.IN, Pin.PULL_UP)" [) C! D/ G7 _" W! `
  8. p_in.value() # get value, 0 or 1
复制代码
0 i/ ]+ J# ^1 E5 t4 p; b: K! F
, t9 F( n/ ^4 F' g9 j  O
伺服控制

请参阅pyb.Servo.

  1. from pyb import Servo* j; {( z3 V$ ^. ~1 T- a
  2. 6 f, u- P: X/ y/ V) t% p
  3. s1 = Servo(1) # servo on position 1 (X1, VIN, GND)) K- x7 V* c% U/ W. f- `2 I
  4. s1.angle(45) # move to 45 degrees0 n0 t5 }: q1 b  M' ^1 @
  5. s1.angle(-60, 1500) # move to -60 degrees in 1500ms. f/ r6 h  a9 C' P
  6. s1.speed(50) # for continuous rotation servos
复制代码
. a5 h) c4 ^1 W" `7 H2 j1 v3 ?5 ~) `
2 v! R: h. H* v/ e( y7 u
外部中断

请参阅 pyb.ExtInt.

  1. from pyb import Pin, ExtInt
    ' g- U/ @' P! J1 r2 L

  2. ( ]7 z- D+ \9 y( B
  3. callback = lambda e: print("intr")
    2 v6 a) f# |4 o( U
  4. ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)
复制代码
7 V% m: z; t6 j% x6 S' i6 u& l/ {
, b# z# D( q$ T& x3 \" U6 @7 _- n
计时器

请参阅pyb.Timer.

  1. from pyb import Timer
    ) Z: w/ C/ x$ H

  2. / Z1 R+ i5 n7 P
  3. tim = Timer(1, freq=1000)3 ?0 R: Z! Z4 }0 B) K7 Y
  4. tim.counter() # get counter value
    1 ]' i' a/ u$ c3 t) E
  5. tim.freq(0.5) # 0.5 Hz
    $ d0 A4 p8 x5 \1 ^, a
  6. tim.callback(lambda t: pyb.LED(1).toggle())
复制代码
9 @4 V% }( O  r" p1 D
RTC(实时时钟)

请参阅 pyb.RTC

  1. from pyb import RTC
    2 \# P) M; r3 n! R! ~% Y4 B

  2. 1 {! W3 p% \% K% A# g' b$ a
  3. rtc = RTC()
    $ f4 z* \( C( K0 Y  f/ y
  4. rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time
    * e9 w1 R! K, @1 j& N' L
  5. rtc.datetime() # get date and time
复制代码
" }0 {9 g- Z$ y8 M# W
PWM(脉宽调制)

请参阅pyb.Pinpyb.Timer.

  1. from pyb import Pin, Timer
    / @; n# N$ u6 @! V+ H

  2. , T3 v( N+ `5 J' `
  3. p = Pin('X1') # X1 has TIM2, CH1' F+ y' G; G) ]+ X, |$ C
  4. tim = Timer(2, freq=1000)
    # N3 |, d7 d, j8 o6 ]0 |( A' Q
  5. ch = tim.channel(1, Timer.PWM, pin=p)( @0 ?4 C1 B' ]
  6. ch.pulse_width_percent(50)
复制代码

9 w. u, A" I9 F7 \: d- W; F( YADC(模数转换)

请参阅pyb.Pinpyb.ADC.

  1. from pyb import Pin, ADC4 n" H4 M' z1 }" m4 ~3 G. M) _

  2. $ M3 g: `0 I* Z  F, m" H1 D" N; u! o
  3. adc = ADC(Pin('X19'))/ I& d3 R- ^7 U1 q
  4. adc.read() # read value, 0-4095
复制代码
' q4 V: C0 H( o/ [4 V0 X8 Q

, g: R3 t  P9 WDAC(数模转换)

请参阅pyb.Pinpyb.DAC.

  1. from pyb import Pin, DAC; }1 S0 A" t+ f+ }6 l, W& i+ ^/ `
  2. # [9 l3 i& Q* v( {
  3. dac = DAC(Pin('X5'))& j) R, v6 A$ K# j. K' R" m6 O
  4. dac.write(120) # output between 0 and 255
复制代码
: V$ [3 M! _# _( Q4 \
2 M$ [0 w1 W0 e! H0 q: I" e0 z9 U
UART(串行总线)

请参阅 pyb.UART.

  1. from pyb import UART
    - {; `/ b6 r: x6 q, D; w! Q0 M

  2. " K7 N& n* g" e) e% K" m" ~
  3. uart = UART(1, 9600)
    ; y6 s! b4 q, W1 q" s" }! Z
  4. uart.write('hello')' b. q0 f# ]+ t# v. u
  5. uart.read(5) # read up to 5 bytes
复制代码
) T4 V# |  _- e3 y( J# q# E
7 V  U1 z+ B4 d5 N: a( ^
SPI总线

请参阅 pyb.SPI.

  1. from pyb import SPI0 S) |+ {  B8 ^4 |* ~

  2. + b+ H+ ^% U' e2 e9 _1 |, _( u1 a
  3. spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=1, phase=0)9 ~7 B- i. y* C1 [' `9 t7 J8 A. Q
  4. spi.send('hello')$ e: a+ m7 G4 @0 K$ o
  5. spi.recv(5) # receive 5 bytes on the bus) l0 v5 q& {  _& u% v, `5 s
  6. spi.send_recv('hello') # send and receive 5 bytes
复制代码
1 y6 m, h* o- S; k

' U5 M0 `; s% L. o9 V2 ~5 T# tI2C总线

硬件 I2C 可通过I2C('X') 和用于 pyboard 的 X 和 Y 两半 I2C('Y')。或者,传入外围设备的整数标识符,例如I2C(1)。通过显式指定 scl 和 sda 引脚而不是总线名称,也可以使用软件 I2C 。有关更多详细信息,请参阅 machine.I2C.

  1. from machine import I2C
    " k% a: W7 [9 d( w! ^# \

  2. - L! M, S, m! @6 d+ Y) D
  3. i2c = I2C('X', freq=400000)                 # create hardware I2c object
    9 ?' o( G6 E& j- [$ ?' H
  4. i2c = I2C(scl='X1', sda='X2', freq=100000)  # create software I2C object
    ) B, }, R( ~! _# J' }9 k/ X
  5. . [" Q& N( ?4 z: v* u% l
  6. i2c.scan()                          # returns list of slave addresses3 _0 D) j- s) |9 w5 f9 F
  7. i2c.writeto(0x42, 'hello')          # write 5 bytes to slave with address 0x42
    9 |! J( O( a8 W0 _1 r5 X/ q
  8. i2c.readfrom(0x42, 5)               # read 5 bytes from slave( v! s" V! N) W$ B( r
  9. 9 u1 M) I* Y* J; T6 _  r
  10. i2c.readfrom_mem(0x42, 0x10, 2)     # read 2 bytes from slave 0x42, slave memory 0x10
    ( B, L0 D6 E3 U& E2 F  W1 r7 }2 B  j
  11. i2c.writeto_mem(0x42, 0x10, 'xy')   # write 2 bytes to slave 0x42, slave memory 0x10
复制代码

$ R# t1 c" [; @
. h# K- G' f3 A4 F" O

注意:对于传统 I2C 支持,请参阅 pyb.I2C

5 q2 y. C/ `% A. U7 s
I2S总线

参见 machine.I2S.

  1. from machine import I2S, Pin4 O5 s9 e- j; ^. q& g
  2. 6 y* e3 z# Z) S. B# L
  3. 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 object7 ~4 b' j0 y: n/ F
  4. i2s.write(buf)             # write buffer of audio samples to I2S device' e: J  g9 F/ d6 F) l

  5. 8 I0 T8 W# ?- n/ @3 k
  6. 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: M/ R# u, Q( u. B
  7. i2s.readinto(buf)          # fill buffer with audio samples from I2S device
复制代码

) x. H" a/ q+ B3 {

I2S 类目前作为技术预览版提供。在预览期间,鼓励用户提供反馈。基于此反馈,I2S 类 API 和实现可能会更改。

PYBv1.0/v1.1 有一个 I2S 总线,id=2。PYBD-SFxW 有两条 I2S 总线,id=1 和 id=2。I2S 与 SPI 共享。

( A/ c! P  H. Q
CAN总线(控制器局域网)

参见 pyb.CAN.

  1. from pyb import CAN
    ( R7 Z# S2 d. a4 |% @' u

  2. " s- o$ m: f8 e
  3. can = CAN(1, CAN.LOOPBACK)
    ; s& f0 ~$ H: [6 y" k( ~
  4. can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))+ G/ H; C9 o; w' ^8 L2 K7 @, i
  5. can.send('message!', 123)   # send a message with id 123
    % y, h* H9 l" p, H
  6. can.recv(0)                 # receive message on FIFO 0
复制代码
' J& l' u- \* K! o

8 I" @% I! f+ w) ]内部加速度计

参见pyb.Accel.

  1. from pyb import Accel
    - T7 J5 z, f4 q% _& ~  k
  2. 3 t' O  ?" ]$ o5 J
  3. accel = Accel()% p5 V% y: s# r( N( A/ i
  4. print(accel.x(), accel.y(), accel.z(), accel.tilt())
复制代码

, k. v# ^( D+ p) ?
6 Y/ q1 ^2 h" L& F6 @, \- b' r
回复

使用道具 举报

0

主题

4

帖子

24

积分

新手上路

Rank: 1

积分
24
发表于 2020-11-15 08:13:45 | 显示全部楼层

pyboard 快速参考手册

So happens. We can communicate on this theme.
回复

使用道具 举报

0

主题

4

帖子

24

积分

新手上路

Rank: 1

积分
24
发表于 2020-12-7 20:00:16 | 显示全部楼层

-

Also that we would do without your very good idea
回复

使用道具 举报

0

主题

4

帖子

24

积分

新手上路

Rank: 1

积分
24
发表于 2020-12-20 17:55:02 | 显示全部楼层

-

I can not recollect.
回复

使用道具 举报

0

主题

1

帖子

24

积分

新手上路

Rank: 1

积分
24
发表于 2021-10-21 20:48:49 | 显示全部楼层

Very interesting information, I am looking forward to the continuation.

dgfergus ??? 2021-8-28 11:00) X, ^  n: F5 h2 y( N8 r" X
Thank you for posting this for all of us

$ t! W  S5 e( T; l, p6 s( sVery interesting information, I am looking forward to the continuation.
回复

使用道具 举报

0

主题

3

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2022-6-11 02:02:49 | 显示全部楼层

-

You commit an error. I can defend the position. Write to me in PM, we will discuss.
回复

使用道具 举报

0

主题

7

帖子

20

积分

新手上路

Rank: 1

积分
20
发表于 2022-6-25 11:56:25 | 显示全部楼层

-

excellent idea and is duly
回复

使用道具 举报

0

主题

8

帖子

1016

积分

新手上路

Rank: 1

积分
1016
发表于 2024-7-12 18:37:01 | 显示全部楼层

Test, just a test

Hello. And Bye.
回复

使用道具 举报

0

主题

8

帖子

1016

积分

新手上路

Rank: 1

积分
1016
发表于 2024-7-27 01:23:40 | 显示全部楼层

Test, just a test

Hello. And Bye.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|micropython编程爱好网 ( 粤ICP备14010847号-3 )

粤公网安备 44030702001224号

GMT+8, 2025-7-16 04:28 , Processed in 0.202800 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表