用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”,在打開的界面中設置好參數:
在燒寫之前,先點擊ERASE按鈕進行擦除操作,保證燒寫的固件不受干擾。
然后點擊START進行燒寫操作。
進度表跑完,提示FINISH的時候,代表燒寫完畢並成功。
2. 開發環境
開發環境使用ESPlorer,網上有很多,可以百度下,具體界面如下:
左半區為代碼編碼區,右半區為和硬件通訊調試區。
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:
連接成功后,我們首先點擊左下角的Send to esp按鈕,將腳本發往緩沖區,然后在右下角命令行輸入 do_connect()命令,然后點擊send按鈕,進行執行。之后可以看到輸出如下:
注意文中有webrepl is not configured, run import webrepl_setup. 這里說明一下,webrepl可以方便我們將腳本上傳到開發板中,所以這個命令要開啟,我們就按照其提示就行,在命令行中輸入import webrepl_setup,然后點擊執行,輸出如下:
這里我們按照他的要求,在命令行輸入E,然后點擊send按鈕:
之后讓我們輸入密碼,這里我們在命令行中輸入12345,並確認:
最后問我們是否reboot,輸入y並發送即可。然后開發板會執行reboot操作。
這時候我們將networking.py的代碼點擊左下角的send to esp,然后在右下角執行 do_connect()並send,可以看到webrepl成功打開:
去https://github.com/micropython/webrepl下載webrepl的壓縮包,解壓,運行其中的webrepl.html,可以打開界面,然后輸入ws://192.168.43.2:8266,確認密碼12345后即可成功連接。
最后點擊想要上傳的文件,然后上傳即可:
最后從ESPlorer中,我們就可以看到上傳的文件了:
最后我們可以用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)
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();