Browsed by
標籤:ESP8266

MicroPython: how to upload program and run code

MicroPython: how to upload program and run code

之前的文章 (MicroPython Lab1: Blink LED) 介紹是使用互動模式在 serial REPL 鍵入在NodeMCU上執行的 python code。

這個方法很適合作即時的小實驗,但要開發比較複雜的程式時在IDE上是比較方便的。如果ESP8266開發板有1MB以上的Flash,MicroPython 啟動後會配置一個內部的 file system,可以將程式碼儲存在file system 中。

當ESP8266啟動時會自行載入特定名稱的程式執行 (就像是 Arduino 執行 Arduino sketch一樣),開機之後系統預設會先執行 boot.py 然後再執行 main.py 。

本文將介紹如何使用 Adafruit MicroPython tool (AMPY) upload 程式碼以及如何執行

第一步要安裝AMPY

可以用 pip 來安裝 Adafruit MicroPython tool (AMPY),需要 Python 2.7.x或3.x的版本。

 $ pip install adafruit-ampy

要確認是否安裝成功可以執行以下執令

$ ampy --help

執行MicroPython程式碼

我們可以使用 run 指令來將一份MicroPython程式上傳到NodeMCU去執行。例如以下的程式若儲存為 “blink10times.py

import machine
import time 
ledD2 = machine.Pin(4, machine.Pin.OUT)
for i in range(10):
    ledD2.high()
    time.sleep(0.5)
    ledD2.low()
    time.sleep(0.5)

那可以執行以下的 shell command

$ ampy --port COM15 run blink10times.py

這樣 ampy 會上傳 blink10times.py 到 NodeMCU 並且執行它,其中的COM port # 要看自己的usb-ttl是接到哪一個Port 而作調整。

Copy 程式到開發板

我們也可以直接將 blink10times.py copy 到 NodeMCU 的根目錄命名為 main.py

$ ampy --port COM15 put blink10times.py main.py

這樣 Reset NodeMCU之後,它就會自動執行 main.py

其它ampy 指令

ampy還有提供其他的指令, 詳情可以參考 https://github.com/adafruit/ampy

get: Retrieve a file from the board.
ls: List contents of a directory on the board.
mkdir: create a folder
rm: Remove a file from the board.

MicroPython Lab1: Blink LED

MicroPython Lab1: Blink LED

燒錄 MicroPython firmware 之後的下一件事當然就是–來點亮LED.

當我們連上NodeMCU的 serial REPL 之後應該會出現 “>>>” 提示號
1. import “machine” module

import machine

2. NodeMCU內建的LED GPIO pin number 是2, 利用 machine.Pin 建立一個GPIO物件 led 並設定作為輸出.

led = machine.Pin(2, machine.Pin.OUT) 

3. NodeMCU 內建LED pin value=HIG 是閉, value=LOW 是亮.

led.high() #關閉LED
led.low()  #點亮LED

接著測試外接LED (LED 正極接在 pin D2), 底下的程式碼能讓LED閃爍十遍

import machine
import time 
ledD2 = machine.Pin(4, machine.Pin.OUT)
for i in range(10):
    ledD2.high()
    time.sleep(0.5)
    ledD2.low()
    time.sleep(0.5)

MicroPython Lab1-LED

在 NodeMCU 上執行 MicroPython

在 NodeMCU 上執行 MicroPython

本文記錄一下我燒錄 MicroPython 到 ESP8266 上的經驗.

市面有不同 8266 開發板, 我試了

  1. Arduino UNO R3 ESP8266 Web Sever串口WiFi擴展板shiled(ESP-13)
  2. NodeMcu Lua v2 (2版) WIFI 物聯網開發板

第二個開發板燒錄比較方便, 不需要另外按其它的 button 即可進行燒錄.

要使用 NodeMcu 必須安裝  CP210x USB to UART Bridge Virtual COM Port (VCP) drivers, 裝完 driver 將NodeMCU 插上USB, 應該可以在裝置管理員看到新增了一個COM port

cp210x-usb-2-uart-bridge

在 Python 的環境下要燒錄 MicroPython 的 firmware 需要使用到 epstool. 在安裝 esptool 之前要先將它使用到的程式環境安裝好. 有以下三項:

  • Python 2.7 – esptool 目前只能執行在 Python 2.7 的環境, 我是安裝 miniconda 的套件.
  • PySerial Library –  建議是在一個 virtual environment 下利用 pip install pyserial 來安裝.
  • Git – 利用 git 來下載最新版本的 esptool script.
git clone https://github.com/themadinventor/esptool.git
cd esptool

然後下載 MicroPython 的 firmware http://micropython.org/download/#esp8266

可以使用以下命令來上傳 firmware

esptool.py --port <serial-port-of-ESP8266> --baud 115200 write_flash --flash_size=<size> 0x00000 <firmware>.bin

我的環境為:

  • COM port : 15
  • flash size: 32m bit (4M byte)
  • firmware: esp8266-20160909-v1.8.4.bin

執行結果如下

$ python esptool.py --port COM15 --baud 115200 write_flash --flash_size=32m 0 esp8266-20160909-v1.8.4.bin
esptool.py v1.2-dev
Connecting...
Running Cesanta flasher stub...
Flash params set to 0x0040
Writing 565248 @ 0x0... 565248 (100 %)
Wrote 565248 bytes at 0x0 in 49.0 seconds (92.3 kbit/s)...
Leaving...

接下來可以用 putty 來連結 MicroPython REPL (read-evaluate-print loop), putty 的設定如下:

putty-to-serial-repl

然後就可以就可使用python語法來在 ESP8266 開發板開發程式了.

 

參考資料

  1. 燒錄firmware, https://learn.adafruit.com/building-and-running-micropython-on-the-esp8266/flash-firmware
  2. 連接 REPL, https://learn.adafruit.com/micropython-basics-how-to-load-micropython-on-a-board/serial-terminal
  3. NodeMcu 開發板各版本說明, http://frightanic.com/iot/comparison-of-esp8266-nodemcu-development-boards/