MicroPython入坑记(二)刷固件(ESP8266 ESP32)

先来个刷写过程:

其实各种刷ESP8266/ESP32的软件都可以搞(比如刷NodeMCU的软件),不过我这还是出问题了:刷完后无限输出乱码。然后参照Micropython官方的教程,用esptool先清除所有的FLASH,然后重新刷入,正常运行:

pip install esptool 安装esptool(当然,电脑上要先装好python)
esptool.py --port /dev/ttyUSB0 erase_flash 擦除所有的flash,如果是windows系统,则改为具体的COM口,比如我的电脑是COM4:
esptool.py --port COM4 erase_flash刷入固件这个命令比较长,可以不熟悉命令行的可以用其他GUI软件代替:
esptool.py --port COM4 --baud 460800 write_flash --flash_size=detect 0 esp8266.bin(这个改为具体固件文件名)
刷完后,用putty连接板子会出现以下界面(如果没有显示就先按一下RST键):
 现在就可以执行Python代码了,支持命令补全哦列出所有的模块:继续探索:在ESP8266上,跟板子相关的代码主要在esp machine两个模块上:

import esp
import machine
dir(esp)
[’__class__’, ‘__name__’, ‘SLEEP_LIGHT’, ‘SLEEP_MODEM’, ‘SLEEP_NONE’, ‘apa102_write’, ‘check_fw’, ‘deepsleep’, ‘dht_readinto’, ’esf_free_bufs’, ‘flash_erase’, ‘flash_id’, ‘flash_read’, ‘flash_size’, ‘flash_user_start’, ‘flash_write’, ‘free’, ‘freemem’, ‘info’, ‘malloc’, ‘meminfo’, ’neopixel_write’, ‘osdebug’, ‘set_native_code_location’, ‘sleep_type’]
dir(machine)
[’__class__’, ‘__name__’, ‘ADC’, ‘DEEPSLEEP’, ‘DEEPSLEEP_RESET’, ‘HARD_RESET’, ‘I2C’, ‘PWM’, ‘PWRON_RESET’, ‘Pin’, ‘RTC’, ‘SOFT_RESET’, ‘SPI’, ‘Signal’, ‘Timer’, ‘UART’, ‘WDT’, ‘WDT_RESET’, ‘deepsleep’, ‘disable_irq’, ’enable_irq’, ‘freq’, ‘idle’, ‘mem16’, ‘mem32’, ‘mem8’, ‘reset’, ‘reset_cause’, ‘sleep’, ’time_pulse_us’, ‘unique_id’]

从上边的输出可以看到,esp主要是显示一些基础的指令,比如深度休眠,申请内存之类,machine主要是操作IO之类

先试着点一下LED灯(我这个板子自带了一个LED在GPIO2)

from machine import Pin
led=Pin(2,Pin.OUT)
led.on()
led.off()

是不是很神奇?哈哈

然后连接网络:

import network   # 导入network包
wlan=network.WLAN()  #生成wlan对象
wlan.active(1)  #开启wlan
mode : sta(5c:cf:7f:0e:25:19) + softAP(5e:cf:7f:0e:25:19)
#5 ets_task(4020ed90, 28, 3fff9fa0, 10)
add if0
wlan.scan() #扫描wlan信号

wlan.connect(‘OpenWrt’,‘xde12345’) #连接wlan

lascandone
state: 0 -> 2 (b0) state: 2 -> 3 (0)
state: 3 -> 5 (10)
add 0
aid 2
cnt

connected with OpenWrt, channel 11
dhcp client start…
ip:192.168.43.203,mask:255.255.255.0,gw:192.168.43.1

可以看到,已经连接成功了,这里有个很酷的功能,就是esp8266的MicroPython固件是可以自动保存网络配置(esp32的暂时还不行)的,重新上电就能连接上次连接的无线网络(酷)

能联网了,干点啥事呢^^,发现内置个ntptime模块,玩玩先:

import time
time.localtime()
(2000, 1, 1, 0, 0, 18, 5, 1)

现在时间是2000年1月1号

import ntptime
ntptime.time()
575780696

获取了个时间戳

ntptime.settime()
(2018, 3, 31, 3, 5, 7, 5, 90)

设置时间

time.localtime()
(2018, 3, 31, 3, 5, 12, 5, 90)

等等,这世间不对吧,估计是UTC时间,暂时还没设置时区的地……先这样吧