• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

microPython的小问题,webrepl断开时会死机

xukejing 2018-02-24 浏览量:2061
硬件是esp8266。microPython固件是20171101稳定版。
esp8266开启了无线AP,笔记本连接这个AP后,使用webrepl可以在线调试。
发现一个小问题,调试完以后,笔记本断开,会发现esp8266同时也死机了,需要按reset键重启才能恢复。
模块上的程序代码大概是如下这样的。
贴出来的代码稍微做了简写,控制部分简化了一下,但是保留了原来的框架。
主要是引用了ds3231时钟芯片、ds18x20数字温度传感器和ssd1306 OLED的库,然后做了些控制。
import machine
import time
from ds3231 import DS3231
import ssd1306
import onewire, ds18x20
from machine import ADC, Pin
import gc
S1=Pin(14,Pin.OUT,value=1)
S2=Pin(12,Pin.OUT,value=1)
S3=Pin(13,Pin.OUT,value=1)
S4=Pin(16,Pin.OUT,value=1)
set_temp=26.00
main_pump_on=27000
main_pump_off=72000
O3_on=61200
O3_off=61210
light_on=25200
light_off=72000
def main():
    S1on=0
    S2on=0
    S3on=0
    S4on=0
    tem=0.00
    sec_in_day=0
    i2c = machine.I2C(-1, machine.Pin(5), machine.Pin(4))
    oled = ssd1306.SSD1306_I2C(128, 64, i2c)
    ds3231=DS3231()
    t=[0,0,0]
    dat = machine.Pin(2)
    ds = ds18x20.DS18X20(onewire.OneWire(dat))
    roms = ds.scan()
    while True:
        ds.convert_temp()
        time.sleep_ms(750)
        for rom in roms:
            tem=ds.read_temp(rom)
        
        if set_temp<tem:
            S1on=0
            S1.value(1)
        elif (set_temp-tem)>0.5:
            S1on=1
            S1.value(0)
            
        d=ds3231.DATE()
        t=ds3231.TIME()
        sec_in_day=t[0]*3600+t[1]*60+t[2]

        if sec_in_day>main_pump_on and sec_in_day<main_pump_off:
            S2on=1
            S2.value(0)
        else:
            S2on=0
            S2.value(1)
            
        if sec_in_day>O3_on and sec_in_day<O3_off:
            S3on=1
            S3.value(0)
        else:
            S3on=0
            S3.value(1)
            
        if sec_in_day>light_on and sec_in_day<light_off:
            S4on=1
            S4.value(0)
        else:
            S4on=0
            S4.value(1)
            
        t_o="Time: %02d:%02d:%02d"%(t[0],t[1],t[2])
        d_o="Date: 20%02d/%02d/%02d"%(d[0],d[1],d[2])
        tem_o="T_water: %02.2f"%tem

        if S1on==1:
            power_o="Heating:on "
        else:
            power_o="Heating:off"

        if S2on==1:
            pump_o="Pump:on "
        else:
            pump_o="Pump:off"

        if S3on==1:
            o3_o="o3:on "
        else:
            o3_o="o3:off"

        if S4on==1:
            light_o="Lighting:on "
        else:
            light_o="Lighting:off"
            
        line1="%s %s %s %s %s %s %s"%(d_o,t_o,tem_o,power_o,pump_o,o3_o,light_o)
        print(line1)
        print(gc.mem_free())
        oled.fill(0)
        oled.text(d_o, 0, 0)
        oled.text(t_o, 0, 10)
        oled.text(tem_o, 0, 20)
        oled.text(power_o, 0, 30)
        oled.text(pump_o, 0, 40)
        oled.text(o3_o, 80, 40)
        oled.text(light_o, 0, 50)
        oled.show()
        time.sleep_ms(250)
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
所有亮答 数量:0

相关问题

问题达人换一批

microPython的小问题,webrepl断开时会死机