micropythonでDHT11
Micropython Advent Calender 10日目です。
昨日は @inachi さんで micro:bitのMicroPythonの記事でした。
プログラミング教育でスクラッチから次のステップとして、MicroPythonは非常によいと思いますね。
micro:bitのドキュメントを日本語に翻訳されたのは@inachiさんです。この場を借りてお礼申し上げます。
BBC micro:bit MicroPython ドキュメンテーション — BBC micro:bit MicroPython 0.0.1 ドキュメント
さて今日はESP32 + MicroPythonでDHT11センサーを扱ってみました。
以下のURLはESP8266のドキュメントですが、ESP32でも同じようにできました。
https://docs.micropython.org/en/latest/esp8266/esp8266/quickref.html
>>> import dht
>>> import machine
>>>
>>> d = dht.DHT11(machine.Pin(25))
>>> d.measure()
>>> d.temperature()
20
>>> d.humidity()
38
>>>
slackに投げるのと合体させて...
mciropythonでbotなんかもサクッと作れそうですね。
Pycom ~micropythonのIoTメーカー~
MicroPython Advent Calender 6日目です。
8日目に投稿していますが、6日目です。
さてmicropythonのご関心の皆様はPycomというメーカーご存知でしょうか?
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の製品を購入して動かすことはできませんが、ドキュメントやフォーラムには色々と面白そうなネタがありますので
ご紹介していきたいと思います。
それにしてもWiFi到達距離: 最大 1 kmってほんとにそんな飛ぶんですかね??
micropythonでOLED (SSD1306)
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
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
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
ブローカーを立ち上げてメッセージを送信するメソッドを呼び出します。
ブローカーにメッセージが届きました。
wiresharkでみてもmqttのフロー通りでメッセージが送れています。
Client IDもCONNECT要求時にセット出来ていました。
次にmsgをsubscribeしてみます。
subscribeするメソッドを呼び出しておいて、コマンドプロンプトからメッセージを送信しました。
> mosquitto_pub.exe -h 192.168.0.7 -t micropython -m hello
ブローカーを通じてメッセージがやり取りされています。
wiresharkでも流れが追えました。
というわけでREPLからの単発実行ではありますがmqttをpuslish/subscribeしてみました。
micropythonでslackに投稿
MicroPython Advent Calender 4日目です。
5日目の15分前ですがぎりぎりセーフということで。
昨日@inachiさんの
BLE対応版MicroPython for ESP32をmacOSでビルドしてみる - Qiita
はでした。
ESP32のBLEの部分はArduinoでもmicropythonでも絶賛開発中でまだまだサンプルも少ない感じ気がしますがこれから充実してくるでしょう。
また今月のインターフェイスはmicropython特集があるのでぜひ興味がある方は購入されてはいかがでしょうか。
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に接続してメソッドを呼び出してみます。
ちゃんとメッセージを投げれました。
micropythonをはじめよう(STM32F401編)
MicroPython Advent Calender 2日目です。
昨日はオライリーで出版されたProgramming with MicroPythonの第1章を紹介しました。
今日は購入して長らく放置していたSTM32マイコンでmicropythonを動かしてみたいと思います。
ターゲットとなるのは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チカができました。
というわけで秋月電子で売っているSTM32マイコンボードでmicropythonを実行してみました。