LoginSignup
10
4

More than 5 years have passed since last update.

MicroPython on ESP8266

Posted at

MicroPython on ESP8266

Amica製NodeMCUでMicroPythonを使ってみたので、使い方や躓いたところのメモ。

ホスト環境
OS: elementaryOS Loki

GettingStart

事前準備

NodeMCUにはUSB TypeB端子が付属している。
これでホストと接続できるが、接続にはCP210xドライバ(cp210x.ko)が必要。
(中国製の偽物の場合、ch34xとかいうものが必要になるらしい)

Linuxなら(おそらく)既に入っているはずだが、必要なら、ここで落とす。

micropython書き込みのための準備

  • micropythonのESP8266用ファームウェアをダウンロード
    • https://micropython.org/download の Firmware for ESP8266 boardsからダウンロードできる
    • ここでは、esp8266-20171101-v1.9.3.binをダウンロードした
  • 書き込み用のツール esptool をインストール
    • sudo -H pip esptool.py

書き込む

USBでNodeMCUとホストを接続したら、以下の手順でmicropythonを書き込む。

  • dmesgでNodeMCUがどのデバイスファイルに割り当てられたか確認する(だいたい/dev/ttyUSB0とかになってる)
  • まずはフラッシュの内容を消去
    sudo esptool.py --port /dev/ttyUSB0 erase_flash
  • 次に事前にダウンロードしたファームウェアをインストール
    sudo esptool.py --port /dev/ttyUSB0 --baud 9600 write_flash --flash_size=detect -fm dio 0 esp8266-20171101-v1.9.3.bin

触ってみる

  • NodeMCUのmicropython対話型実行環境に接続する
    sudo screen -R NodeMCU /dev/ttyUSB0
  • Lチカしてみる。machineモジュールでGPIOなどを操作することが可能。

ピン2はオンボードのLED

import machine
import time
pin = machine.Pin(2, machine.Pin.OUT)
for i in range(10):
  pin.value(0)
  time.sleep(0.1)
  pin.value(1)
  time.sleep(0.1)

自作モジュールを作ってみる

Lチカのモジュールを作ってみる。
LED.pyというファイルを作成し、その中にLチカのプログラムを記述する。

f = open('LED.py', 'w')
f.write("""
import machine
import time

class LED(object):
  def __init__(self,pinNum, direction):
    self.pin = machine.Pin( pinNum, direction)

  def Blink(self, repeatTime, sleepTime):
    for i in range(repeatTime):
      self.pin.value(0)
      time.sleep(sleepTime)
      self.pin.value(1)
      time.sleep(sleepTime)

  def Notice(self):
    self.Blink(3, 0.1)

  def Alert(self):
    self.Blink(3, 0.05)
""")
f.close()

メインループの作成

micropythonにはboot.pyとmain.pyの2つの特別なファイルがある。
boot.py → main.pyという順に実行される。
Arduinoで言うところのsetup()がboot.py。loop()がmain.py。

今回はmain.pyを記述していく。

ファイルシステム
import os
os.listdir()

で中身を確認出来る。

os.mkdir('hogehoge')

でディレクトリ作成。

os.rmdir('hogehoge')

でディレクトリ削除

main.pyの編集

main.pyが既にある場合、Errno 13が出てアクセスできないので一度削除する。

os.rmdir('main.py')
os.listdir()

出力結果: ['boot.py', 'LED.py']

あとはLED.pyのときと同じ。

f = open('main.py', 'w')
f.write("""
import machine
from LED import LED
import time

timeLED = LED(2, machine.Pin.OUT)
hourCount = 1
minCount = 1

while True:
    if hourCount == (60 * 60):
        timeLED.Notice()
        hourCount = 1
        minCount = 1
    elif minCount == 60:
        timeLED.Alert()
        minCount = 1
    else:
        timeLED.Blink(1,0.1)

    hourCount += 1
    minCount += 1
    time.sleep(1)

""")
f.close()

このあと、Ctrl+Dでリセット。

次はWifiを使ってなんかするつもり。
それにしてももっと楽にファイルを作成する方法はないものか……

10
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
4