zoukankan      html  css  js  c++  java
  • esp8266物联网开发一:MicroPython初战江湖

    用esp8266做的物联网开发,涉及到固件烧写,固件擦除,代码编写等方面,做一一记录。

    1. 固件烧写

    首先,下载固件烧写工具:https://www.espressif.com/sites/default/files/tools/flash_download_tools_v3.6.3.rar,具体烧写包我会在后面附加。

    然后,下载micropython固件包:http://www.micropython.org/download/esp8266/,一般选择512k的包即可。

    打开固件烧写工具,点击“esp8266 download tools”,在打开的界面中设置好参数:

    1586687142(1)

    在烧写之前,先点击ERASE按钮进行擦除操作,保证烧写的固件不受干扰。

    1586687451(1)

    然后点击START进行烧写操作。

    1586687550(1)

    进度表跑完,提示FINISH的时候,代表烧写完毕并成功。

    2. 开发环境

    开发环境使用ESPlorer,网上有很多,可以百度下,具体界面如下:

    1586687667(1)

    左半区为代码编码区,右半区为和硬件通讯调试区。

    3. esp8266联网

    在进行开发之前,一般需要进行芯片联网设置的,具体操作如下:

    首先,准备联网代码和热点,其实用手机热点就行:

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

    可以看出,我手机热点为cxsr,密码为12345

    然后,在ESPlorer中,新建一个py文件,保存为networking.py,将上述代码拷贝进去,同时,通过com口进行连接,如果连接开发板成功,会提示Type help() for more information:

    1586687942(1)

    连接成功后,我们首先点击左下角的Send to esp按钮,将脚本发往缓冲区,然后在右下角命令行输入 do_connect()命令,然后点击send按钮,进行执行。之后可以看到输出如下:

    1586688135(1)

    注意文中有webrepl is not configured, run import webrepl_setup. 这里说明一下,webrepl可以方便我们将脚本上传到开发板中,所以这个命令要开启,我们就按照其提示就行,在命令行中输入import webrepl_setup,然后点击执行,输出如下:

    1586688272(1)

    这里我们按照他的要求,在命令行输入E,然后点击send按钮:

    1586688319(1)

    之后让我们输入密码,这里我们在命令行中输入12345,并确认:

    1586688399(1)

    最后问我们是否reboot,输入y并发送即可。然后开发板会执行reboot操作。

    这时候我们将networking.py的代码点击左下角的send to esp,然后在右下角执行 do_connect()并send,可以看到webrepl成功打开:

    1586688534(1)

    https://github.com/micropython/webrepl下载webrepl的压缩包,解压,运行其中的webrepl.html,可以打开界面,然后输入ws://192.168.43.2:8266,确认密码12345后即可成功连接。

    1586688629(1)

    最后点击想要上传的文件,然后上传即可:

    1586688704(1)

    最后从ESPlorer中,我们就可以看到上传的文件了:

    1586688725(1)

    最后我们可以用ssd1306驱动来一个程序点亮oled试试:

    from machine import Pin, I2C
    i2c = I2C(scl=Pin(5), sda=Pin(4))
    
    from ssd1306 import SSD1306_I2C
    oled = SSD1306_I2C(128, 64, i2c)
    
    oled.fill(1)
    oled.show()
    oled.fill(0)
    oled.show()
    
    oled.pixel(0, 0, 1)
    oled.show()
    oled.pixel(127, 63, 1)
    oled.show()
    
    oled.text('Hello', 0, 0)
    oled.text('World', 0, 10)
    oled.show()
    
    oled.invert(True)
    oled.invert(False)

    1586688999(1)

    4. 相关下载

    https://files.cnblogs.com/files/scy251147/flash_download_tools_v3.6.3.rar

    5. 点亮led的代码:

    from machine import Pin
    import time
    
    p=Pin(2,Pin.OUT)
    while True:
      p.value(0)
      time.sleep(2)
      p.value(1)
      time.sleep(1)

    6. 继电器使用代码:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    from machine import Pin
    import time
    
    p=Pin(16,Pin.OUT)
    
    def blink(ms):
        while True:
            p.value(0)
            time.sleep_ms(ms)
            p.value(1)
            time.sleep_ms(ms)
    
    
    blink(1000)


    7. 步进电机使用代码:

    import time
    from machine import Pin
    
    
    #步进电机引脚依次连接板子上  d0 d3 d4 rx
    #对应的编程脚为            16 0  2  3
     
    speed = 2
    STEPER_ROUND=512 #转动一圈(360度)的周期
    ANGLE_PER_ROUND=STEPER_ROUND/360 #转动1度的周期
    #print('ANGLE_PER_ROUND:',ANGLE_PER_ROUND)
    p1 = Pin(16, Pin.OUT, value=0)
    p2 = Pin(0 , Pin.OUT, value=0)
    p3 = Pin(2 , Pin.OUT, value=0)
    p4 = Pin(3 , Pin.OUT, value=0)
    
    def Front():
        global speed
           
        p1.value(1)
        p2.value(1)
        p3.value(0)
        p4.value(0)
        time.sleep_ms(speed)
    
        p1.value(0)
        p2.value(1)
        p3.value(1)
        p4.value(0)
        time.sleep_ms(speed)
    
        p1.value(0)
        p2.value(0)
        p3.value(1)
        p4.value(1)
        time.sleep_ms(speed)
    
        p1.value(1)
        p2.value(0)
        p3.value(0)
        p4.value(1)
        time.sleep_ms(speed)
         
    def Back():
        global speed
         
        p1.value(1)
        p2.value(1)
        p3.value(0)
        p4.value(0)
        time.sleep_ms(speed)
         
        p1.value(1)
        p2.value(0)
        p3.value(0)
        p4.value(1)   
        time.sleep_ms(speed)
         
        p1.value(0)
        p2.value(0)
        p3.value(1)
        p4.value(1)
        time.sleep_ms(speed)
     
        p1.value(0)
        p2.value(1)
        p3.value(1)
        p4.value(0)
        time.sleep_ms(speed)
     
     
    def Stop():
        p1.value(0)
        p2.value(0)
        p3.value(0)
        p4.value(0)
         
    def Run(angle):
        global ANGLE_PER_ROUND
         
        val=ANGLE_PER_ROUND*abs(angle)
        if(angle>0):
            for i in range(0,val):
                Front()
        else:
            for i in range(0,val):
                Back()
        angle = 0
        Stop()
     
    def main():
        Run(360)
        Run(-360)
    
    main();
  • 相关阅读:
    HTML&CSS学习总结(一)
    PHP学习总结(一)
    二、python基础1 基本语法、流程控制
    MySQL练习题
    python自动化学习目录大全
    简单练习:Python三级菜单优化
    一、python语言简介
    网络编程与并发—批量主机管理开发
    windows安装nginx并存放静态资源
    集成xxl-job分布式任务调度平台
  • 原文地址:https://www.cnblogs.com/scy251147/p/12686919.html
Copyright © 2011-2022 走看看