寝台急行はまなす

札幌駅 22:00発 増結12両編成 青森行き

Pycom ~micropythonのIoTメーカー~

qiita.com

MicroPython Advent Calender 6日目です。
8日目に投稿していますが、6日目です。

さてmicropythonのご関心の皆様はPycomというメーカーご存知でしょうか?

pycom.io

ESP32とmicropythonを使用した製品を作成して販売しています。
もちろんESP32でのmicropythonの移植も彼ら独自で行っていますし本家の移植作業を支援したりと協力関係にあるようです。
※確かここも元はKickstartterだったような。。micropythonはKickstarterと相性が良いですね。

Pycomはヨーロッパの企業ですが製品はラズパイでお馴染みのRSコンポーネンツで取り扱われています。
しかしいずれの製品も技適を取得していませんので紹介にとどめておきます。
購入された方はご自宅の電波暗室で楽しみましょう。

SiPy

SiPy RCZ2 & RCZ4 | Pycom 高周波回路 開発キット SiPy IoT RCZ2/4 | Pycom 【通販RS】

Sigfox対応モデル

Lopy

LoPy | Pycom 高周波回路 開発キット LoPy IoT | Pycom 【通販RS】

LoRaWAN対応モデル

Wipy

WiPy 2.0 | Pycom 高周波回路 開発キット WiPy IoT | Pycom 【通販RS】

Wifi対応モデル

LPWAの規格に応じてモデルが分かれています。
とはいえどのモデルでもESP32を使っているのでインターフェイスはどれも以下で同じようですね。

  • UART x 2、SPI x 2、I2C、I2S、microSDカード
  • アナログチャンネル: 12 bit ADC x 8
  • タイマ: 16 bit x 4、PWM及び入力キャプチャ対応
  • ペリフェラルにDMA
  • GPIO: 最大24

Pycomの製品を購入して動かすことはできませんが、ドキュメントやフォーラムには色々と面白そうなネタがありますので
ご紹介していきたいと思います。

Preface · Pycom Documentation

それにしてもWiFi到達距離: 最大 1 kmってほんとにそんな飛ぶんですかね??

micropythonでOLED (SSD1306)

qiita.com

MicroPython Advent Calender 8日目です。
今日はESP32 + micropythonでOLEDに文字を表示してみました。

使ったもの

SPI接続方式のOLEDディスプレイです。Aliexpressで3$~で売られています。 私は知り合いの方からタダで譲ってもらいました。ありがとうございます。

このパーツの詳しい説明とArduinoでの使い方は下記ページがとても詳しく参考になります。

[SPI] 0.96 inch OLED ディスプレイ (ER-OLED0.96-3W / SSD1306)

SSD1306用ドライバの入手と転送

SSD1306用のドライバをgithubから拾ってきてampyツールで転送しておきます。

micropython/ssd1306.py at master · micropython/micropython · GitHub

> ampy -p COM4 put ssd1306.py

配線

ESP32とSSD1306を接続します。 以下のページと同じように配線しました。

ESP32 + MicroPythonでOLEDに表示させてみた: 楽しくやろう。

SSD1306 ESP32
VCC 3v3
GND GND
D0 IO14
D1 IO13
RES IO16
DC IO17
CS IO18

いざ動かし

ではREPLで動かしてみましょう

>>> from machine import Pin, SPI
>>> spi = SPI(2, baudrate=8000000, polarity=1, phase=0, sck=Pin(14), mosi=Pin(13), miso=Pin(12))
>>> from ssd1306 import SSD1306_SPI
>>> oled = SSD1306_SPI(128, 64, spi, dc=Pin(16), res=Pin(17), cs=Pin(18))
>>> oled.text('MicroPython', 0, 0)
>>> oled.show()
>>> oled.text('Advent Calender', 0, 10)
>>> oled.show()
>>> oled.text('8 days', 0, 20)
>>> oled.show()

1枚目の写真のように文字が表示されました。

NTPで取得した時間を表示したりなど応用ができそうですね。 日本語のフォントをSDカードから読みだして漢字やひらがなの表示なんか挑戦してみたいですね。

micropythonでneopixel

qiita.com

 

MicroPython Advent Calender 6日目です。

 

今日はneopixelのLEDリングを光らせます。

 

 

micro:bitでやろうと思ったのですが、どっかいってしまったのでESP32で行いました。

 

11. Controlling NeoPixels — MicroPython 1.9.3 documentation

 

チュートリアルに沿ってまずREPLで動かしてみます。

 

>>> from machine import Pin
>>> from neopixel import NeoPixel
>>> np = NeoPixel(Pin(5), 20)
>>> np[0] = (255, 0, 0)
>>> np[1] = (0, 128, 0)
>>> np[2] = (64, 0, 0)
>>>
>>> np.write()

 

写真のように赤と緑が出ました。

 

チュートリアルにはbppパラメータでRGBWのカラースケールが指定できることが

書かれています。

 

>>> from machine import Pin
>>> from neopixel import NeoPixel
>>>
>>> np = NeoPixel(Pin(5), 20, bpp=4)
>>>
>>> np[0] = (255, 0, 0, 128)
>>> np[1] = (0, 255, 0, 128)
>>> np[2] = (0, 0, 255, 128)
>>>
>>> np.write()

 

ちょっとカラフルになりました。

 

1日目で紹介したオライリー本に記載のコードを動かすと1枚目の写真のようになります。

randomモジュールで色のRGBを指定してくるくると回りながらLEDが光りました。

 

これからの季節、クリスマスツリーの装飾とかにいいですね!

 

gist777af058d1d68ad02395b9c804057f9d

 

 

 

micropythonでmqtt

qiita.com

 

MicroPython Advent Calender 5日目です。

4日目はESP32+micropythonでslackにメッセージを投稿しました。

 

今日はwifiにつながったそのままの勢いでmqttでpublish/subscribeしてみます。

 

micropython-lib/umqtt.simple at master · micropython/micropython-lib · GitHub

 

micropython-libにあるumqtt.simpleをローカルに保存します。

simple.pyだとわかりづらい気がしたのでmqtt.pyにリネームしてampyツールでESP32に転送しました。

 

> ampy -p COM4 put mqtt.py

 

ローカルに保存したフォルダにpublishとsubscribeの例があります。

両方がっちゃんこしたものを書いてESP32に転送しました。

 

> ampy -p COM4 put pubsub.py

 

ますはメッセージを送ってみます。

MQTTブローカーはWindows10にmosquittoを入れて使用しました。

 

An Open Source MQTT v3.1 Broker

 

ブローカーを立ち上げてメッセージを送信するメソッドを呼び出します。

 

f:id:ken5owata:20171205003648p:plain

 

ブローカーにメッセージが届きました。

 

f:id:ken5owata:20171205004838p:plain

 

f:id:ken5owata:20171205004933p:plain

wiresharkでみてもmqttのフロー通りでメッセージが送れています。

Client IDもCONNECT要求時にセット出来ていました。

 

次にmsgをsubscribeしてみます。

subscribeするメソッドを呼び出しておいて、コマンドプロンプトからメッセージを送信しました。

 

> mosquitto_pub.exe -h 192.168.0.7 -t micropython -m hello

 

f:id:ken5owata:20171205023033p:plain

 

ブローカーを通じてメッセージがやり取りされています。

f:id:ken5owata:20171205023125p:plain

 

f:id:ken5owata:20171205022858p:plain

 

wiresharkでも流れが追えました。

 

というわけでREPLからの単発実行ではありますがmqttをpuslish/subscribeしてみました。

 

gistb8215e6c2c404d3726d98ba0ad1fdb1c

micropythonでslackに投稿

qiita.com

 

MicroPython Advent Calender 4日目です。

5日目の15分前ですがぎりぎりセーフということで。

 

昨日@inachiさんの

BLE対応版MicroPython for ESP32をmacOSでビルドしてみる - Qiita

はでした。

 

ESP32のBLEの部分はArduinoでもmicropythonでも絶賛開発中でまだまだサンプルも少ない感じ気がしますがこれから充実してくるでしょう。

また今月のインターフェイスはmicropython特集があるのでぜひ興味がある方は購入されてはいかがでしょうか。

Interface2018年1月号目次|Interface

 

2日目の記事でNUCREO-F401でmicropythonを動かしてみましたが、今日はESP32と

micropythonでslackのAPIを使用してメッセージを投稿します。

このへんはwifiにつながりTCP/IPスタックを積んだESPシリーズの強みですね。

 

ESP8266やESP32のmicropythonでHTTP通信をする場合はsocketモジュールを使います。

以下のチュートリアルにはGETリクエストとwebサーバの例が載っています。

5. Network - TCP sockets — MicroPython 1.9.3 documentation

 

GETリクエストの例をPOSTにしてslackのAPIを使用します。

 

まずSlackのAPIを使うためにはtokenを取得する必要があります。

以下の手順でtokenを取得しましょう。

 

Slack APIを使用してメッセージを送信する - Qiita

 

取得したtokenは送信先のチャンネル、メッセージとともにPOSTするデータに貼り付けます。

以下のようなコードになりました。

gist69e875ce8b9aeb1145865e13d79421a1

 

コードを書いたらampyツールでファイルをESP32に転送します。

> ampy -p port put slack.py

 

ファイルを転送したらwifiに接続してメソッドを呼び出してみます。

f:id:ken5owata:20171204233349p:plain

 

f:id:ken5owata:20171204233515p:plain

ちゃんとメッセージを投げれました。

 

micropythonをはじめよう(STM32F401編)

qiita.com

 

MicroPython Advent Calender 2日目です。

 

昨日はオライリーで出版されたProgramming with MicroPythonの第1章を紹介しました。

今日は購入して長らく放置していたSTM32マイコンでmicropythonを動かしてみたいと思います。

 

akizukidenshi.com

ターゲットとなるのはSTM32F401のNUCLEO-F401REボードです。

秋月電子で手頃な価格で入手できます。

本家のpyboardはSTM32F405ですが、STM32F401は以下のように公式にサポートされているわけではないのですが、micropythonの実行が可能です。

wikiにも記載されています。

Board NUCLEO F401RE · micropython/micropython Wiki · GitHub

 

These boards are not officially supported but should be fully functional

 

ソースをコンパイルして書き込みが必要となりますが、pyboardはいい値段がするので気軽に試したいなら、こちらの方がよいかもしれません。

 

・ビルド&書き込み

それでは実際に試してみたいと思います。

以下の手順はUbuntu 16.04で行いました。他の環境では試すことが出来ていないのですみません。

 

・必要なパッケージのインストール

$ sudo apt-get install libffi-dev

$ sudo apt-et install gcc-arm-none-eabi

 

・書き込みツール(Stlink Tools)のインストール

$ sudo apt-get install cmake

$ sudo apt-get install libusb-1.0.0-dev

$ git clone https://github.com/texane/stlink.git

$ cd stlink

$ make release

$ make debug

$ cd build/Release

$ sudo make install

$ sudo ldconfig

 

・micropythonのビルドと書き込み
$ git clone https://github.com/micropython/micropython

$ cd micropython/ports/stm32/

$ make BOARD=NUCLEO_F401RE deploy-stlink

 

こんな感じで書き込めました。

$ make BOARD=NUCLEO_F401RE deploy-stlink
Use make V=1 or set BUILD_VERBOSE in your environment to increase build verbosity.
Writing build-NUCLEO_F401RE/firmware0.bin to the board via ST-LINK
st-flash 1.4.0-13-g1969148
2017-12-02T10:49:40 INFO common.c: Loading device parameters....
2017-12-02T10:49:40 INFO common.c: Device connected is: F4 device (Dynamic Efficency), id 0x10016433
2017-12-02T10:49:40 INFO common.c: SRAM size: 0x18000 bytes (96 KiB), Flash: 0x80000 bytes (512 KiB) in pages of 16384 bytes
2017-12-02T10:49:40 INFO common.c: Attempting to write 14984 (0x3a88) bytes to stm32 address: 134217728 (0x8000000)
Flash page at addr: 0x08000000 erased
2017-12-02T10:49:40 INFO common.c: Finished erasing 1 pages of 16384 (0x4000) bytes
2017-12-02T10:49:40 INFO common.c: Starting Flash write for F2/F4/L4
2017-12-02T10:49:40 INFO flash_loader.c: Successfully loaded flash loader in sram
enabling 32-bit flash writes
size: 14984
2017-12-02T10:49:40 INFO common.c: Starting verification of write complete
2017-12-02T10:49:41 INFO common.c: Flash written and verified! jolly good!
Writing build-NUCLEO_F401RE/firmware1.bin to the board via ST-LINK
st-flash 1.4.0-13-g1969148
2017-12-02T10:49:41 INFO common.c: Loading device parameters....
2017-12-02T10:49:41 INFO common.c: Device connected is: F4 device (Dynamic Efficency), id 0x10016433
2017-12-02T10:49:41 INFO common.c: SRAM size: 0x18000 bytes (96 KiB), Flash: 0x80000 bytes (512 KiB) in pages of 16384 bytes
2017-12-02T10:49:41 INFO common.c: Attempting to write 287256 (0x46218) bytes to stm32 address: 134348800 (0x8020000)
Flash page at addr: 0x08060000 erasedEraseFlash - Sector:0x7 Size:0x20000
2017-12-02T10:49:46 INFO common.c: Finished erasing 3 pages of 131072 (0x20000) bytes
2017-12-02T10:49:46 INFO common.c: Starting Flash write for F2/F4/L4
2017-12-02T10:49:46 INFO flash_loader.c: Successfully loaded flash loader in sram
enabling 32-bit flash writes
size: 32768
size: 32768
size: 32768
size: 32768
size: 32768
size: 32768
size: 32768
size: 32768
size: 25112
2017-12-02T10:49:52 INFO common.c: Starting verification of write complete
2017-12-02T10:49:56 INFO common.c: Flash written and verified! jolly good!

 

書き込みに成功したらシリアルコンソールを開きボードのリセットスイッチを押します。

$ sudo screen /dev/ttyACM0 115200

 

おなじみのREPL画面が開いてボード上のLEDでLチカができました。

 

f:id:ken5owata:20171202114537p:plain

 

というわけで秋月電子で売っているSTM32マイコンボードでmicropythonを実行してみました。

 

MicroPython Advent Calender 1日目 What is MicroPython?

qiita.com

 

MicroPython Advent Calender 1日目です。

 

今年のmicropythonを振り返る記事を書こうと考えていましたが、オライリーでmicropythonの本が出版されたのでその内容と1章のWhat is MicroPython?を紹介したいと思います。

 

www.amazon.com

 

本の構成は以下のようになっています。

    序文

  1. What is MicroPython?
  2. Pyboard
  3. BBC micro:bit
  4. Adafruit Circuit Playground Express
  5. ESP8266/ESP32
  6. Thinking Embedded
  7. Visual Feedback
  8. Input and Sensing
  9. GPIO
  10. Networking
  11. Sound and Music
  12. Robots
  13. Idiomatic MicroPython
  14. Next Steps

 

1章ではなぜMicro+Pythonなのかという点とMicroPythonの誕生とこれまでの経緯が書かれています。

MicroPythonの作者はDemian Georgeさんです。

彼はケンブリッジ大学の物理学者である一方、RoboCupロボコン)の競技者でもあり自らCコンパイラをスクラッチ作成するなど優れた才能を持つ方のようです。

そんなDemianさんが2013年の余暇の時間にマイコンPythonを作成し始めたのがMicroPythonのスタートです。

Demianさんは開発のためKickstarterのキャンペーンを張り見事に大成功。

2014年には出資者にpyboardが配布されました。

 

Micro Python: Python for microcontrollers by Damien George — Kickstarter

 

micropythonのcommunityはすぐさま大きくなり、github上で世界中の人々からの貢献でバグ、ドキュメント、ツール、他ボードへの移植がなされました。

 

2015年、European Space Agency(欧州宇宙機関)がmicropythonの開発を援助することが発表されました。

人工衛星ペイロードを計算する用途で研究開発が行われたようです。

 

同じころイギリスのBBCは全国の11歳の児童に教育向けデバイスの配布を発表しました。現在では日本でも発売されているmicro:bitです。

このmicro:bitへのmicropython移植を手伝ったのがDemianさんでした。

ちょうどmicro:bitの基板設計者がケンブリッジのDemianさんのオフィスの隣人だったこともあり、プロトタイプのボードで移植作業が進められたようです。

 

micropythonの成功はその派生形を生みました。

AdafruitはmicripythonをforkさせてSAMD21をターゲットにしたCircuitPythonを作りました。

Make: Japan | AdafruitがCircuitPythonへ移行

 

※Adafruitのmicropythonのページはとても充実していて見ていて飽きませんのでぜひご覧ください。

Adafruit Learning System

 

2016年、micropythonの2回目のKickStarterが募集されました。

 

MicroPython on the ESP8266: beautifully easy IoT by Damien George — Kickstarter

 

2回目はESP8266への移植です。それまでのmicropythonがターゲットとしていたSTM32などのマイコンは直接インターネットに接続することはできないタイプです。

wifiチップとTCP/IPプロトコルを搭載したESP8266への移植によりmicropythonのIoTへの道が開かれることとなりました。

 

2017年には更にESP32への移植が進められています。

夏に開催されたMaker Fair Tokyoではmicro:bitの日本発売が発表されました。

micro:bitプロジェクトの創始者も来日してスピーチを行ってました。

 

micropythonは年々サポート対象のボードが増え開発も活発に行われています。

欧州宇宙機関が開発を支援するなど、ホビー用途のみならず産業用途での使用も今後増えていくのではないでしょうか。

 

 以上、大いに誤訳もあったと思いますが1章の内容とこれまでmicropythonについて記載しました。

 

2章以降の内容につきましてもMicroPython Advent Calenderの中でご紹介していきたいと思います。