天天看點

MicroPython_ESP8266_IoT——第二回 緻敬點燈(一切從點燈開始)

第二回 緻敬點燈(一切從點燈開始)

續接上回,接着折騰,接着學。

ESP8266通用資訊

ESP8266是Espressif Systems推出的一種流行的,具有WiFi功能的片上系統(SoC)。相關的Datasheet可以在這裡下載下傳 (密碼參考第一回内容)。

MicroPython for ESP8266庫(應該叫方法)中的Pin number都是基于ESP8266的晶片,而不是ESP8266子產品引出的引腳(意思就是不是那焊接的兩排排針的序号)。在網絡上找到了一張适配的引腳接線圖(花了好長時間),可以适配于ESP8266子產品和ESP8266的晶片,這張圖放的是原圖,可以直接下載下傳儲存:

MicroPython_ESP8266_IoT——第二回 緻敬點燈(一切從點燈開始)

為了後面使用友善,下裡提供一些技術規格:

  • CPU頻率:80 MHz,可以超頻至160 MHz(是不是一聽到超頻就激動滿滿);
  • 總可用RAM:94KB(部分預留給系統);
  • 外部FlashROM:存放程式和資料,通過SPI燒錄FLash,目前子產品挂在的胃4 MB;
  • GPIO:16 + 1(GPIOs 可複用為其他功能,包括外部FlashROM,UART,深睡喚醒等等);
  • UART:一組收發UART(無硬體握手協定),一組隻有TX的UART;
  • SPI:2組SPI接口(一組用于FlashROM);
  • I2C:無外部I2C(在任何引腳上均可以實作);
  • 程式設計:使用UART的Boot ROM引導程式。

内部資源限制

ESP8266晶片的片上資源非常有限(RAM),是以建議避免配置設定太多的容量給對象(list清單,dictionaries字典),使用完檔案系統,sockets等要注意及時關閉。

關于ESP8266啟動程序,Real-time clock,Sockets 和 WiFi buffer 溢出,SSL/TLS限制的資訊,可參考官方文檔 ,此處不再贅述。

電腦識别序列槽

将ESP8266子產品通過MicroUSB線纜,與PC連接配接。預設此時已經完成了ESP8266子產品的上電操作。

電腦端應該已經識别了ESP8266子產品上的序列槽晶片,如果在資料總管中看到對應的COM口出現感歎号,就必須要安裝序列槽相關驅動了(這個之前有提到過)。下圖所示的狀态就是已經識别并成功安裝驅動:

MicroPython_ESP8266_IoT——第二回 緻敬點燈(一切從點燈開始)

也可以在CMD控制台中輸入

mode

指令:

C:\Users\Administrator>mode
           

控制台中就會列舉出已經連接配接的序列槽,如下圖所示:

MicroPython_ESP8266_IoT——第二回 緻敬點燈(一切從點燈開始)

序列槽波特率修改方式

序列槽波特率如果不是115200,可以在裝置管理器中進行修改,操作步驟如下(這個GIF制作的設定不動的顔色預設為綠色,不過不影響内容表達):

MicroPython_ESP8266_IoT——第二回 緻敬點燈(一切從點燈開始)

擷取和燒錄固件

擷取固件

固件(firmware)可以了解為電腦的系統,有三種版本,适配不同的外挂Flash大小;本系列ESP8266子產品外挂Flash大小為4M,是以可以選用Stable firmware,這裡是下載下傳位址 (如果無法下載下傳或下載下傳過慢,之前的LZ網盤連接配接裡面也有此固件下載下傳)選擇最新版的即可:

  • esp8266-20200911-v1.13.bin (elf, map) (latest)

燒錄固件

需要使用esptool工具來燒錄剛才下載下傳好的固件。

安裝esptool

在CMD控制台中使用

pip

工具安裝esptool。pip為Python解釋器的工具,此處使用python 3,對應指令應修改為:

pip3 install esptool
           

如果提示pip需要更新,可按照提示指令将pip更新為最新版本。

安裝好之後鍵入

esptool.py version

,可以檢視目前工具版本:

C:\Users\Administrator>esptool.py version
esptool.py v2.6
2.6
           

這樣,就可以愉快的使用此工具進行ESP8266的固件燒錄了。

擦除Flash

可以使用這樣的指令清除ESP8266子產品上flash内容(現在端口修改為COM8):

esptool.py --port COM8 erase_flash
           

如果擦除成功控制台會出現下面的提示:

C:\Python3\Lib\site-packages>esptool.py --port COM8 erase_flash
esptool.py v2.6
Serial port COM8
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
MAC: b4:e6:2d:34:ae:9d
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 9.2s
Hard resetting via RTS pin...

C:\Python3\Lib\site-packages>
           

如果指令行執行一直顯示

serial.serialutil.SerialException: could not open port 'COM8': PermissionError(13, '拒絕通路。', None, 5)

,有兩點建議:

  1. 指令行切換到esptool.py的安裝目錄:

    C:\Python3\Lib\site-packages>

    ;
  2. 重新對ESP8266子產品重新上電。

直至出現燒錄,結束之後可以通過闆載的

RST

按鈕進行複位。

可以燒錄啦

接着剛才的目錄,将firmware檔案

esp8266-20200911-v1.13.bin

拷貝到該目錄下,在控制台中執行:

esptool.py --port COM8 --baud 460800 write_flash --flash_size=detect 0 esp8266-20200911-v1.13.bin
           

成功安裝将得到的結果如下:

C:\Python3\Lib\site-packages>esptool.py --port COM8 --baud 460800 write_flash --flash_size=detect 0 esp8266-20200911-v1.13.bin
esptool.py v2.6
Serial port COM8
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
MAC: b4:e6:2d:34:ae:9d
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
Auto-detected Flash size: 4MB
Flash params set to 0x0040
Compressed 638928 bytes to 419659...
Wrote 638928 bytes (419659 compressed) at 0x00000000 in 9.4 seconds (effective 541.1 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...

C:\Python3\Lib\site-packages>
           

而且, 燒錄成功預設ESP8266處于AP狀态,也就是說可以打開手機或電腦WIFI搜尋,搜尋到以MicroPython-xxxxxx形式存在的WIFI,這種連接配接方式作用于下一小節,通過WIFI連接配接REPL prompt。

如果未能成功安裝,詳細的排查方案參考這裡解決安裝問題 。筆者提供兩個檢查方法:

  1. 檢查指令行格式是否正确;
  2. 檢查檢查端口是否識别,可以先進行擦除,擦除成功後緊接着進行燒錄;

固件燒錄成功,也就意味着已經安裝好解釋器了,可以對輸入的Python指令行或腳本進行解釋了,那麼如何使用這個解釋器呢?

使用REPL prompt

REPL(Read Evaluate Print Loop),可以了解為循環讀取評估闆資訊。ESP8266子產品就可以通過這互動了解内部的MicroPython程式或者指令行操作。可以通過UART序列槽或者WIFI進行連接配接。

本系列隻介紹UART連接配接,WIFI連接配接可自行檢視WebREPL - a prompt over WiFi 。

UART prompt

REPL始終映射的是UART0外設,ESP8266的GPIO1為TX,GPIO3為RX,波特率為1152000。

本系列的ESP8266子產品上有序列槽晶片,是以可以通過MicrUSB線纜直接連接配接電腦。

在Windows,本系列選用的是

Tera Term

工具,這裡留下Tera Term下載下傳位址正如前面所述,也可以使用其他帶有序列槽接受和發送的軟體。

打開軟體,設定好COM8和波特率,按下ESP8266子產品的

RST

按鍵,即可擷取資訊:

MicroPython v1.13 on 2020-09-11; ESP module with ESP8266
Type "help()" for more information.
>>>
           

這樣就是熟悉的界面,類似于Python的解釋器樣式,就可以使用Python的指令行操作:

MicroPython_ESP8266_IoT——第二回 緻敬點燈(一切從點燈開始)

嗯嗯,可以在這裡試一試Python相關的指令行操作,熟悉之後,就可以點燈啦!

點燈大法

ESP8266子產品預設闆載GPIO2連接配接了一顆LED燈(本系列是藍色的燈)。可以控制GPIO2來改變燈的狀态,鍵入如下Code,以下示意帶逐行解釋,實際操作不需要輸入

#

以及該行後面内容:

>>> import machine		# 導入machine
>>> pin = machine.Pin(2, machine.Pin.OUT)		#定義引腳2為輸出類型,名稱為pin
>>> pin.on()		# pin引腳打開(輸出高電平)
>>> pin.off()		# pin引腳關閉(輸出低電平)
>>>
           

如果操作正常,就應該能看到ESP8266子產品上的燈亮起;上述

pin.on()

pin.off()

的狀态與本系列的LED燈的控制相反,這個取決于LED在闆子上的連接配接方式,不必過多糾結。

循環點燈

在這個REPL pormpt指令行中,支援很多正常操作如:

  • 上鍵下鍵,擷取輸入曆史;
  • Tab自動補全;
  • 函數,方法定義自動換行續航,縮進;
  • Ctrl - E進入特殊粘貼模式,可以粘貼一段Code;

那麼就可以定義一個LED跳轉的函數,進行循環電燈的操作:

>>> import machine
>>> pin = machine.Pin(2, machine.Pin.OUT)
>>> pin.on()
>>> pin.off()
>>> def toggle(p):
...     p.value(not p.value())
...
>>> toggle(pin)
>>> toggle(pin)
>>> import time
>>> while True:
...     toggle(pin)
...     time.sleep_ms(500)
...

           

ESP8266子產品GPIO2被驅動閃爍的實際效果圖如下:

MicroPython_ESP8266_IoT——第二回 緻敬點燈(一切從點燈開始)

這個時候肯定是極大的喜悅。

這種指令行進行code編寫,在學習的時候比較友善;但是如果程式内容比較多,還是通過腳本檔案結構清晰,友善,第四回會介紹通過更新MicroPython腳本檔案的形式進行程式編寫。

通過配置GPIO為PWM輸出,也可以實作LED的呼吸狀态,在第三回,介紹PWM驅動的時候會嘗試。

結束語

第二回的内容比較重要,雖然是簡單的點燈,但可以将整個燒錄流程,REPL prompt方式熟悉。

接着就是第三回,學習其他常用的驅動方法。

2020-12-20;

繼續閱讀