寝台急行はまなす

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

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の中でご紹介していきたいと思います。

 

AVTOKYOの一番長い日

AVTOKYO 2017に参加して半田付けしてきました。

参加者に配られた基板はこうして出来上がったという視点でレポを記します。

 

f:id:ken5owata:20171115200047j:image

 

2017年11月5日(日) 足立区保塚地域学習センター

AVTOKYOの1週間前であるこの日、足立区の公民館に13時に集まり今回の基板製作者(@nanbuwks)より当日の流れと基板がまた到着していない知り驚く。

f:id:ken5owata:20171116005657j:plain

 

 

f:id:ken5owata:20171114203931j:image

上が当初の構想段階であった。

残念だが力及ばずこうならなかった。

f:id:ken5owata:20171114203903j:image

プログラムの流れ検討

f:id:ken5owata:20171114204003j:image

今回の基板に使用したのはstm32f103c8t6でありAliexpressで非常に安価($2)で手に入る。

環境を構築するとarduinoIDEで使用可能になる。

adafruitのOLEDのライブラリを修正後プログラムを書いていた。

 

4時過ぎにコーヒー休憩をしてお子さんが散らかした部屋に掃除機を掛けて時間となった。

終了後は@nanbuwksファミリーを車に乗せて秋月電子八潮店に向かった。

f:id:ken5owata:20171114204751j:image

初めて入った八潮店は通路が広く快適でここでは基板に付ける電池ボックスが調達された。

下のお子さんがとことこやってきて「う◯こ」と言われたが時すでに遅かった。

@nanbuwksファミリーを送り届けた後帰宅した。 

 

11月9日(木) 秋葉原 ナノラボ

基板が到着し半田付けを手伝うため夜19時、秋葉原ナノラボに6人が集まった。

f:id:ken5owata:20171115220627j:image 

夜10時まで半田付けがもくもくと行なわれた。

この時点で完成していたのは150枚ほどだったろうか。

ナノラボで紙袋を頂き70枚分の部品を自宅に持って帰った。

 

11月10日(金) 自宅

朝家を出る前に親父に半田付け依頼を出す。

10時に帰宅するとマイコンの半田付けはほぼ終了していた。グッジョブ親父。

セブンのホットドッグを齧りながら半田付け作業が始まった。

 

11月12日(土)自宅、CLUB SIX TOKYO - 六本木

AVTOKYO当日である。

親父の活躍により12時過ぎにはマイコンとOLED、赤外線LEDの半田付けが完了していた。残りはスイッチであったが表面実装のため時間がかかり70枚のスイッチが付いたのは朝4時であった。

f:id:ken5owata:20171115084805j:image

スイッチをつけた基板にブートローダを焼いた後活動限界を迎え仮眠を取った。

 

8時半に起床、荷物をまとめ会場の六本木に向かう。

荷物の搬入を手伝い作業スペースで半田付けとプログラム書き込みに分かれて作業が始まった。

この時点で会場オープンまで残り1時間半である。

f:id:ken5owata:20171115085414j:image

 

危機を察知したスタッフ、一般参加者も加わって半田付け作業が進められた。

手伝って頂いた方云く、硫黄島のような絶望的戦いとのことである。

私は戦時中の工場で働く気分を感じることができた。

 

そうこうするうちに会場オープンまで後15分となったが、この時点で完成品はどれだけ出来たのか、プログラムは動いているのか、あと何枚残っているのかなど状況を把握している者はおらず混乱の坩堝である。

本来であれば入場時に基板が配られる予定だったが主催者判断により後で配布されることとなった。

誠に申し訳ない…

f:id:ken5owata:20171116010956j:plain

 

そうこうするうちに12時に会場オープンとなり続々と参加者が入ってきた。

半田付けスペースは会場入り口すぐのところであったためおのずと人目についたがこちらはそんなことは気にしてられない。

早く半田付けをして基板を完成させないと参加者に配布できないのである。

取り憑かれたように半田付けを続行し16時頃には何とか配布できる分を捌いて一息つけただろうか。

 

ラムコークを一杯飲んで一息付けた後、不良品を修正するため作業スペースに戻った。

半田不良や部品付け忘れに取り組み18時過ぎには主催者から予定数が足りたとのことで組み立て工場は稼働を終えることになった。

この時点で朝から何も食べていなかった。

 

ぐったりして座っていると19時を回った。

20時で終わるために片付け作業を始めないといけない。

とりあえず持ってきたものを箱に詰めていき工場閉鎖はつつがなく完了した。

 

クローズを見届けた後、荷物とともに会場を出た。

打ち上げの招待券を頂いたのでありがたく中華をがっついた。

f:id:ken5owata:20171115200224j:image

北京ダッーーーーーク!!

 

23時前に打ち上げは終了、日比谷線への荷物搬入を手伝い帰宅した。

こうして長い一日は終わったのであった。

 

初めて参加したAVTOKYOであったが六本木のクラブで半田付けを行うという貴重な体験が出来たのでとてもよかったと思う。

参加者がクリックして遊んでくれてるのを見て半田付けした甲斐があったなと実感した。

個人的には表面実装のコツが掴めたので半田付けがちょっと上手くなったかも。 

 

 ※AVTOKYOは半田付けを行うイベントではありません。

 アルコール片手に語り合うセキュリティ・カンファレンスです。