社区导航

 
查看: 5270|回复: 18

[分享] ESP8266版的Micropython快速参考

[复制链接]

7065

TA的帖子

14

TA的资源

版主

Rank: 6Rank: 6

测评达人

发表于 2016-6-25 16:05:33 | 显示全部楼层 |阅读模式
下一个ESP8266版的micropython活动已经开始计划,所以先准备教程。
ESP8266版的Micropython整体上和STM32版的类似,但是也还是有一些差别,先看看开始参考。


machine 和频率控制

import machine

machine.freq()          # get the current frequency of the CPU
machine.freq(160000000) # set the CPU frequency to 160 MHz


ESP模块

import esp

esp.osdebug(None)       # turn off vendor O/S debugging messages
esp.osdebug(0)          # redirect vendor O/S debugging messages to UART(0)


GPIO

from machine import Pin

p0 = Pin(0, Pin.OUT)    # create output pin on GPIO0
p0.high()               # set pin to high
p0.low()                # set pin to low
p0.value(1)             # set pin to high

p2 = Pin(2, Pin.IN)     # create input pin on GPIO2
print(p2.value())       # get value, 0 or 1

p4 = Pin(4, Pin.IN, Pin.PULL_UP) # enable internal pull-up resistor
p5 = Pin(5, Pin.OUT, value=1) # set pin high on creation


定时器

from machine import Timer

tim = Timer(-1)
tim.init(period=5000, mode=Timer.ONE_SHOT, callback=lambda t:print(1))
tim.init(period=2000, mode=Timer.PERIODIC, callback=lambda t:print(2))


延时

import time

time.sleep(1)           # sleep for 1 second
time.sleep_ms(500)      # sleep for 500 milliseconds
time.sleep_us(10)       # sleep for 10 microseconds
start = time.ticks_ms() # get millisecond counter
delta = time.ticks_diff(start, time.ticks_ms()) # compute time difference


PWM

from machine import Pin, PWM

pwm0 = PWM(Pin(0))      # create PWM object from a pin
pwm0.freq()             # get current frequency
pwm0.freq(1000)         # set frequency
pwm0.duty()             # get current duty cycle
pwm0.duty(200)          # set duty cycle
pwm0.deinit()           # turn off PWM on the pin

pwm2 = PWM(Pin(2), freq=500, duty=512) # create and configure in one go


ADC

from machine import ADC

adc = ADC(0)            # create ADC object on ADC pin
adc.read()              # read value, 0-1024


SPI

from machine import Pin, SPI

# construct an SPI bus on the given pins
# polarity is the idle state of SCK
# phase=0 means sample on the first edge of SCK, phase=1 means the second
spi = SPI(baudrate=100000, polarity=1, phase=0, sck=Pin(0), mosi=Pin(2), miso=Pin(4))

spi.init(baudrate=200000) # set the baudrate

spi.read(10)            # read 10 bytes on MISO
spi.read(10, 0xff)      # read 10 bytes while outputing 0xff on MOSI

buf = bytearray(50)     # create a buffer
spi.readinto(buf)       # read into the given buffer (reads 50 bytes in this case)
spi.readinto(buf, 0xff) # read into the given buffer and output 0xff on MOSI

spi.write(b'12345')     # write 5 bytes on MOSI

buf = bytearray(4)      # create a buffer
spi.write_readinto(b'1234', buf) # write to MOSI and read from MISO into the buffer
spi.write_readinto(buf, buf) # write buf to MOSI and read MISO back into buf


I2C

from machine import Pin, I2C

# construct an I2C bus
i2c = I2C(scl=Pin(5), sda=Pin(4), freq=100000)

i2c.readfrom(0x3a, 4)   # read 4 bytes from slave device with address 0x3a
i2c.writeto(0x3a, '12') # write '12' to slave device with address 0x3a

buf = bytearray(10)     # create a buffer with 10 bytes
i2c.writeto(0x3a, buf)  # write the given buffer to the slave


休眠

import machine

# configure RTC.ALARM0 to be able to wake the device
rtc = machine.RTC()
rtc.irq(trigger=rtc.ALARM0, wake=machine.DEEPSLEEP)

# check if the device woke from a deep sleep
if machine.reset_cause() == machine.DEEPSLEEP_RESET:
    print('woke from a deep sleep')

# set RTC.ALARM0 to fire after 10 seconds (waking the device)
rtc.alarm(rtc.ALARM0, 10000)

# put the device to sleep
machine.deepsleep()


onewire总线

from machine import Pin
import onewire

ow = onewire.OneWire(Pin(12)) # create a OneWire bus on GPIO12
ow.scan()               # return a list of devices on the bus
ow.reset()              # reset the bus
ow.readbyte()           # read a byte
ow.read(5)              # read 5 bytes
ow.writebyte(0x12)      # write a byte on the bus
ow.write('123')         # write bytes on the bus
ow.select_rom(b'12345678') # select a specific device by its ROM code

驱动DS18B20

import time
ds = onewire.DS18B20(ow)
roms = ds.scan()
ds.convert_temp()
time.sleep_ms(750)
for rom in roms:
    print(ds.read_temp(rom))


网络

import network

wlan = network.WLAN(network.STA_IF) # create station interface
wlan.active(True)       # activate the interface
wlan.scan()             # scan for access points
wlan.isconnected()      # check if the station is connected to an AP
wlan.connect('essid', 'password') # connect to an AP
wlan.config('mac')      # get the interface's MAC adddress
wlan.ifconfig()         # get the interface's IP/netmask/gw/DNS addresses

ap = network.WLAN(network.AP_IF) # create access-point interface
ap.active(True)         # activate the interface
ap.config(essid='ESP-AP') # set the ESSID of the access point

def do_connect():
    import network
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    if not wlan.isconnected():
        print('connecting to network...')
        wlan.connect('essid', 'password')
        while not wlan.isconnected():
            pass
    print('network config:', wlan.ifconfig())


NeoPixel 驱动

from machine import Pin
from neopixel import NeoPixel

pin = Pin(0, Pin.OUT)   # set GPIO0 to output to drive NeoPixels
np = NeoPixel(pin, 8)   # create NeoPixel driver on GPIO0 for 8 pixels
np[0] = (255, 255, 255) # set the first pixel to white
np.write()              # write data to all pixels
r, g, b = np[0]         # get first pixel colour

底层驱动

import esp
esp.neopixel_write(pin, grb_buf, is800khz)


APA102驱动

from machine import Pin
from apa102 import APA102

clock = Pin(14, Pin.OUT)     # set GPIO14 to output to drive the clock
data = Pin(13, Pin.OUT)      # set GPIO13 to output to drive the data
apa = APA102(clock, data, 8) # create APA102 driver on the clock and the data pin for 8 pixels
apa[0] = (255, 255, 255, 31) # set the first pixel to white with a maximum brightness of 31
apa.write()                  # write data to all pixels
r, g, b, brightness = apa[0] # get first pixel colour


底层驱动

import esp
esp.apa102_write(clock_pin, data_pin, rgbi_buf)


webrepl

import webrepl
webrepl.start()
webrepl.stop()




评分

1

查看全部评分



回复

使用道具 举报

1035

TA的帖子

1

TA的资源

版主

Rank: 6Rank: 6

发表于 2016-6-25 16:30:43 | 显示全部楼层
给力,太好了。。


回复

使用道具 举报

2072

TA的帖子

4

TA的资源

版主

Rank: 6Rank: 6

发表于 2016-7-5 22:10:36 | 显示全部楼层
不知道怎么的,现在看这个MicroPython特别顺了。
有点感觉不这么写,都不规范了。

点评

官方默认也是这样的.  详情 回复 发表于 2016-7-5 22:36
MicroPython中文社区 http://www.micro-python.com/forum.php


回复

使用道具 举报

7065

TA的帖子

14

TA的资源

版主

Rank: 6Rank: 6

测评达人

 楼主| 发表于 2016-7-5 22:36:27 | 显示全部楼层
5525 发表于 2016-7-5 22:10
不知道怎么的,现在看这个MicroPython特别顺了。
有点感觉不这么写,都不规范了。

官方默认也是这样的.


回复

使用道具 举报

727

TA的帖子

6

TA的资源

版主

Rank: 6Rank: 6

发表于 2016-8-21 12:04:39 | 显示全部楼层
大D 我输入了那段网络的代码之后  终端一直输出
scandone
no essid found, reconnect after 1s
reconnect
  怎么让它停止这段输出啊

点评

这是联网不成功造成的,把网络功能停用,或者设置好网络参数就可以。 如: import network w=network.WLAN(networl.STA_IF) w.active(False) 然后重新设置网络参数,注意要填写你自己的SSID的密码。  详情 回复 发表于 2016-8-21 14:15
<font color="Red">物致DIY 期待您的到来~
QQ群:646461928
小店


回复

使用道具 举报

7065

TA的帖子

14

TA的资源

版主

Rank: 6Rank: 6

测评达人

 楼主| 发表于 2016-8-21 14:15:52 | 显示全部楼层
RCSN 发表于 2016-8-21 12:04
大D 我输入了那段网络的代码之后  终端一直输出
scandone
no essid found, reconnect after 1s
reconnec ...

这是联网不成功造成的,把网络功能停用,或者设置好网络参数就可以。

如:

import network
w=network.WLAN(networl.STA_IF)
w.active(False)

然后重新设置网络参数,注意要填写你自己的SSID的密码。

点评

如何停用网络功能  详情 回复 发表于 2016-8-21 19:15


回复

使用道具 举报

727

TA的帖子

6

TA的资源

版主

Rank: 6Rank: 6

发表于 2016-8-21 19:15:51 | 显示全部楼层
dcexpert 发表于 2016-8-21 14:15
这是联网不成功造成的,把网络功能停用,或者设置好网络参数就可以。

如:

import network
w=netw ...

如何停用网络功能

点评

上面代码就是停止网络的。更多的参考一下教程和快速指南。  详情 回复 发表于 2016-8-21 21:46
<font color="Red">物致DIY 期待您的到来~
QQ群:646461928
小店


回复

使用道具 举报

7065

TA的帖子

14

TA的资源

版主

Rank: 6Rank: 6

测评达人

 楼主| 发表于 2016-8-21 21:46:49 | 显示全部楼层
RCSN 发表于 2016-8-21 19:15
如何停用网络功能

上面代码就是停止网络的。更多的参考一下教程和快速指南。


回复

使用道具 举报

6886

TA的帖子

176

TA的资源

五彩晶圆(高级)

Rank: 9Rank: 9Rank: 9

测评达人

发表于 2017-9-21 08:46:33 | 显示全部楼层
D大 第一次接触这个 请问下 如果我自己的ESP8266想要用python搞 第一步是啥 下载专门的固件么 哪个固件可以提供么?

点评

官方的固件不错,先用这个 https://micropython.org/download#esp8266  详情 回复 发表于 2017-9-21 09:47


回复

使用道具 举报

7065

TA的帖子

14

TA的资源

版主

Rank: 6Rank: 6

测评达人

 楼主| 发表于 2017-9-21 09:47:24 | 显示全部楼层
常见泽1 发表于 2017-9-21 08:46
D大 第一次接触这个 请问下 如果我自己的ESP8266想要用python搞 第一步是啥 下载专门的固件么 哪个固件可以 ...

官方的固件不错,先用这个

https://micropython.org/download#esp8266

点评

只要ESP8266的都可以吧 我试试看  详情 回复 发表于 2017-9-21 10:33


回复

使用道具 举报

6886

TA的帖子

176

TA的资源

五彩晶圆(高级)

Rank: 9Rank: 9Rank: 9

测评达人

发表于 2017-9-21 10:33:56 | 显示全部楼层
本帖最后由 常见泽1 于 2017-9-21 10:35 编辑

只要ESP8266的都可以吧 我试试看
Firmware for ESP8266 boards 是下载这个么 D大

点评

目前大部分ESP8266开发板都可以用这个固件,下载需要先清除Flash,然后下载固件。  详情 回复 发表于 2017-9-21 12:27


回复

使用道具 举报

7065

TA的帖子

14

TA的资源

版主

Rank: 6Rank: 6

测评达人

 楼主| 发表于 2017-9-21 12:27:04 | 显示全部楼层
常见泽1 发表于 2017-9-21 10:33
只要ESP8266的都可以吧 我试试看
Firmware for ESP8266 boards 是下载这个么 D大

目前大部分ESP8266开发板都可以用这个固件,下载需要先清除Flash,然后下载固件。


回复

使用道具 举报

3552

TA的帖子

6

TA的资源

裸片初长成(初级)

Rank: 10Rank: 10Rank: 10

荣誉会员勋章

发表于 2017-9-21 13:22:19 | 显示全部楼层
玩过的能不能整理一下入门级的流程?我想很多人手里都有ESP8266的小板吧。但是自己升级过固件的应该不会很多。
老司机带一下可以让新手避免走弯路!

点评

先参考这个吧: http://bbs.eeworld.com.cn/thread-497226-1-1.html  详情 回复 发表于 2017-9-21 15:16


回复

使用道具 举报

7065

TA的帖子

14

TA的资源

版主

Rank: 6Rank: 6

测评达人

 楼主| 发表于 2017-9-21 15:16:51 | 显示全部楼层
jishuaihu 发表于 2017-9-21 13:22
玩过的能不能整理一下入门级的流程?我想很多人手里都有ESP8266的小板吧。但是自己升级过固件的应该不会很 ...

先参考这个吧:

http://bbs.eeworld.com.cn/thread-497226-1-1.html



回复

使用道具 举报

3552

TA的帖子

6

TA的资源

裸片初长成(初级)

Rank: 10Rank: 10Rank: 10

荣誉会员勋章

发表于 2017-9-22 10:43:09 | 显示全部楼层


回复

使用道具 举报

32

TA的帖子

5

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2017-10-7 10:49:24 | 显示全部楼层
给力,太好了。。


回复

使用道具 举报

559

TA的帖子

103

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

发表于 2018-1-20 00:28:30 | 显示全部楼层
敲代码好累,终于找到复制粘贴的了。
今晚刷了新固件,esp8266-20171101-v1.9.3


回复

使用道具 举报

1499

TA的帖子

0

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-1-20 02:42:18 | 显示全部楼层
非常不错啊


回复

使用道具 举报

60

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2018-2-6 17:21:31 | 显示全部楼层
谢谢D大带路。


回复

使用道具 举报

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

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2018-9-26 20:19 , Processed in 0.511982 second(s), 20 queries , Gzip On, Redis On.

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