寝台急行はまなす

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

WipyとESP32-Devkitのピン配置

MicroPython Advent Calendar 2017 - Qiita

 

MicroPython Advent Calender 15日目です。

昨日の記事でESP32-DevkitにWipyのファームを書き込みました。

 

書き込んだ時にPin配置がどうなるかLチカで確認しました。

WipyのPin配置は以下の画像です。

 

http://www.pighixxx.com/test/wp-content/uploads/2016/11/wipy_v01_0_pinout_rc1.png

 

内側のGPIOXXがESP32-DevkitのIOXXに対応します。

例えばESP32-DevkitのIO14にLEDをつなげた場合、P23を指定します。

 

>>> io14 = Pin('P23', mode=Pin.OUT)
>>> io14.value(1)
>>> io14.value(0)

 

 

逆にGPIOXXに記載がなくてESP32-Devkitにあるもの、例えばIO23は動きませんでした。

Pycomのフォーラムで見つけたESP-WROOM-02にファームを書き込んでみている人が

ピン配置のCSVを置いてるのでそちらもご確認ください。

 

https://forum.pycom.io/topic/1347/wipy-on-esp32-wroom-procedure

micropython-share/wipy-wroom at master · pacmac/micropython-share · GitHub

Pycom(Wipy)のファームをESP32 dev-kitに焼く

MicroPython Advent Calendar 2017 - Qiita

MicroPython Advent Calender 14日目です。
忘年会などで数日更新が滞りました。 面目次第もございません。。。

さてPycomというメーカを先日紹介しました。 Pycomのボードは技適が取れていないので使えませんが、
使われているのは秋月で売ってるのと同じESP32です。

ファーム焼いたら動くかなーと思って探していたら以下のページを発見。
秋月電子のdevkitで試してみました。

Update Pycom WiPy Firmware From Commandline

ESP32−DevKitC ESP−WROOM−32開発ボード: 無線、高周波関連商品 秋月電子通商 電子部品 ネット通販

注意!!

forumで出ていた最新のファーム(1.10.2.b1)ではうまく動きませんでした。
※起動できずリセットがかかりつづける状態に。。。

1.9.2.b2では書き込みに成功してmicropythonが立ち上がりました。
moduleなどの動作確認はできていないので、あくまで自己責任でお願いします。
ファームは以下から1.9.2.b2を持ってきます。

https://forum.pycom.io/topic/517/downgrading-firmware-advanced-users

$ wget https://software.pycom.io/downloads/WiPy-1.9.2.b2.tar.gz
$ tar xvf WiPy-1.9.2.b2.tar.gz
$ ls -1
WiPy-1.9.2.b2.tar.gz
bootloader.bin
partitions.bin
script
wipy.bin

解凍したファイルを順番に書き込んでいきます。
ブートローダを0x1000に書き込みます。

$ esptool --port /dev/ttyUSB0 --baud 115200 --after no_reset write_flash --flash_mode dio --flash_freq 80m --flash_size detect 0x1000 bootloader.bin
esptool.py v2.0-beta1
Connecting....
Detecting chip type... ESP32
Uploading stub...
Running stub...
Stub running...
Attaching SPI flash...
Configuring flash size...
Auto-detected Flash size: 4MB
Flash params set to 0x022f
Compressed 16560 bytes to 10763...
Wrote 16560 bytes (10763 compressed) at 0x00001000 in 1.0 seconds (effective 139.1 kbit/s)...
Hash of data verified.

Leaving...
Staying in bootloader.

partition tableファイルを0x8000に書き込みます。

$ esptool --port /dev/ttyUSB0 --baud 115200 --after no_reset write_flash --flash_mode dio --flash_freq 80m --flash_size detect 0x8000 partitions.bin 
esptool.py v2.0-beta1
Connecting....
Detecting chip type... ESP32
Uploading stub...
Running stub...
Stub running...
Attaching SPI flash...
Configuring flash size...
Auto-detected Flash size: 4MB
Compressed 3072 bytes to 133...
Wrote 3072 bytes (133 compressed) at 0x00008000 in 0.0 seconds (effective 1488.3 kbit/s)...
Hash of data verified.

Leaving...
Staying in bootloader.

最後にファームウェアを0x10000に書き込みます。

$ esptool --port /dev/ttyUSB0 --baud 115200 --after no_reset write_flash --flash_mode dio --flash_freq 80m --flash_size detect 0x10000 wipy.bin 
esptool.py v2.0-beta1
Connecting......
Detecting chip type... ESP32
Uploading stub...
Running stub...
Stub running...
Attaching SPI flash...
Configuring flash size...
Auto-detected Flash size: 4MB
Compressed 1178608 bytes to 777638...
Wrote 1178608 bytes (777638 compressed) at 0x00010000 in 68.7 seconds (effective 137.2 kbit/s)...
Hash of data verified.

Leaving...
Staying in bootloader.

f:id:ken5owata:20171216150341p:plain:w300

秋月で売っているDev-kitでWipyのファームが動きました。
GPIOはピン配置が違うので、うまく動かないかもしれませんがその他の機能は大丈夫そうです。

micropythonでADコンバータ

MicroPython Advent Calendar 2017 - Qiita

MicroPython Advent Calender 12日目です。


昨日は@inachiさんで BLEをサポートした MicroPython `Bleson' でした。
公式でRAMが足りないからBLEはむり!と言われていたmicro:bitのBLEに光明が!という記事でした。今後に期待です。

さて10日目にDHT11センサーを扱ってみましたが、精度に不満があります。
LM35が手元にあったので、ESP32のADコンバータで値を読み取りました。

class ADC – analog to digital conversion — MicroPython 1.9.3 documentation

ちょうど2017年11月号のトラ技にどんぴしゃで記事が載っていました。
基板もついてきてmicropythonの特集もあるのでおすすめです。

記事によるとアッテネータを0dBに設定したほうが測定精度がよくなるようで、その計算式は以下になります。
電圧[V] = A-D変換値 × 0.000235 + 0.075

さっそくREPLで試してみます。

>>> from machine import Pin, ADC
>>> adc = ADC(Pin(35))
>>> adc.width(ADC.WIDTH_12BIT)
>>> adc.atten(ADC.ATTN_0DB)
>>> (adc.read() * 0.000235+0.075) / 0.01
20.707
>>>

DHT11とは異なり小数点以下も読み取れましたね。

micropythonでDHT11

qiita.com

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に投げるのと合体させて...

f:id:ken5owata:20171210114301p:plain

mciropythonでbotなんかもサクッと作れそうですね。

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